Исправлена обработка вложенных меню

This commit is contained in:
Victor 2015-04-16 18:11:38 +03:00
parent f3d4930cec
commit 326c70f514

View File

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