From 3a77f1850b331326368b926b5414ab5197ebc4c2 Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 16 Apr 2015 00:00:27 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20else?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/annimon/everlastingsummer/Lexer.java | 1 + src/com/annimon/everlastingsummer/Parser.java | 18 ++++++++++++++++++ .../annimon/everlastingsummer/TokenType.java | 1 + 3 files changed, 20 insertions(+) diff --git a/src/com/annimon/everlastingsummer/Lexer.java b/src/com/annimon/everlastingsummer/Lexer.java index eec60e3..35d370b 100644 --- a/src/com/annimon/everlastingsummer/Lexer.java +++ b/src/com/annimon/everlastingsummer/Lexer.java @@ -52,6 +52,7 @@ public final class Lexer { KEYWORDS.put("label", TokenType.LABEL); KEYWORDS.put("if", TokenType.IF); + KEYWORDS.put("else", TokenType.ELSE); KEYWORDS.put("endif", TokenType.ENDIF); KEYWORDS.put("renpy.pause", TokenType.RENPY_PAUSE); diff --git a/src/com/annimon/everlastingsummer/Parser.java b/src/com/annimon/everlastingsummer/Parser.java index e0f9a31..bcc967d 100644 --- a/src/com/annimon/everlastingsummer/Parser.java +++ b/src/com/annimon/everlastingsummer/Parser.java @@ -153,6 +153,18 @@ public final class Parser { position += pos; return false; } + + // Остаток от условного выражения. Пропускаем до появления ENDIF. + if (match(token, TokenType.ELSE)) { + int pos = 0; + while (true) { + if (lookMatch(pos, TokenType.ENDIF)) break; + if (lookMatch(pos, TokenType.EOF)) return true; + pos++; + } + position += pos; + return false; + } } // Текст с именем автора реплики. @@ -378,6 +390,12 @@ public final class Parser { level++; pos++; } + if (lookMatch(pos, TokenType.ELSE)) { + level--; + pos += 2; // пропускаем ELSE и двоеточие + // Завершаем работу по достижению ELSE первого уровня. + if (level <= 0) break; + } if (lookMatch(pos, TokenType.ENDIF)) { level--; // Завершаем работу по достижению ENDIF первого уровня. diff --git a/src/com/annimon/everlastingsummer/TokenType.java b/src/com/annimon/everlastingsummer/TokenType.java index e7be886..1349419 100644 --- a/src/com/annimon/everlastingsummer/TokenType.java +++ b/src/com/annimon/everlastingsummer/TokenType.java @@ -49,6 +49,7 @@ public enum TokenType { RETURN, IF, + ELSE, ENDIF, // команды