我发现在解析期间我可以通过覆盖displayRecognitionError来捕获错误,但是如何找到此错误的父“节点”?
离。如果我有语法: prog:stat expr; stat:STRING; expr:INTEGER;
并输入“abc def”。
然后我会在“def”处得到一个错误,它应该是一个整数。此时我想获得“expr”的父级(因为它在INTEGER部分内失败)并且它是父级“prog”。有点像在java中打印堆栈跟踪。
我试图查看来自于被解析为displayRecognitionError的RecognitionException的节点,但它是null,并且使用CommonErrorNode时父节点为空。
我可能采取完全不同的方法吗?
答案 0 :(得分:2)
CommonTree有:
/** Who is the parent node of this node; if null, implies node is root */
public CommonTree parent;
是你想要的吗?
哦,你想要父规则。我会说使用异常来捕获你想要的错误。在您要捕获expr错误的规则中添加异常捕获,然后关闭其他规则的默认捕获。
使用
@rulecatch { catch(RecognitionException re){throw re; } }
然后在要捕获的规则中添加捕获。