[antlr-interest] Re: Own AST : initializing extra private members

Eric Mahurin eric_mahurin at yahoo.com
Fri Aug 20 21:24:05 PDT 2004


Are you only doing setx to ID's or just a small set of cases?  If so,
something like this might work:

column : id[_Tablename_] PERIOD! id[_Columnname_] ;

id[int x]: i:ID {#i->setx(x);} ;

Eric

--- In antlr-interest at yahoogroups.com, Kristoff Tempelaere
<kristoff_tempelaere at y...> wrote:
> #---------- the class for the ASTNodes -------
> class MyAST : public antlr::CommonAST {
> private:
>     int _x;
> public:
>     void setx(const int x) {_x = x;}
>     //others
> };
>  
>  
> #------- a (simplified) parser rule ------------------
> column : 
>      (lbl1:ID PERIOD!) (lbl2:ID)
>      {#lbl1->setx(_Tablename_);}     //_Tablename_ is a int-constant
>      {#lbl2->setx(_Columnname_);}  //same
> ;
>  
>  
> #---- Information----------
> A column can be specified in SQL by "a.b" where "a" is a tablename
and "b" is a columnname.  I want to store this information in the AST,
and I do this right now using semantic actions  But I wondered if this
can't be done while the node is created... avoiding the semantic actions.
>  
> So instead of calling MyFactory.create(ID) to create the node, I
would like to call MyFactory.create(ID,_Tablename_), so the x-value is
set when creating the node.  Ofcourse I need a way to pass the xvalue
in the grammar... ID<_x=_Tablename_> or something like that?
>  
> The difference with the example on http://www.imada.sdu.dk/~morling/
is that the x-value is passed in the parsergrammar, and isn't
derivable from the data in the token.
>  
> I hope this makes it a bit more clear... thxs for your efforts !
>  
> Kristoff
>  
> 
> 
> Eric Mahurin <eric_mahurin at y...> wrote:
> You should give a more concrete example that shows exactly what you
> are doing - especially where xvalue is coming from. At least a
> complete rule, if not a mini-grammar (parser).
> 
> --- In antlr-interest at yahoogroups.com, Kristoff Tempelaere
> wrote:
> > Where does xvalue come from? Is it constant or does it rarely change?
> > ---- It changes a lot :( I'll make it a bit more concrete : I'm
> working on an SQL-grammar, and I need to store some extra information
> in the AST. For example, to group all keywords... 
> > 
> > Because sometimes I just need to all keywords in the query. I could
> do this by searching the AST for every keyword, based on the _ttype. 
> But thanx to the x-value I can do this in just one traversal, which
> saves ofcourse a lot of time... If there are 100 keywords, then this
> would sava 99 traversals... 
> > 
> > I saw a similar example, with a private member "line". The
> difference is, the information for this member is in the token, so
> overwriting create(token) {.... line = token->getLine(); ... } did the
> trick there. But in my case, the x-value can't be derived based on
> the token, it must be passed in the grammar. A bunch of semantic
> actions { setx(value);} does the job, but it looks awfull... and
> messes up the grammar a bit... so I was wondering if there was a
> better way, like "ID" or something... So, somehow
> to force the parser call MyFactory.create(token, xvalue) and passing
> the xvalue in the grammar... 
> > 
> > More general : setting private members of an ASTnode, which can NOT
> be derived from the token... is there another way than using semantic
> actions?
> > 
> > Thx for your proposal anyway! But it won't work in my case :(
> > 
> > Kristoff
> > 
> > 
> > Eric Mahurin wrote:
> > --- In antlr-interest at yahoogroups.com, Kristoff Tempelaere
> > wrote:
> > 
> > > Can this be done in a better way? Instead of using
> > myfactory.create(token), i would like the parser calls
> > MyFactory.create(token,xvalue)
> > 
> > Where does xvalue come from? Is it constant or does it rarely change?
> > If so, you could make your own factory class that has a static xvalue
> > variable that you would assign whenever needed and then your new
> > create method would use this static value.
> > 
> > Eric
> > 
> > 
> > 
> > 
> > 
> > Yahoo! Groups Links
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > 
> > ---------------------------------
> > Find local movie times and trailers on Yahoo! Movies.
> 
> 
> 
> 
> Yahoo! Groups Links
> 
> 
> 
> 
> 
> 
> 
> 
> 
> ---------------------------------
> Find local movie times and trailers on Yahoo! Movies.



 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/antlr-interest/

<*> To unsubscribe from this group, send an email to:
    antlr-interest-unsubscribe at yahoogroups.com

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



More information about the antlr-interest mailing list