Contents | < Browse | Browse >
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 (Union Decl). 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. */
...