正如在删除 ANTLR 中的左递归中询问和回答的那样,我可以删除左递归
E -> E + T|T T -> T * F|F F -> 整数 | (五)
左递归删除后,我得到以下一个
E -> TE' E'-> 空 | + TE' T -> 英尺' T'-> 空 | *英尺'
那么,如何用修改后的语法进行树构造呢?输入1+2,我想要一棵树
^('+' ^(INT 1) ^(INT 2)). 或类似的。
语法 T; 选项 { 输出=AST; 语言=Python; ASTLabelType=CommonTree; } 开始:e -> e ; e : t ep -> ??? ; EP: | '+' t ep -> ??? ; t : f tp -> ??? ; TP: | '*' f tp -> ??? ; f : 整数 | '(' e ')' -> e ; INT : '0'..'9'+ ; WS: (' '|'\n'|'\r')+ {$channel=HIDDEN;} ;