[antlr-interest] actions, return values, ASTs, left recursion

Terence Parr parrt at cs.usfca.edu
Sun Feb 27 16:56:26 PST 2011


ta da!

e returns [int v]
  : e '*'^ b=e {$v *= $b.v;}
  | e '+'^ b=e {$v += $b.v;}
  | INT {$v = $INT.int;}
  ;

works. :)  builds a tree and computes v.  $v automatically set for left-recursive call. generates this more or less:

e returns [int v] : =e_[0] {$v=$e_.v;} ;

e_[int _p] returns [int v]
    :  e_primary  {root_0=$e_primary.tree;} {$v=$e_primary.v;}
        ( ( {_p <= 4}?=> '*' ^b= e {$v *= $b.v;}
          | {_p <= 3}?=> '+' ^b= e {$v += $b.v;}
          )
        )*
    ;

e_primary returns [int v]
    : INT {$v = $INT.int;}
    ;

Ter


More information about the antlr-interest mailing list