从 antlr 解析器中获取有意义的语法错误

Getting meaningful Syntax-errors from antlr parser

我已经使用 Antlr 为 .Net 创建了一个脚本解释器。它工作得很好,但它产生的语法错误很可怕。 可以找到处于早期开发阶段的库 here and the used grammar is based on this ecma-Script grammar

现在最大的问题是,当我有一个很大的脚本文件并且我有一个对象定义说

obj = { var1 = "hello"
        var2 = "world};

我预计会收到一条消息,提示“第 xyz 行出现语法错误”。 但取而代之的是,对于由于我缺少逗号引起的每个后续错误,在 xyz 获得了一百个没有可行替代方案的列表。

有没有办法解决由缺少逗号引起的错误?如果它会抱怨意外的 var2 令牌,那也完全没问题。

好吧,您可以使用 2 种方法:

  • 您检查您是否识别出一个很可能会引起大量关注的错误 "errors" 并在之后禁止显示所有错误。因此,在出现更多错误之前,您必须先修复该错误。然而,这不会改变 ANTLR 生成的神秘消息...
  • 您将一些常见的错误选项直接添加到您的语法中,并在它们被调用时通知错误侦听器。有了它,您可以自己指定错误消息。有关此主题的更多参考,您可以参考包含有关此内容的章节的 Definitive ANTLR 4 reference,或者您可以查看使用此方法处理不平衡括号的 a grammar of mine

当使用第二种方法时,您还应该去掉以下错误生成的内容 "errors",因为语法可以成功匹配给定的输入,因此可以正确继续。
因此,我强烈建议您使用第二种方法