2013-03-27 61 views
0

问题是关于如何访问语法中{"action"}块内的当前树节点。如何访问语法中的当前树节点?

我谈论Java目标,所以内部产生规则的方法,我想访问对象root_1(见下文,生成的标准代码,SUBJECT这里是我的语法里面的道理,也没关系):

{ 
    Object root_1 = (Object)adaptor.nil(); 
    root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SUBJECT, "SUBJECT"), root_1); 
    adaptor.addChild(root_1, stream_noun.nextTree()); 
    adaptor.addChild(root_0, root_1); 
    } 

里面的语法,我想有这样做的能力:

subject : noun -> ^(SUBJECT noun) { ... place code here to work with `root_1` object ... } ; 

有人能提出任何想法?谢谢。

回答

0

那么,我发现一些丑陋的方法。我能得到提及root_1对象的访问,使用@after建设,并获得对root_0对象访问:

subject 
@after{ 
    // ...((CommonTree)root_0).getChild(0)... - this is `root_1` object. 
} 
    : noun -> ^(SUBJECT noun); 

但是,如果有人会认为比较合适的方法 - 它会受到欢迎。

UPD:为亲爱280z28提到的,这一个((CommonTree)root_0)可以用$tree替换集options{ASTLabelType=CommonTree;}

1

我相信你正在寻找$tree属性。

+0

恩,谢谢你的回答。但是正如我所看到的,'$ tree'只是变量'root_0'的引用。它也可以只放在'@ after'构造中(在它之前它只包含'null'值)。所以,我的问题仍然是打开的,因为我正在寻找英俊的方式来引用'root_1'变量。 – Andremoniy 2013-03-27 17:17:47

+0

此外,由于'$ tree'实际上是'retval.tree = root_0',它也必须转换为'CommonTree'类型。 – Andremoniy 2013-03-27 17:19:45

+0

@Andremoniy您需要将'$ tree'的'options {ASTLabelType = CommonTree;}'选项设置为该类型。 – 2013-03-27 18:03:59