[antlr-interest] manual AST construction: what am I doing wrong?

Jorge Scandaliaris j_scandaliaris at yahoo.es
Mon Jun 16 07:59:29 PDT 2003


Ric,
	Thanks!, I was close after trying all possibilities I could
imagine but missed it.
	I got to try this out :) 

Jorge  
> -----Original Message-----
> From: Ric Klaren [mailto:klaren at cs.utwente.nl]
> Sent: Monday, June 16, 2003 4:44 PM
> To: antlr-interest at yahoogroups.com
> Subject: Re: [antlr-interest] manual AST construction: what am I doing
> wrong?
> 
> On Sun, Jun 15, 2003 at 01:26:35PM +0200, Jorge Scandaliaris wrote:
> > 	How can I generate for a rule a single AST node, using manual
> > tree construction?
> 
> In a nutshell:
> 
> myrule ! : st:SOME_TOKEN
> { ## = #([MY_IMAG_AST_NODE, st->getText()]);
>   ##->setSomeAttrib( sumthin );
> }
> ;
> 
> Alternatively you can also use #myrule in stead of ##.
> 
> > 	I have created created a custom AST class. I have defined the
> > option ASTLabelType = "RefMyAST";	It is sort of working. I say
> > this 'cause I came over some issues and I am not sure if it is
ANTLR'
> > expected behaviour or I did something wrong.
> 
> > 	In view of this I decided that I don't need to generate all the
> > nodes corresponding to all sub rules, but that I only need the node
> > corresponding to the rule.
> > 	I tried using ! at the rule and sub rules levels, but here is
> > where problems appear. If I use say:
> > rule!
> > : .....
> > { ## = #[##];
> >   #->addSrc(...); // addSrc() is defined for MyAST
> > }
> > I have a run-time error in addSrc(). I think this is due to a
missing
> > astFactory->addChild(...)in the generated code compared to when
> > automatic AST building is done (what is the purpose of this anyway?
And
> > why it is only there for automatic tree building?).
> 
> The addChild stuff is used to generate the tree e.g. to link
sibling/child
> nodes together. If you turn it off you have to do this manually via
the
> #( .. ) syntax. If you have rules with multiple parts which may return
AST
> trees you may have to label them and then put them together yourself.
> 
> e.g.
> 
> some_rule: p1:other_rule p2:ignore_rule p3:great_other_rule
> {
>    ## = #( #p1, #p3 ); // only link up p1 and p3
> };
> 
> Hmmm lemme refer to this old post of Mike Barnett for some more stuff:
> 
> http://wwwhome.cs.utwente.nl/~klaren/antlr/treebuilding.txt
> 
> > Please, if someone can enlighten me on this, or point me to some
> > resources (I didn't find a lot). Maybe I got the semantics of AST
> > completely wrong?
> 
> There might be some jewels in the archives, maybe even still something
> usefull in the FAQ site.
> 
> Cheers,
> 
> Ric
> --
>
-----+++++*****************************************************+++++++++
--
> -----
>     ---- Ric Klaren ----- j.klaren at utwente.nl ----- +31 53 4893722
----
>
-----+++++*****************************************************+++++++++
--
> -----
>   "You can't expect to wield supreme executive power just because some
>    watery tot throws a sword at you!"
>   --- Monty Python and the Holy Grail
> 
> 
> 
> Your use of Yahoo! Groups is subject to
http://docs.yahoo.com/info/terms/



 

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




More information about the antlr-interest mailing list