[antlr-interest] Tree parser eats up DOWN node when navigating optional child node

Jim Idle jimi at temporal-wave.com
Thu Aug 5 09:11:07 PDT 2010


The root node of any tree needs to have a type, so ^( ^( makes no sense as
what is the first root supposed to be?

Jim

> -----Original Message-----
> From: antlr-interest-bounces at antlr.org [mailto:antlr-interest-
> bounces at antlr.org] On Behalf Of Gerald Rosenberg
> Sent: Wednesday, August 04, 2010 10:09 PM
> To: Junkman
> Cc: antlr-interest at antlr.org
> Subject: Re: [antlr-interest] Tree parser eats up DOWN node when
> navigating optional child node
> 
>   ------ 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



More information about the antlr-interest mailing list