[antlr-interest] rewriting tree such that children are at same level

hakan eryargi hakan.eryargi at gmail.com
Sun Jul 19 15:42:55 PDT 2009


thanks. that's clearly simpler and better for this case :)

On Mon, Jul 20, 2009 at 12:06 AM, David-Sarah
Hopwood<david-sarah at jacaranda.org> wrote:
> hakan eryargi wrote:
>> hello,
>>
>> below is the main part of my grammar. it's ok but it creates an AST
>> from expression
>>
>> a & b & c  -> (& (& a b) c) : an AND node with children c and another
>> AND node with children a and b
>>
>> but i want: (& a b c) : an AND node with tree children
>>
>> how can i make that with a rewrite rule ?
>>
>> i've found following post in mail list but didnt helped me much :/
>> http://markmail.org/message/ed3ncmfimu3xnczt
>>
>> program :
>>       expression EOF!
>>       ;
>>
>> expression
>>       : primary ((AND^ primary)+ | (OR^ primary)+)?
>>       ;
>
> Change this to (tested):
>
>  expression
>        : primary (                -> primary
>                  | (AND primary)+ -> ^(AND primary+)
>                  | (OR  primary)+ -> ^(OR  primary+)
>                  )
>        ;
>
> This works because the 'primary+' on the right-hand-side of
> each '->' includes all primary nodes matched in the overall
> production.
>
> The other replies you got suggesting to use += may also work,
> but the solution above is simpler; normally you only need to
> use += if you need to refer to the list of nodes in an action.
>
> Jim Idle wrote:
>> Not sure WHY you would want that buy it is just:
>>
>> p+=primary (AND p+=primary)* -> ^(AND $p+)
>
> I assume that the solution still needs to satisfy the requirement
> in the recent thread with subject "forcing parenthesis":
> <http://www.antlr.org/pipermail/antlr-interest/2009-July/035196.html>
> <http://www.antlr.org/pipermail/antlr-interest/2009-July/035248.html>
>
> --
> David-Sarah Hopwood  ⚥  http://davidsarah.livejournal.com
>
>
>
>
> 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