捕获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; }}

然后在要捕获的规则中添加捕获。