如何在不收到错误消息的情况下访问 ANTLR4 规则参考

How to access an ANTLR4 rule reference without getting an error msg

我有这样的规定

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() 以后可能会从令牌中获得更多,return 更多,所以我现在正在获得一个可能会改变的整数(pr.Start.Line)并且 return 类型 LineNum (目前只包装一个作为行号的整数)可能包含更多细节。因此 getLineNum() func + LineNum class 抽象。

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

这有意义吗?关于如何获得我想要的东西有什么想法吗?

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