thanks. that's clearly simpler and better for this case :) On Mon, Jul 20, 2009 at 12:06 AM, David-Sarah Hopwood<david-sa...@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 >
List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "il-antlr-interest" group. To post to this group, send email to il-antlr-interest@googlegroups.com To unsubscribe from this group, send email to il-antlr-interest+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en -~----------~----~----~----~------~----~------~--~---