Java 如何访问语法中的当前树节点?

Java 如何访问语法中的当前树节点?,java,antlr,antlr3,Java,Antlr,Antlr3,问题是如何访问语法中{“action”}块中的当前树节点 我说的是Javatarget,所以在生成的规则方法中,我想访问objectroot\u 1(参见下面的标准生成代码,SUBJECT,这是我语法中的标记,没关系): 在语法方面,我希望能够做到以下几点: subject : noun -> ^(SUBJECT noun) { ... place code here to work with `root_1` object ... } ; 有人能提出一些建议吗?谢谢。嗯,我找到了一

问题是如何访问语法中
{“action”}
块中的当前树节点

我说的是
Java
target,所以在生成的规则方法中,我想访问object
root\u 1
(参见下面的标准生成代码,
SUBJECT
,这是我语法中的标记,没关系):

在语法方面,我希望能够做到以下几点:

subject :   noun -> ^(SUBJECT noun) { ... place code here to work with `root_1` object ... } ;
有人能提出一些建议吗?谢谢。

嗯,我找到了一些难看的方法。我可以在构造之后使用
@访问提到的
根目录1
对象,并获得对
根目录0
对象的访问权:

subject
@after{
    // ...((CommonTree)root_0).getChild(0)... - this is `root_1` object.
}
    :   noun -> ^( SUBJECT noun);
但如果有人提出更合适的方法,这将受到欢迎


UPD:正如亲爱的提到的,这个
((CommonTree)root_0)
可以用
$tree
替换,并设置
选项{ASTLabelType=CommonTree;}
我相信您正在寻找
$tree
属性。

好的,谢谢您的回答。但正如我所看到的,
$tree
只是对变量
root\u 0
的引用。它也只能放在
构造之后的
@中(在此之前,它只包含
null
值)。因此,我的问题仍然没有解决,因为我正在寻找一种很好的方法来获取对
root_1
变量的引用。此外,由于
$tree
实际上是
retval.tree=root_0
,所以它也必须转换为
CommonTree
类型。@andemoniy您需要设置
选项{ASTLabelType=CommonTree;}
选择
$tree
作为该类型。这会改变一切,谢谢。我认为,我们的答案必须是混合的,以便全面了解。
subject
@after{
    // ...((CommonTree)root_0).getChild(0)... - this is `root_1` object.
}
    :   noun -> ^( SUBJECT noun);