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

hakan eryargi hakan.eryargi at gmail.com
Sun Jul 19 11:02:51 PDT 2009


well, i know both trees evaluate to same result, but i want it this
way for human readability.  this will be used for defining requirments
and later will be presented in a gui. and i guess it's easier to debug
this way..

so you mean writing experssion as: (just postponing OR for now)

expression
       p+=primary (AND p+=primary)* -> ^(AND $p+)
       ;

i get an RewriteEmptyStreamException
Exception in thread "main"
org.antlr.runtime.tree.RewriteEmptyStreamException: token AND
       at org.antlr.runtime.tree.RewriteRuleElementStream._next(RewriteRuleElementStream.java:158)
       at org.antlr.runtime.tree.RewriteRuleTokenStream.nextNode(RewriteRuleTokenStream.java:58)
       at tmp.parser.testParser.expression(testParser.java:232)
       at tmp.parser.testParser.program(testParser.java:104)
       at tmp.parser.TestParser.main(TestParser.java:24)

On Sun, Jul 19, 2009 at 8:47 PM, Jim Idle<jimi at temporal-wave.com> wrote:
> Not sure WHY you would want that buy it is just:
>
> p+=primary (AND p+=primary)* -> ^(AND $p+)
>
> Jim
>
> On Jul 19, 2009, at 7:04 AM, hakan eryargi <hakan.eryargi at gmail.com> 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)+)?
>>   ;
>>
>> primary    :
>>   VARIABLE
>>   | LPAREN! expression RPAREN!
>>   ;
>>
>> thanks,
>> hakan
>>
>> 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