[antlr-interest] Re: Modification of Node Attributes using Tree Grammar

Niall Gormley ngormley at hotmail.com
Thu Jun 13 14:17:27 PDT 2002


Loring,

Spot on. Works a treat.

Thanks for the help.

Any ideas on how to go about fixing the AST Gen code so that an node type 
can be associated with a class, just as in the Parser? I'm willing to lend a 
hand.... Or are heterogeneous ASTs a bad idea anyway?

Thanks,
Niall

>From: "lgcraymer" <lgc at mail1.jpl.nasa.gov>
>Reply-To: antlr-interest at yahoogroups.com
>To: antlr-interest at yahoogroups.com
>Subject: [antlr-interest] Re: Modification of Node Attributes using Tree 
>Grammar
>Date: Thu, 13 Jun 2002 20:46:20 -0000
>
>--- In antlr-interest at y..., Terence Parr <parrt at j...> wrote:
> >
> > On Thursday, June 13, 2002, at 09:40  AM, Niall Gormley wrote:
> >
> > > Hi,
> > >
> > > Is it possible to use a Tree Grammar to modify Node attributes?
> > >
> > > The node "i" is getting modified buy the call to "setVariantType"
>but I
> > > can't seem to get it copied to the output AST for the dims
>expression.
> > > So
> > > the real question might be, how can I get source node "i" to end
>up in
> > > the
> > > output expression?
> > >
> > > dims!
> > >   : #( LITERAL_DIM i:IDENT )
> > >     {
> > >     i.setVariantType(0);
> > >     #dims = #( #[LITERAL_DIM], #(i));
> > >     }
> > >   ;
> >
> > Howdy.  i points to the output node created from IDENT so you it
>seems
> > you are setting the proper variable.  #(i) is very strange though.
>What
> > do you mean here?  #i or i works, but #(i) is a long way to say make
>i
> > the root of a tree with only one  node: i.  That may be something
>for
> > which the code gen is broken.  Try removing the #(...) around the i
>and
> > see what happens.  Let me know if this is a bug and I'll add to the
> > list.  Loring may already have found this ;)
>
>I remember that some of the node construction stuff is broken, but not
>which part specifically.  For what you want to do, try just
>
>dims
>    : #( LITERAL_DIM i:IDENT )
>      {
>      #i.setVariantType(0);
>      }
>    ;
>
>and if that fails, try replacing #i with i_AST--that will work.  ANTLR
>by default builds an output tree which matches the input tree and you
>just need to set the contents of #i.  Note that AST labels behave
>differently than token labels:  if i:IDENT labels a token in the
>parser, #i translates to i; while in a tree grammar, #i translates to
>i_ast (and #i_in translates to i).
>
>Also, if you are using heterogeneous ASTs, make sure that you specify
>them in the tree grammar as well as the parser--otherwise you will get
>  the default AST node type.  One of the things that needs to be fixed
>is that ASTFactories should know about heterogeneous ASTs:
>right now, #[FOO] always builds an AST node of the default type
>because the ASTFactory only knows about the default.
>
>--Loring
>
> >
> > Ter
>
>
>
>
>Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/


_________________________________________________________________
Chat with friends online, try MSN Messenger: http://messenger.msn.com


 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 



More information about the antlr-interest mailing list