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

hakan eryargi hakan.eryargi at gmail.com
Sun Jul 19 11:43:10 PDT 2009


thank you both. it seems ok now :)

so that p+ means keep a list of primary (or whatever) and add primary
to that list at '= primary' points

On Sun, Jul 19, 2009 at 9:22 PM, John B. Brodie<jbb at acm.org> wrote:
> Greetings!
>
> On Sun, 2009-07-19 at 21:02 +0300, hakan eryargi wrote:
>> 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+)
>>        ;
>>
>
> Jim forgot to take into account that the AND phrases may be missing,
> which is why you get the empty exception when no AND is in the input
> stream.
>
> So I think your original rule of:
>
> expression : primary ( (AND^ primary)+ | (OR^ primary)+ )? ;
>
> should be something like this (untested):
>
> expression :
>   p+=primary ( ( /*empty*/ -> primary /* or maybe $p or $p+ */ )
>              | ( (AND p+=primary)+ -> ^(AND $p+) )
>              | ( (OR p+=primary)+ -> ^(OR $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
>> >
>>
>> 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