Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Error handling ANTLR 4:如何从嵌入式操作生成解析错误?_Error Handling_Antlr_Runtime Error_Antlr4 - Fatal编程技术网

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

Error handling ANTLR 4:如何从嵌入式操作生成解析错误?,error-handling,antlr,runtime-error,antlr4,Error Handling,Antlr,Runtime Error,Antlr4,我用Java编写了一个ANTLR解析器,它可以从一种特定于领域的语言转换为另一种语言,并使用嵌入的操作生成中间结构信息。在解析过程中,这些嵌入操作使用运行时从外部文件加载的数据来验证正在解析的输入。因此,根据语法正确的输入文件可能由于在运行时加载的外部需求而失败 这种情况的一个简单示例是解析器,其中有效关键字列表来自用户提供的文本文件。根据语法正确解析的关键字可能会失败,因为它不在用户在运行时提供的关键字列表中 我已经可以捕捉到这些问题并摆脱解析,但是我的错误消息会丢失上下文,因此用户很难知道输

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

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

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

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

line 125:11 <my custom error message generated from embedded action goes here>
第125:11行
我已经阅读了ANTLR 4参考书,但找不到任何相关示例。

找到了解决方案:

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

注意:我意识到使用AST遍历方法比使用嵌入式操作更灵活,但我希望能给出在非AST上下文中解决此问题的具体答案。