次: Mid-Rule Actions, 前: Actions, 上: Semantics
すべての意味値に対して同一のデータ型を使っているのならば、
$$
と$
nはそのデータ型を持ちます。
さまざまなデータ型を指定するために%union
を使っているならば、
意味値を持つ終端記号と非終端記号のそれぞれに対して、
データ型の中から適切なものを選ぶように宣言する必要があります。
すると、$$
とnを使うたびに、
規則の中でそれらがどの記号を参照するかに応じて、
データ型が決められます。
例を示します。
exp: ... | exp '+' exp { $$ = $1 + $3; }
$1
と$3
はexp
という種類の記号を参照するので、
$1
と$3
は、非終端記号exp
に対して宣言された
データ型を持ちます。
もし、$2
が使われるならば、どのような型であれ、
終端記号+
に対して宣言されたデータ型が使われます。
別の方法として、値を参照するときにそのデータ型を指定できます。 そのためには、参照のための`$'記号の後に`<type>'を 挿入します。例を示します。
%union { int itype; double dtype; }
この場合に、$<itype>1
と書けば、
最初の要素をint
型として参照でき、$<dtype>1
と書けば、
double
型として参照できます。