[antlr-interest] SimpleCalc Tree Rewrite Rules
Matthew Bowman
matthew.bowman at sogotech.com
Mon Sep 17 04:00:41 PDT 2007
Eric Deplagne wrote:
> On lun, 17 sep 2007 11:31:32 +0300, Matthew Bowman wrote:
>
>> So I have the following grammar:
>> [...]
>> expr : l=term (o=plus_minus r=term)* -> ^(OP $o $l $r);
>> term : l=factor (o=mult_divide r=factor)* -> ^(OP $o $l $r);
>>
>> And my problem is with the rewrite rules. I want it to only rewrite the
>> rule with (OP $o $l $r) if it actually matches 'term plus_minus term' or
>> 'factor mult_divide factor' but if it only matches a term or factor I
>> want the subtree from factor.
>>
>> [...]
>>
>
> The idea that immediately comes to me is to replace the * by +
> and add an alternative for a single term.
>
> expr:
> l=term |
> l=term (o=plus_minus r=term)+ -> ^(OP $o $l $r)
> ;
>
I tried that and it also had problems. However, I manage to get around
it altogether by just making the root node the operator itself
expr:
term ((PLUS | MINUS)^ term)*
I needed the intermediate AST in the right form for my tree grammar but
I've managed to get the tree grammar to work with this approach!
Thanks for you reply,
--
Matthew Bowman
More information about the antlr-interest
mailing list