[antlr-interest] Target Language .stg Files - Token Names

Johannes Luber JALuber at gmx.de
Mon Jun 8 15:23:40 PDT 2009


> I've been working on a C++ (STL + Boost) target for Antlr 3, and I'm
> struggling with some StringTemplate semantics.  Specifically, when
> generating code for matching tokens, the <token> template will sometimes
> refer to a textual token name (e.g. ID) and other times it will refer to a
> constant, the token identifier (e.g. 33).  Is there a way to determine,
> within a StringTemplate rule, which of these representations is used?

ANTLR supports the option -XdbgST (capitilization is important - ANTLR silently swallows errors there) which adds the template names to the output. The most difficult thing is to find the right place as token may be constructed like "<rule>suffix".

> 
> I would like to generate code like:
> 
> match(MyParser::TOKEN_ID);
> 
> for token names, and
> 
> match(33);
> 
> for token constants, so I would like to do something like:
> 
> <if(token.isNumber)>
>   match(<token>);
> <else>
>   match(MyParser::TOKEN_<token>);
> <endif>
> 
> but how to do this is eluding me.
> 
> 
> Currently, I am forced to use preprocessor magic to get by:
> 
> #undef ID
> #define ID  MyParser::TOKEN_ID
> ...
> 
> which I hate to do for multiple reasons.
> 
> 
> On a side note, is there any documentation of which attributes are
> avilable
> for variables in target language .stg files?  For instance, what
> attributes
> are available on a <rule>?  All of the information I find comes from
> deciphering the other .stg files.

The best way I know would be to use -XdbgST and to check all called templates. It may not solve the original problem but at least you know where to look.

Johannes
> 
> 
> Thanks,
> 
> Justin Holewinski

-- 
GMX FreeDSL mit DSL 6.000 Flatrate und Telefonanschluss nur 17,95 Euro/mtl.!
http://dslspecial.gmx.de/freedsl-aktionspreis/?ac=OM.AD.PD003K11308T4569a


More information about the antlr-interest mailing list