3
假設我有這個簡單而毫無意義的語法:tree構造:傳播子樹子
propagate : what^ where*;
what : CHAR^;
where : NUMBER -> ^(PLUS NUMBER);
NUMBER : '0'..'9';
CHAR : 'a'..'z';
PLUS : '+';
如果它解析像a123456789
一個字符串,它會產生像一個AST:
我所要做的就是將通過what
解析的標記傳遞給where
並創建AST(對於相同的輸入),如:
我試圖以下列方式:
propagate : w=what^ where[$w.text]*;
what : CHAR^;
where[String s] : NUMBER -> ^(PLUS CHAR[s] NUMBER);
NUMBER : '0'..'9';
CHAR : 'a'..'z';
PLUS : '+';
它的工作原理,如果what
它是一個單一的道理,但如果它是什麼樹? 這是正確的方法嗎?
如果'a'是一棵樹(有孩子),它似乎只傳播樹的根(只有'a'沒有孩子),你能檢查它嗎?也許它取決於'CommonTree'的構造函數? –
@SalvatoreD。,好吧,你問的不是嗎?你的例子和我的演示也一樣。也許編輯你的問題並重新翻譯它,或者添加更多的例子。 –
我的問題是如果我想用它的孩子而不是單個節點傳播一棵整棵樹。你的演示和我的代碼只傳播一個令牌或樹的根。如果在演示中'a'有兩個名爲'b'和'c'的孩子,我會說:'... ^(PLUS ^(abc)1)^(PLUS ^(abc)2)... ' –