Node:Action Types, Next:Mid-Rule Actions, Previous:Actions, Up:Semantics
If you have chosen a single data type for semantic values, the $$
and $n constructs always have that data type.
If you have used %union to specify a variety of data types, then you
must declare a choice among these types for each terminal or nonterminal
symbol that can have a semantic value. Then each time you use $$ or
$n, its data type is determined by which symbol it refers to
in the rule. In this example,
exp: ...
| exp '+' exp
{ $$ = $1 + $3; }
$1 and $3 refer to instances of exp, so they all
have the data type declared for the nonterminal symbol exp. If
$2 were used, it would have the data type declared for the
terminal symbol '+', whatever that might be.
Alternatively, you can specify the data type when you refer to the value,
by inserting <type> after the $ at the beginning of the
reference. For example, if you have defined types as shown here:
%union {
int itype;
double dtype;
}
then you can write $<itype>1 to refer to the first subunit of the
rule as an integer, or $<dtype>1 to refer to it as a double.