Поддержка else
This commit is contained in:
parent
595dced7bd
commit
3a77f1850b
@ -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);
|
||||
|
@ -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 первого уровня.
|
||||
|
@ -49,6 +49,7 @@ public enum TokenType {
|
||||
RETURN,
|
||||
|
||||
IF,
|
||||
ELSE,
|
||||
ENDIF,
|
||||
|
||||
// команды
|
||||
|
Loading…
Reference in New Issue
Block a user