次: Token Positions, 前: Calling Convention, 上: Lexical
通常の再入可能でない構文解析器では、
トークンの意味値が広域変数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; /* トークン型を返す。 */
...