0
由於問及Removing Left Recursion in ANTLR回答,我可以刪除左遞歸獲取樹的構建與ANTLR
E -> E + T|T T -> T * F|F F -> INT | (E)
,我得到下面的一個
E -> TE' E' -> null | + TE' T -> FT' T' -> null | * FT'
然後左遞歸中取出後,如何使修改語法的樹構造? 隨着輸入1 + 2,我想有一棵樹
^('+' ^(INT 1) ^(INT 2))。或類似。
grammar T; options { output=AST; language=Python; ASTLabelType=CommonTree; } start : e -> e ; e : t ep -> ??? ; ep : | '+' t ep -> ??? ; t : f tp -> ??? ; tp : | '*' f tp -> ??? ; f : INT | '(' e ')' -> e ; INT : '0'..'9'+ ; WS: (' '|'\n'|'\r')+ {$channel=HIDDEN;} ;
我發佈了一個使用AST重寫規則的例子:http://stackoverflow.com/questions/2856612/visualizing-an-ast-created-with-antlr-in-a-net-environment。這有幫助嗎? – 2010-06-11 19:29:08