[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