Previous: Interfacing Flex and Bison, Up: Flex and Bison


4.4.2 YYSTYPEとyylval

FlexからBisonに対して、 単なる整数値以上の情報を渡す必要の生じることがよくあります。 例えば、 コンパイラにおいては、 どのような種類のトークンが認識されたかだけではなく、 そのトークンの値についても知る必要のある場合がときどきあります。 文字列、文字、および数値定数などが良い例です。 ここで問題なのは、 どのようにしてFlexにこうした情報を返させるかです。

その答は、 Bisonが持っている%union文です。 これは、 YYSTYPEという型を定義するものです。 YYSTYPEは、 パーサ定義中において使われるすべての正当なデータ型の共用体(union)です。 Bisonがカレントなパース状態に関連づけたデータを保存するために使う、 YYSTYPE型の変数yylvalというものがあり、 Flexからyylvalに値を設定することができるので、 トークンの型だけでなく、 それ以上の情報をBisonに返すことができます。

Bisonにおいて%unionを宣言して‘-d’オプションを使うと、 Bisonは.tab.hという拡張子を持つファイルを作成して、 そこにトークンの定義情報だけでなく、 YYSTYPEyylvalの宣言も含めます。 したがって、 yylvalにアクセスするためにしなければならないことは、 Flexの定義情報の中にこの.tab.hファイルをインクルードすることだけです。 これは、 追加のCコード・セクションにおける定義の先頭でインクルードしなければなりません (see Interfacing Flex and Bison)。

注:初期のバージョンのBisonは、 自動的にYYSTYPEyylvalの宣言を生成しません。 この場合には、 より新しいバージョンのBisonを入手するか、 もしくは、 Flexの定義ファイルの先頭においてYYSTYPEyylvalを宣言する必要があります。