如何制定包含多个相同令牌的规则?

时间:2014-04-27 15:04:16

标签: antlr grammar antlr4

我正在使用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}}相同?

0 个答案:

没有答案