FlexからBisonに対して、 単なる整数値以上の情報を渡す必要の生じることがよくあります。 例えば、 コンパイラにおいては、 どのような種類のトークンが認識されたかだけではなく、 そのトークンの値についても知る必要のある場合がときどきあります。 文字列、文字、および数値定数などが良い例です。 ここで問題なのは、 どのようにしてFlexにこうした情報を返させるかです。
その答は、
Bisonが持っている%union文です。
これは、
YYSTYPEという型を定義するものです。
YYSTYPEは、
パーサ定義中において使われるすべての正当なデータ型の共用体(union)です。
Bisonがカレントなパース状態に関連づけたデータを保存するために使う、
YYSTYPE型の変数yylvalというものがあり、
Flexからyylvalに値を設定することができるので、
トークンの型だけでなく、
それ以上の情報をBisonに返すことができます。
Bisonにおいて%unionを宣言して`-d'オプションを使うと、
Bisonは.tab.hという拡張子を持つファイルを作成して、
そこにトークンの定義情報だけでなく、
YYSTYPEとyylvalの宣言も含めます。
したがって、
yylvalにアクセスするためにしなければならないことは、
Flexの定義情報の中にこの.tab.hファイルをインクルードすることだけです。
これは、
追加のCコード・セクションにおける定義の先頭でインクルードしなければなりません
(see Interfacing Flex and Bison)。
注:初期のバージョンのBisonは、
自動的にYYSTYPEとyylvalの宣言を生成しません。
この場合には、
より新しいバージョンのBisonを入手するか、
もしくは、
Flexの定義ファイルの先頭においてYYSTYPEとyylvalを宣言する必要があります。