Comme demandé et répondu à Removing Left Recursion in ANTLR, je pouvais retirer la récursivité gaucheObtenir la construction d'arbre avec ANTLR
E -> E + T|T T -> T * F|F F -> INT | (E)
Après gauche retrait de récursivité, je suis la suivante
E -> TE' E' -> null | + TE' T -> FT' T' -> null | * FT'
Alors, comment faire la construction de l'arbre avec la grammaire modifiée? Avec l'entrée 1 + 2, je veux avoir un arbre
^('+' ^(INT 1) ^(INT 2)). Ou similaire.
grammar T; options { output=AST; language=Python; ASTLabelType=CommonTree; } start : 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;} ;
J'ai posté un exemple qui utilise les règles de réécriture AST ici: http://stackoverflow.com/questions/2856612/visualizing-an-ast-created-with-antlr-in-a-net-environment. Est ce que ça aide? –