Next: , Previous: Actions, Up: Semantics


3.5.4 アクション中の値のデータ型

すべての意味値に対して同一のデータ型を使っているのならば、 $$$nはそのデータ型を持ちます。

さまざまなデータ型を指定するために%unionを使っているならば、 意味値を持つ終端記号と非終端記号のそれぞれに対して、 データ型の中から適切なものを選ぶように宣言する必要があります。 すると、$$nを使うたびに、 規則の中でそれらがどの記号を参照するかに応じて、 データ型が決められます。 例を示します。

     exp:    ...
             | exp '+' exp
                 { $$ = $1 + $3; }

$1$3expという種類の記号を参照するので、 $1$3は、非終端記号expに対して宣言された データ型を持ちます。 もし、$2が使われるならば、どのような型であれ、 終端記号+に対して宣言されたデータ型が使われます。

別の方法として、値を参照するときにそのデータ型を指定できます。 そのためには、参照のための‘$’記号の後に‘<type>’を 挿入します。例を示します。

     %union {
       int itype;
       double dtype;
     }

この場合に、$<itype>1と書けば、 最初の要素をint型として参照でき、$<dtype>1と書けば、 double型として参照できます。