捕获ANTLR中的错误并找到父级

时间:2011-01-07 15:40:46

标签: java error-handling antlr

我发现在解析期间我可以通过覆盖displayRecognitionError来捕获错误,但是如何找到此错误的父“节点”?

离。如果我有语法: prog:stat expr; stat:STRING; expr:INTEGER;

并输入“abc def”。

然后我会在“def”处得到一个错误,它应该是一个整数。此时我想获得“expr”的父级(因为它在INTEGER部分内失败)并且它是父级“prog”。有点像在java中打印堆栈跟踪。

我试图查看来自于被解析为displayRecognitionError的RecognitionException的节点,但它是null,并且使用CommonErrorNode时父节点为空。

我可能采取完全不同的方法吗?

1 个答案:

答案 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; } }

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