2013-03-27 53 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

相關問題