Исправлена обработка вложенных меню
This commit is contained in:
parent
f3d4930cec
commit
326c70f514
@ -145,13 +145,7 @@ public final class Parser {
|
|||||||
|
|
||||||
// Остаток от меню выбора. Пропускаем до появления ENDMENU.
|
// Остаток от меню выбора. Пропускаем до появления ENDMENU.
|
||||||
if (match(token, TokenType.TEXT)) {
|
if (match(token, TokenType.TEXT)) {
|
||||||
int pos = 0;
|
if (hasEndMenu) position += skipMenu();
|
||||||
while (true) {
|
|
||||||
if (lookMatch(pos, TokenType.ENDMENU)) break;
|
|
||||||
if (lookMatch(pos, TokenType.EOF)) return true;
|
|
||||||
pos++;
|
|
||||||
}
|
|
||||||
position += pos;
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -553,6 +547,25 @@ public final class Parser {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int skipMenu() {
|
||||||
|
int pos = 0;
|
||||||
|
int level = 1; // уровень вложенности меню
|
||||||
|
while (true) {
|
||||||
|
// Расчёт уровня меню.
|
||||||
|
if (lookMatch(pos, TokenType.MENU) && lookMatch(pos + 1, TokenType.COLON)) {
|
||||||
|
level++;
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
if (lookMatch(pos, TokenType.ENDMENU)) {
|
||||||
|
level--;
|
||||||
|
// Завершаем работу по достижению ENDMENU первого уровня.
|
||||||
|
if (level <= 0) break;
|
||||||
|
}
|
||||||
|
pos++;
|
||||||
|
}
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private double consumeDouble() {
|
private double consumeDouble() {
|
||||||
return Double.parseDouble(consume(TokenType.NUMBER).getText());
|
return Double.parseDouble(consume(TokenType.NUMBER).getText());
|
||||||
|
Loading…
Reference in New Issue
Block a user