Поддержка else

This commit is contained in:
Victor 2015-04-16 00:00:27 +03:00
parent 595dced7bd
commit 3a77f1850b
3 changed files with 20 additions and 0 deletions

View File

@ -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);

View File

@ -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 первого уровня.

View File

@ -49,6 +49,7 @@ public enum TokenType {
RETURN,
IF,
ELSE,
ENDIF,
// команды