【发布时间】:2010-06-11 18:15:18
【问题描述】:
根据Removing Left Recursion in 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;} ;
【问题讨论】:
-
我在这里发布了一个使用 AST 重写规则的示例:stackoverflow.com/questions/2856612/…。这有帮助吗?
标签: tree antlr compiler-theory