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 ... } ;

有人可以提出任何想法吗?谢谢。

4

2 回答 2

1

我相信你正在寻找$tree房产。

于 2013-03-27T16:32:13.737 回答
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用 set替换options{ASTLabelType=CommonTree;}

于 2013-03-27T15:35:14.400 回答