[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