Поддержка 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("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);
|
||||||
|
@ -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 первого уровня.
|
||||||
|
@ -49,6 +49,7 @@ public enum TokenType {
|
|||||||
RETURN,
|
RETURN,
|
||||||
|
|
||||||
IF,
|
IF,
|
||||||
|
ELSE,
|
||||||
ENDIF,
|
ENDIF,
|
||||||
|
|
||||||
// команды
|
// команды
|
||||||
|
Loading…
Reference in New Issue
Block a user