[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
3.5.2 More Than One Value Type
In most programs, you will need different data types for different kinds
of tokens and groupings. For example, a numeric constant may need type
int
or long int
, while a string constant needs type
char *
, and an identifier might need a pointer to an entry in the
symbol table.
To use more than one data type for semantic values in one parser, Bison requires you to do two things:
-
Specify the entire collection of possible data types, either by using the
%union
Bison declaration (see section The Collection of Value Types), or by using atypedef
or a#define
to defineYYSTYPE
to be a union type whose member names are the type tags. -
Choose one of those types for each symbol (terminal or nonterminal) for
which semantic values are used. This is done for tokens with the
%token
Bison declaration (see section Token Type Names) and for groupings with the%type
Bison declaration (see section Nonterminal Symbols).