当前位置: 首页 > 知识库问答 >
问题:

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

边浩漫
2023-03-14
obj = { var1 = "hello"
        var2 = "world};

我希望看到一条消息说“xyz行的语法错误”,“预期的。但相反,对于每一个由我丢失的逗号引起的后续错误,在xyz处都有一个获得一百个不可行的替代方案的列表。

有没有一种方法可以得到一个错误,这是由缺少逗号造成的?如果它会抱怨意外的var2令牌,也是完全可以的。

共有1个答案

沈开畅
2023-03-14

您可以使用两种方法:

  • 检查是否识别出一个最有可能导致大量以下“错误”的错误,并禁止显示随后的所有错误。因此,在得到更多错误之前,您必须首先修复该错误。但是,这不会改变ANTLR生成的神秘消息...
  • 直接在语法中添加一些常见的错误选项,并在调用它们时通知错误侦听器。这样,您就可以自己指定错误消息。关于这个主题的更多参考,您可以参考权威的ANTLR 4参考,其中有一章是关于这个的,或者您可以看一下我的一个语法,它使用这种方法来处理不平衡的括号。

当使用第二种方法时,您还应该消除以下错误“错误”,因为语法可以成功地匹配给定的输入,因此可以正确地继续。
因此,我强烈建议您使用第二种方法

 类似资料:
  • 问题内容: 我用antlr 4.4编写了这样的语法: 然后我使用antlr 4.4生成解析器和词法分析器,此过程成功 生成类后,我编写了一些使用语法的Java代码 以上所有代码都是CSV字符串的解析器,例如:““ a”,“ b”,c“ 窗口输出: 我想知道如何从代码背后的方法(getErrors()或…)中获取此错误,而不是由于输出窗口的结果 谁能帮我 ? 问题答案: 使用ANTLR进行CSV解析

  • 第22行是: 我不知道为什么我会得到这个,我已经检查了我的语法,所有似乎是正确的。它基本上不喜欢执行查询后的任何内容 编辑: 我明白这是容易SQL注入,但我这样做只是为了测试目的。

  • 问题内容: 我有这个行代码 在我的本地(WAMP)php 5.4.3上运行良好,但是当我将其托管在服务器cpanel上时,它将给出此错误 我服务器上的php版本是5.2.17 我没有发现任何问题,请帮忙 问题答案: 您需要运行PHP 5.4+才能使用速记数组

  • 问题内容: 调试代码时出现此错误: PHP解析错误:语法错误,第72行的order.php中出现意外的T_OBJECT_OPERATOR 这是代码段(从第72行开始): 问题答案: 不幸的是,不可能在刚用PHP 5.4之前创建的对象上调用方法。 在PHP 5.4和更高版本中,可以使用以下内容: 注意必填的括号对。 在以前的版本中,必须在变量上调用方法:

  • 我发现php endif出现错误,找不到错误。这里我给出了我的代码。请帮我修一下

  • 下面是代码的一个片段(从第72行开始):