Java 捕获ANTLR中的错误并查找父级
我发现我可以通过覆盖displayRecognitionError在解析过程中捕获错误,但是如何找到此错误的父“节点” 如果我有语法: prog:statexpr; stat:STRING; expr:整数 并输入“abc def” 然后我将在“def”处得到一个错误,它应该是一个整数。在这一点上,我想得到父级,它是“expr”(因为它在整数部分中失败),它的父级是“prog”。有点像在java中打印堆栈跟踪 我试图查看从RecognitionException解析到displayRecognitionError的节点,但它为null,并且使用CommonErrorNode父节点为null 我应该采取完全不同的方法吗?CommonTree有:Java 捕获ANTLR中的错误并查找父级,java,error-handling,antlr,Java,Error Handling,Antlr,我发现我可以通过覆盖displayRecognitionError在解析过程中捕获错误,但是如何找到此错误的父“节点” 如果我有语法: prog:statexpr; stat:STRING; expr:整数 并输入“abc def” 然后我将在“def”处得到一个错误,它应该是一个整数。在这一点上,我想得到父级,它是“expr”(因为它在整数部分中失败),它的父级是“prog”。有点像在java中打印堆栈跟踪 我试图查看从RecognitionException解析到displayRecogni
/** Who is the parent node of this node; if null, implies node is root */
public CommonTree parent;
这就是你想要的吗
哦,你想要父母的规则。我要说的是,在需要的地方使用异常捕捉错误。在要捕获expr错误的规则中添加异常捕获,然后关闭其他规则的默认捕获
使用
@规则捕获{
catch(RecognitionException re){throw re;}
}
然后在您想要捕获的规则中添加捕获。我想捕获所有规则中的错误,那么我是否应该生成一个新的自定义异常,在每个规则中捕获它,添加该规则的名称并再次抛出它,直到它到达我自己的代码(我启动解析器的地方)?我该怎么做?