次: 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型として参照できます。