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

Michael Bedward michael.bedward at gmail.com
Mon Feb 28 16:44:01 PST 2011


I'm wondering how much unlearning this is going to require. Even
though I've only used ANTLR for a couple of years, the conditioning to
avoid left-recursing like the plague is already deeply etched into my
frontal cortex. When I first looked at this latest example I couldn't
cope with it at all because it was too easy.

Michael


On 28 February 2011 11:56, Terence Parr <parrt at cs.usfca.edu> wrote:
> 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
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>


More information about the antlr-interest mailing list