繁体   English   中英

ANTLR4:与整数匹配的运行时语法无法正常工作

[英]ANTLR4: grammar with runtime matching of number of integers not working correctly

我正在ANTLR 4书中尝试语法(第48-9页),但是语法表现不像广告中那样。

输入是一系列整数。 一个整数表示随后的整数的数量。 例如,以下输入中的前2个表示存在以下两个整数,然后3表示存在以下三个整数:

2    9    10    3    1    2    3

这本书的底部是书中给出的语法。 当我使用-tree标志运行ANTLR测试装备(grun)时,使用语法和上面的输入:

grun Data file -tree

我得到这个不正确的输出树:

(file (group 2 (sequence 9 10 3)) (group 1 (sequence 2 3)))

通过一些实验,我发现如果我更改了使用该语义谓词的语法:

{$i<=$n}?

使用这个不正确的语义谓词:

{$i<$n}?

然后我得到正确的输出树:

(file (group 2 (sequence 9 10)) (group 3 (sequence 1 2 3)))

我感到困惑。 为什么会这样? 这是测试装备中的错误吗? 还是(更有可能)我是否不了解ANTLR的语义谓词和动作的运作方式?

grammar Data;

file: group+ ;

group: INT sequence[$INT.int] ;

sequence[int n]
locals [int i = 1;]
      : ( {$i<=$n}? INT {$i++;} )*  // match n integers
      ;

INT  : [0-9]+ ;
WS  : [ \t\r\n]+ -> skip ;

由于ANTLR 4.3中引入的错误,您的局部变量i从未初始化(从0开始)而不是从1开始。

该错误的详细说明, 参见https://github.com/antlr/antlr4/issues/672

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM