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,所以在生成的规则方法中,我想访问objectroot\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);