Next: , Previous: Calling Convention, Up: Lexical


4.2.2 トークンの意味値

通常の再入可能でない構文解析器では、 トークンの意味値が広域変数yylvalに代入される必要があります。 意味値に対してただ1つのデータ型を使っている場合には、 yylvalの型もそうです。 したがって、たとえば、宣言を省略して型がintならば、 次のように書けます。

       ...
       yylval = value;  /* 値をBisonスタックに積む。 */
       return INT;      /* トークン型を返す。 */
       ...

複数のデータ型を使っている場合には、 %union宣言で作られた共用体がyylvalの型になります (see The Collection of Value Types)。 そこで、トークンの値を代入するには、 共用体のメンバの名前を指定する必要があります。 %union宣言の例を示します。

     %union {
       int intval;
       double val;
       symrec *tptr;
     }

すると、yylexの中のプログラムは次のようになります。

       ...
       yylval.intval = value; /* 値をBisonスタックに積む。 */
       return INT;          /* トークン型を返す。 */
       ...