(为了更好地概述,我将链接我的代码,这样就不会占用太多不必要的空间(
摘要:
我目前在Antlr4中使用为C制作的Grammar(我制作的部分修改文件(时遇到了一个奇怪的问题。当遇到类型/函数定义(如int main()
或int x
(时,它会引发错误。我很困惑为什么会这样(部分原因是我缺乏经验或知识(,因为规则似乎没有包含任何问题。
尽管如此,当运行Python生成的代码时,它会记录一个错误:
extraneous input 'int' expecting {'__extension__', '__builtin_va_arg', '__builtin_offsetof', '_Generic', '(', Identifier, Constant, StringLiteral}
调试代码时,我发现整个声明都被分类为primaryExpression
,尽管它应该是assignmentExpression
。因此,语法文件中似乎存在问题,导致它错误地识别它,或者我的实现(我的文件使用生成的代码(包含一个奇怪的错误,导致这种情况发生。
如果有人知道这可能是什么,或者我可以尝试解决这个问题,我将非常感谢^^
编辑:附加信息
这里是基本版本:链接。我的版本中的变化很小,我只添加了一个新的类型和说明符,这意味着它不应该干扰词法分析和正确识别它
我发现了我的问题,这是基于我对antlr4如何处理这一问题以及语法文件的结构的误解。(我在阅读@sepp2k评论后意识到了这一点(。
我调用了错误的规则,在本例中为primaryExpression
。该规则不是实际的条目规则,这意味着调用它会导致Antlr4只调用所需的规则之一,从而错误地解析整个字符串,无法识别任何内容。我修复了这个问题,发现compilationUnit
是实际的条目,这意味着现在一切都解析得很好。
(此外,我意识到我的问题形式相当松散,没有包含足够的信息,对此感到抱歉,但幸运的是,在意识到实际情况后,我很快就发现了问题(