------ Original Message (Wednesday, August 04, 2010 5:21:33 PM) From: Junkman ------ Subject: Re: [antlr-interest] Tree parser eats up DOWN node when navigating optional child node > > You wrote "AST ^( ^( PARENT A ) B )". Can you describe the tree this > notates? I can see it as a node sequence, but I don't know what tree > structure it is describing. > > Thanks for the reply. > > Jay >
The AST ^( ^( PARENT A? ) B? ) should implement as ( ( PARENT Token.DOWN A? Token.UP ) Token.DOWN B? Token.UP ) but is actually ( PARENT Token.DOWN A? B? Token.UP ) Because parent_a is the root of parent, the parser is (for some reason) not actually generating the middle Token.UP Token.DOWN sequence. That explains why P and PA work, but PB and PAB do not - after matching for A?, the tree parser is looking for UP, but finding B. Not sure why Antlr is doing this - not expected. Changing A and/or B to non-optional does not change this behavior. If, however, you change the parent rule to parent : parent_a B? -> ^( M parent_a B? ) ; where M is an imaginary token (and make the corresponding change to the tree grammar), all four patterns will parse and match as expected: AST: ^( M ^(PARENT A? ) B? ) properly implements as ( ( M Token.DOWN PARENT A? Token.UP ) Token.DOWN B? Token.UP ) 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]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/il-antlr-interest?hl=en.
