[antlr-interest] 1pass cannot add/subtract more than two consecutive integers
Michael West
quagly at me.com
Fri Mar 25 15:52:14 PDT 2011
There seems to be a problem in the definitive guide example code
templates/generator/1pass/Expr.g
If more that two integers are added then the middle ones drop out, that is
1+2+3+4 becomes 1+4 in the generated jasmin. Seems to be that ops is not
treated as an array in the expr rule. My fix for this is:
Original Expr.g expr rule:
expr
: multExpr ( ops+=addOp | ops+=subOp )*
-> expr(firstExpr={$multExpr.st}, ops={ops})
;
Modified Expr.g expr rule
expr
: multExpr ( ops+=addOp | ops+=subOp )*
-> expr(firstExpr={$multExpr.st}, ops={$ops})
;
by adding the $ so that ops becomes $ops it gets treated as an array as it
should.
then since the template is getting an array now, need to add a separator to
the expr template in ByteCode.stg
Original expr template
expr(firstExpr, ops) ::= <<
Modified expr template
expr(firstExpr, ops) ::= <<
<ops; separator="\n">
>>
I didn't see a post on this previously. This works for me. Hope this helps
someone.
--
View this message in context: http://antlr.1301665.n2.nabble.com/1pass-cannot-add-subtract-more-than-two-consecutive-integers-tp6209416p6209416.html
Sent from the ANTLR mailing list archive at Nabble.com.
More information about the antlr-interest
mailing list