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

Justin Holewinski shawmishrak at gmail.com
Mon Jun 8 14:36:46 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?

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.


Thanks,

Justin Holewinski
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.antlr.org/pipermail/antlr-interest/attachments/20090608/9c48b3fa/attachment.html 


More information about the antlr-interest mailing list