首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ANTLR4:不正确工作的整数数的运行时匹配的语法

ANTLR4:不正确工作的整数数的运行时匹配的语法
EN

Stack Overflow用户
提问于 2014-12-14 21:48:43
回答 1查看 442关注 0票数 0

我正在尝试在ANTLR 4的书(第48-9页)中的语法,但语法并没有像广告中所做的那样。

输入是一系列整数。一个整数表示以下整数的数目。例如,以下输入中的前2表示有两个以下整数,然后这3个表示有三个如下整数:

代码语言:javascript
运行
复制
2    9    10    3    1    2    3

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

代码语言:javascript
运行
复制
grun Data file -tree

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

代码语言:javascript
运行
复制
(file (group 2 (sequence 9 10 3)) (group 1 (sequence 2 3)))

通过一些实验,我发现如果我从使用这个语义谓词更改语法:

代码语言:javascript
运行
复制
{$i<=$n}?

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

代码语言:javascript
运行
复制
{$i<$n}?

然后得到正确的输出树:

代码语言:javascript
运行
复制
(file (group 2 (sequence 9 10)) (group 3 (sequence 1 2 3)))

我很困惑。对为什么会发生这种事有什么想法吗?这是测试台(grun)的窃听器吗?或者(更可能)我不了解ANTLR的语义谓词和动作的工作原理吗?

代码语言:javascript
运行
复制
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 ;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-22 19:47:53

您的局部变量i开始未初始化( 0),而不是1,因为ANTLR 4.3中引入了一个bug。

这个bug在https://github.com/antlr/antlr4/issues/672中有更详细的描述。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27474527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档