Next: Token Positions, Previous: Calling Convention, Up: 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; /* トークン型を返す。 */ ...