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