Работя с 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
трябва да е същото като първото в правилото?