正如在删除 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;} ;