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;};