ANTLR4中"no viable alternative at input '<EOF>'"的良好错误消息



我想向我的用户显示更漂亮的错误消息。

例如,如果有人键入integer i=错误消息no viable alternative at input '<EOF>'则会显示。由于我的语法规则,这完全没问题且可预测,但我正在寻找改进这些信息的方法。如果上面的示例中缺少 =,则消息将更改为 mismatched input '<EOF>' expecting '=' 。再次可预测,但我可以在代码中对这样的事情做更多的事情,而不是一般的输入错误。

我是否应该在代码中捕获它们并尝试评估哪些情况意味着什么?还是有更好的方法来解决这个问题?

通常,

您将创建自己的错误侦听器并将其添加到解析器中,您可以在其中自行处理错误。为此,通过调用 parser.removeErrorListeners(); 删除任何现有的错误侦听器(默认情况下会自动注册控制台的一个(。定义一个从BaseErrorListener派生的自己的错误侦听器类,并通过 parser.addErrorListener(yourListener); 将该类的实例添加到解析器中。您可以在 ANTLR 运行时中看到此类自定义错误侦听器的示例(搜索 XPathLexerErrorListener (。重写 syntaxError 方法,并使用提供的信息生成自己的错误消息。已经有一条消息传递给此方法(除了行 + 字符位置、异常等其他内容(,您无法自定义该消息,因为它直接来自生成的代码。所以最好的办法可能是别管它,从头开始(传递的例外是你最好的选择(。

相关内容

  • 没有找到相关文章

最新更新