Next: Structured Value Type, Previous: Type Generation, Up: Semantics [Contents][Index]
The %union
declaration specifies the entire collection of possible
data types for semantic values. The keyword %union
is followed by
braced code containing the same thing that goes inside a union
in C.
For example:
%union { double val; symrec *tptr; }
This says that the two alternative types are double
and symrec
*
. They are given names val
and tptr
; these names are used
in the %token
and %type
declarations to pick one of the types
for a terminal or nonterminal symbol (see Nonterminal Symbols).
As an extension to POSIX, a tag is allowed after the %union
. For
example:
%union value { double val; symrec *tptr; }
specifies the union tag value
, so the corresponding C type is
union value
. If you do not specify a tag, it defaults to
YYSTYPE
(see api.value.union.name).
As another extension to POSIX, you may specify multiple %union
declarations; their contents are concatenated. However, only the first
%union
declaration can specify a tag.
Note that, unlike making a union
declaration in C, you need not write
a semicolon after the closing brace.