我試圖制定一個規則,將重寫成嵌套樹(類似於二叉樹)。ANTLR規則重寫爲嵌套樹
例如:
a + b + c + d;
解析會像(((a + b) + c) + d)
樹。基本上每個根節點將有三個孩子(LHS'+'RHS),其中LHS可以是更多嵌套節點。
我嘗試一些事情,如:
rule: lhs '+' ID;
lhs: ID | rule;
和
rule
: rule '+' ID
| ID '+' ID;
(有一些樹重寫),但他們都給我一個錯誤一下被甩遞歸。我不知道如何解決這個沒有某種類型的遞歸。
編輯:右邊這給我想要的東西相反我的最新嘗試遞歸:
rule:
ID (op='+' rule)?
-> {op == null}? ID
-> ^(BinaryExpression<node=MyBinaryExpression> ID $op rule)
給人(a + (b + (c + d)))
你必須使用嵌套表達式,因爲ANTLR是LL(*)。見[這個問題](http://stackoverflow.com/questions/1452729/antlr-grammar-for-expressions?rq=1)。或者你可以在樹解析器中做到這一點,這可能會更容易/更快取決於你的語法。 – 2012-06-26 21:59:47
如果'a + b'都是子節點,那麼根是什麼?你爲什麼不想以root身份運營? –
根節點是一個虛構的節點。樹結構是我工作內容的一部分。 –