4.6.2 Semantic Values of Tokens
In an ordinary (nonreentrant) parser, the semantic value of the token must
be stored into the global variable yylval
. When you are using
just one data type for semantic values, yylval
has that type.
Thus, if the type is int
(the default), you might write this in
yylex
:
| …
yylval = value; /* Put value onto Bison stack. */
return INT; /* Return the type of the token. */
…
|
When you are using multiple data types, yylval
's type is a union
made from the %union
declaration (see section The Collection of Value Types). So when you store a token's value, you
must use the proper member of the union. If the %union
declaration looks like this:
| %union {
int intval;
double val;
symrec *tptr;
}
|
then the code in yylex
might look like this:
| …
yylval.intval = value; /* Put value onto Bison stack. */
return INT; /* Return the type of the token. */
…
|