Поддержка 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("label", TokenType.LABEL);
KEYWORDS.put("if", TokenType.IF); KEYWORDS.put("if", TokenType.IF);
KEYWORDS.put("else", TokenType.ELSE);
KEYWORDS.put("endif", TokenType.ENDIF); KEYWORDS.put("endif", TokenType.ENDIF);
KEYWORDS.put("renpy.pause", TokenType.RENPY_PAUSE); KEYWORDS.put("renpy.pause", TokenType.RENPY_PAUSE);

View File

@ -153,6 +153,18 @@ public final class Parser {
position += pos; position += pos;
return false; 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++; level++;
pos++; pos++;
} }
if (lookMatch(pos, TokenType.ELSE)) {
level--;
pos += 2; // пропускаем ELSE и двоеточие
// Завершаем работу по достижению ELSE первого уровня.
if (level <= 0) break;
}
if (lookMatch(pos, TokenType.ENDIF)) { if (lookMatch(pos, TokenType.ENDIF)) {
level--; level--;
// Завершаем работу по достижению ENDIF первого уровня. // Завершаем работу по достижению ENDIF первого уровня.

View File

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