Next: Token Locations, Previous: Calling Convention, Up: Lexical [Contents][Index]
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 The
Union Declaration). 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. */ …