我有一个类似的规则
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