ANTLR 4:如何从嵌入式操作生成解析错误?

时间:2013-06-11 20:46:20

标签: error-handling antlr runtime-error antlr4

我用Java编写了一个ANTLR解析器,它从一种特定于域的语言转换为另一种语言,并使用嵌入式操作生成中间结构信息。在解析这些嵌入式操作期间,使用从外部文件运行时加载的数据来验证正在解析的输入。因此,由于在运行时加载外部需求,根据语法正确的输入文件可能会失败。

这种情况的一个简单示例是解析器,其中有效关键字列表来自用户提供的文本文件。根据语法正确解析的关键字可能会失败,因为它不在用户在运行时提供的关键字列表中。

我已经可以捕获这些问题并摆脱解析,但我的错误消息会丢失上下文,因此用户很难知道输入中发生错误的位置。

有没有办法让ANTLR嵌入式操作导致解析器抛出包含当前解析上下文的伪解析异常?例如:

line 125:11 <my custom error message generated from embedded action goes here>

我已经阅读了ANTLR 4参考书,但找不到任何相关的例子。

1 个答案:

答案 0 :(得分:2)

找到解决方案:

Token startPos = getContext().getStart();
String inputLocation = "line " + startPos.getLine() + ":" + startPos.getCharPositionInLine();