如何访问ANTLR4规则引用而不获取错误消息



我有一个类似的规则

top_clause returns [TopClause tc] :
tat = top_or_any_top
SP
e = expr
EP
{
var ln = getLineNum($tat);
$tc = new TopClauseExtant(ln, [...other params...]);
};

注意,我正在尝试获取行号,并将其传递给我正在创建的AST对象。getLineNum()

public static LineNum getLineNum(ParserRuleContext pr) {
return new LineNum(pr.Start.Line);
}

getLineNum()稍后可能会从令牌中获得更多,并返回更多,因此我现在正在获取一个可能会更改的整数(pr.Start.Line(,而返回类型LineNum(当前仅包装一个作为行号的int(可能包含更多详细信息。因此getLineNum()函数+LineNum类抽象。

不幸的是,antlr抱怨道:在$tat中缺少对规则引用tat的属性访问。它基本上想要$tat.<something>,但我特别想传递整个规则$tat,这样我以后就可以把它拆开。

这有道理吗?关于如何得到我想要的有什么想法吗?

kaby76回答;使用.ctx,如$e.ctx

最新更新