如何在不收到错误消息的情况下访问 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
我有这样的规定
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