使用ANTLR4的C.g4进行错误的解析

时间:2014-07-03 20:11:58

标签: antlr4

编辑:我已将此问题添加为ANTLR的github:https://github.com/antlr/grammars-v4/issues/95

我使用ANTLR版本4.3和C.g4从https://github.com/antlr/grammars-v4/blob/master/c/C.g4解析以下代码:

void bad()
    {
    foo(a);
    }

语法将foo(a)解释为declaration,但它应该是postfixExpression。我在这里粘贴了错误的解析树。

可以通过更改declaration规则中statementblockItem的顺序来正确解释它。这样做会打破别的吗?

Wrong parse tree

1 个答案:

答案 0 :(得分:2)

FOO的(a);是一个有效的声明,foo a;,以及表达式。 C11规格显示:

blockItem : declaration | statement ;

哪个ANTLR解释为解决声明的任何含糊之处。没有符号表信息,这个无法解决。 :(