Flexに対する主要なCインターフェイスは、 以下のルーチンおよび変数を通じて実現されます。 個々のルーチン、変数に関する完全な説明については、 See Interfacing to Flex。
yylex()yyinyylex()が文字を読み込む元となるファイルです。
このデフォルトはstdinです。
yyoutstdoutです。
yytextyylengyywrap()yyinの終端に達した時に呼び出されます。
これがTRUE(ゼロ以外)を返すとスキャナは実行を終了しますが、
FALSE(ゼロ)を返すと、
yyinが次の入力ファイルを指すよう設定されたものと想定し、
スキャン処理は継続されます。
yymore()yytextの内容を上書きするのではなく、
そのトークンをyytextの末尾に付加するようFlexに通知する関数です。
yyless(n)yymore()とほぼ反対のことを行います。
この関数は、
最初のn文字を除くすべての文字を戻します。
戻された文字の並びは、
次のトークンをマッチするのに使われます。
yylengとyytextの内容には、
この変更が反映されます。
input()unput(c)yyterminate()yylex())の実行を終了させます。
終了したスキャナは0を返します。
この後yyrestart()が呼び出されない間は、
yylex()を呼び出してもすぐに復帰してしまいます。
yyrestart(file)yyin)を表す引数を1つ取ります。
EOFを処理するのに使うことができますし、
また、
Flexに割り込みをかけ、
その後で再開始することを可能にするために使うこともできます。
(Flexが再入可能ではないので、
このようなことが必要になります。)
ECHOyytextの内容をyyoutにコピーするマクロです。
REJECTBEGIN(state)BEGINの後ろの名前は、
スタート状態の名前です。
これは、
スキャナ記述の先頭の定義セクションにおいて宣言されているものでなければなりません。
YY_USER_INITYY_USER_ACTIONyytextの内容を小文字から大文字へ変換する等を行うのに使うことができます。
デフォルトのルールでは何も実行されません。
詳細については、
Flex and Cを参照してください。
YY_BREAKスキャナの中では、
すべてのアクションは1つの大きなswitch文の構成要素であり、
個々のアクションの区切りは、
デフォルトで`break;'文に変換されるYY_BREAKで与えられます。
もし、
ほとんどのルールのアクション部が`return;'文を含んでいると、
コンパイラは`statement not reached'というエラーをたくさん表示することになるでしょう
(表示するはずです)。
YY_BREAKを再定義することによって、
この警告メッセージを表示させないようにすることが可能です。
注:YY_BREAKを再定義する場合は、
アクションが必ず`return;'か`break;'で終わるようにしてください。
YY_DECLyylexですが、
再定義することができます。
再定義した名前は、
関数のプロトタイプとして正当なものでなければなりません。
YY_INPUTYY_NEW_FILEyyinが新しいファイルを指すよう設定されたこと、
および、
処理が継続されるべきであることをFlexに通知するマクロです。1
YY_CURRENT_BUFFERyy_create_buffer()yy_delete_buffer()yy_switch_to_buffer()YY_BUFFER_STATEYYSTYPE%unionの型です。
これは、
FlexとBisonの間のインターフェイスで使われます。
yylval