Thanks Claude, if i understand your code correctly , it looks that the "." eats the whole "Then" tree ( tree executed when condition is true ) so u mark berfore it ( then case) and after it (else cases) , is that true ?
well , if this is true and this is the standard implementation , then this is a bug in the C Target in the C Target the macro MATCHANYT() represents the "." , unfortunetly it matches only a signle token , not a sub-tree , making it really usless however , it's really easy to modify this in the c target , just confirm me this is the standard behavior ( a note i thinked of now , can anybody check to see if the java terget saves the indexes of nodes , and i mean indexes of them as they appear in the flattened parse tree , coz this is another cause of problems in C Target ) Thanks Regards, Mohammed Yousef 2009/11/14 Claude Moulin <[email protected]> > Here is the solution I use in Java. The principle is also valid for > loops. > > I suppose the CommonTreeNodeStream methods () I use have equivalent > functions in C > > push, pop, and mark > > > > if_statement > > @init{ > > int mark_before_true = 0; > > int mark_before_false = 0; > > } : > > ^(IF e = expbool {mark_before_true = input.mark();} . ({mark_before_false > = input.mark();} else_list = .)? ) > > { > > if ($e.b) { > > push(mark_before_true); > > list_instructions(); > > pop(); > > } > > else > > if (else_liste != null) { > > push(mark_before_false); > > list_instructions(); > > pop(); > > } > > } > > ; > > expbool is a rule returning a Boolean in its b field. > > list_instructions is a rule parsing a tree containing instructions in a > list. > > input.mark() gives the index of the following node and in this case it is > the index I want to store. > > And in the @members section I add two methods in order to simplify the > code: > > public void push(int index) { > > ((CommonTreeNodeStream)input).push(index); > > } > > public void pop() { > > ((CommonTreeNodeStream)input).pop(); > > } > > > > I hope it is usefull. > > Claude > > > 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 [email protected]. For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=.
List: http://www.antlr.org/mailman/listinfo/antlr-interest Unsubscribe: http://www.antlr.org/mailman/options/antlr-interest/your-email-address
