【发布时间】:2025-11-26 12:00:02
【问题描述】:
在一种情况下,我的语法允许 ... ID = expr; 或 ... ID = expr(expr [,expr]*);,即带有终止分号的表达式和函数调用。当参数列表中有错误时,ANTLR 决定最简单的解决方案是用分号替换左括号。这确实符合规则,但是输入的其余部分看起来像垃圾。随后的解析错误具有误导性。
在这种情况下,我认为这是错误的恢复方式。错误出现在参数列表中的可能性很大,而不是 ( 的拼写错误 ;。我想告诉 ANTLR,如果它在那里找到一个左括号,它必须使用它,而不是替换它。然后(在我的梦中)ANTLR 会正确诊断内心表达的问题。
我读了这本书并尝试了一些实验,但没有一个能解决这个问题。我尝试使词法分析器依赖于状态,例如区分顶层和内部分号。问题是,如果 ANTLR 愿意创建一个标记,那么词法分析器产生什么并不重要。
【问题讨论】:
-
晚了 5 年,但你有没有找到解决这个问题的方法?
标签: antlr4