使用ANTLR4'进行错误解析;s C.g4

使用ANTLR4'进行错误解析;s C.g4,antlr4,Antlr4,编辑:我已将此作为问题添加到ANTLR的github: 我正在使用取自的ANTLR版本4.3和C.g4解析以下代码: 语法将foo(a)解释为声明,但它应该是后缀表达式。我在这里粘贴了错误的解析树 在blockItem规则中,可以通过更改声明和语句的顺序来正确解释它。这样做会破坏其他东西吗 foo(a);是有效的声明,foo a;,还有表情。C11规范显示: 区块项目 :声明 |声明 ; ANTLR将其解释为解决声明中的任何歧义。没有符号表信息,无法解决此问题:(对我来说似乎也是一个bug。

编辑:我已将此作为问题添加到ANTLR的github:

我正在使用取自的ANTLR版本4.3和C.g4解析以下代码:

语法将
foo(a)
解释为
声明
,但它应该是
后缀表达式
。我在这里粘贴了错误的解析树

blockItem
规则中,可以通过更改
声明
语句
的顺序来正确解释它。这样做会破坏其他东西吗

foo(a);是有效的声明,foo a;,还有表情。C11规范显示:


区块项目
:声明
|声明
;


ANTLR将其解释为解决声明中的任何歧义。没有符号表信息,无法解决此问题:(

对我来说似乎也是一个bug。你应该在github上提出一个问题。我想知道为什么这两个选项之间没有歧义……好吧。但是,我几天前添加了一个不同的问题,但没有人解决它。我想他们在其他地方很忙,所以我在这里寻找修复方法。没有歧义,因为它是自动解决的,有利于o对于第一种选择,即上文提到的声明!如果将“声明”重命名为“maybeDeclarationOrSomethingElse”,可能会更清楚;-)。
void bad()
    {
    foo(a);
    }