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))。または類似。
文法T;
オプション{
output = AST;
language = Python;
ASTLabelType = CommonTree;
}
開始: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;};