我正在使用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
必须与规则中的第一个{{1}}相同?