Antlr4 中的 C 语法在 `int main()` 上引发错误 `extraneous input 'int'`

C-Grammar in Antlr4 raises error `extraneous input 'int'` on `int main()`

(为了更好地概述,我将 link 我的代码,这样就不会不必要地使用太多 space)

总结:

在 Antlr4 中使用为 C 制作的 Grammar(我制作的部分修改文件)时,我目前面临一个奇怪的问题。它在遇到 type/function 定义时引发错误,例如 int main()int x。我很困惑为什么会这样(部分原因是我缺乏经验或知识),因为规则似乎没有问题。

仍然,当 运行 Python 生成的代码时,它会记录一条错误消息:

extraneous input 'int' expecting {'__extension__', '__builtin_va_arg', '__builtin_offsetof', '_Generic', '(', Identifier, Constant, StringLiteral}

调试代码我发现整个声明被归类为 primaryExpression,即使它应该是 assignmentExpression。所以似乎语法文件内部可能存在问题导致它无法正确识别它,或者我的 implementation(我的文件使用生成的代码)包含导致这种情况发生的奇怪错误。

如果有人知道它可能是什么或我可以尝试解决该问题,我将不胜感激 ^^

编辑:附加信息

这里是基本版本:link. The changes in my version are minimal and I only added a new type and specifier, meaning it should not interfere with the lexing and correctly identifying it. (Changes can be viewed here: link)

我发现了我的问题,这是基于我对 antlr4 如何处理这个问题以及语法文件的结构的误解。 (我在阅读@sepp2k 评论后意识到)。

我调用了错误的规则,在本例中是 primaryExpression。此规则不是实际的条目规则,这意味着调用它会导致 Antlr4 仅调用所需的规则之一,因此错误地解析整个字符串并且无法识别任何内容。我解决了这个问题,发现 compilationUnit 是实际的条目,这意味着现在一切都被解析好了。

(我还意识到我的问题结构相当松散,没有包含足够的信息,对此感到抱歉,但幸运的是我在意识到实际发生的事情后很快发现了问题)