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. */ ...
Go to the first, previous, next, last section, table of contents.