2

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

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

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

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

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

我已通读 ANTLR 4 Reference book 但找不到任何相关示例。

4

1 回答 1

2

找到了解决方案:

Token startPos = getContext().getStart();
String inputLocation = "line " + startPos.getLine() + ":" + startPos.getCharPositionInLine();
于 2013-06-11T21:40:30.243 回答