Я работаю с ANTLR4, чтобы разобрать простой язык сценариев.
Этот язык использует следующий синтаксис для FOR
циклов:
FOR [I] = 1 to [N]
instructions
NEXT [I]
Чтобы быть правильным, цикл FOR
должен иметь точно такой же токен после ключевого слова FOR
и после ключевого слова NEXT
.
Например, это правильно:
FOR I = 1 TO 10
NEXT I
Хотя это неверно:
FOR I = 1 TO 10
NEXT J
Пока у меня есть правило, которое выглядит так:
forloop
: FOR VARNAME EQUAL INT TO INT instructions NEXT VARNAME
;
Со следующими связанными правилами лексера (я удалил постоянные ключевые слова, такие как FOR : 'FOR';
):
fragment ALPHA : [a-zA-Z_];
fragment ALPHANUM : [a-zA-Z_0-9];
fragment DIGIT : [0-9];
VARNAME : ALPHA ALPHANUM*;
INT : DIGIT+;
Однако это правило будет интерпретировать как правильный второй пример, который на самом деле неверен.
Как я могу сказать ANTLR4, что второй VARNAME
должен быть таким же, как первый в правиле?