Flexに対する主要なCインターフェイスは、 以下のルーチンおよび変数を通じて実現されます。 個々のルーチン、変数に関する完全な説明については、 See Interfacing to Flex。
yylex()
yyin
yylex()
が文字を読み込む元となるファイルです。
このデフォルトはstdin
です。
yyout
stdout
です。
yytext
yyleng
yywrap()
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が再入可能ではないので、
このようなことが必要になります。)
ECHO
yytext
の内容をyyout
にコピーするマクロです。
REJECT
BEGIN(
state)
BEGIN
の後ろの名前は、
スタート状態の名前です。
これは、
スキャナ記述の先頭の定義セクションにおいて宣言されているものでなければなりません。
YY_USER_INIT
YY_USER_ACTION
yytext
の内容を小文字から大文字へ変換する等を行うのに使うことができます。
デフォルトのルールでは何も実行されません。
詳細については、
Flex and Cを参照してください。
YY_BREAK
スキャナの中では、
すべてのアクションは1つの大きなswitch
文の構成要素であり、
個々のアクションの区切りは、
デフォルトで`break;'文に変換されるYY_BREAK
で与えられます。
もし、
ほとんどのルールのアクション部が`return;'文を含んでいると、
コンパイラは`statement not reached'というエラーをたくさん表示することになるでしょう
(表示するはずです)。
YY_BREAK
を再定義することによって、
この警告メッセージを表示させないようにすることが可能です。
注:YY_BREAK
を再定義する場合は、
アクションが必ず`return;'か`break;'で終わるようにしてください。
YY_DECL
yylex
ですが、
再定義することができます。
再定義した名前は、
関数のプロトタイプとして正当なものでなければなりません。
YY_INPUT
YY_NEW_FILE
yyin
が新しいファイルを指すよう設定されたこと、
および、
処理が継続されるべきであることをFlexに通知するマクロです。1
YY_CURRENT_BUFFER
yy_create_buffer()
yy_delete_buffer()
yy_switch_to_buffer()
YY_BUFFER_STATE
YYSTYPE
%union
の型です。
これは、
FlexとBisonの間のインターフェイスで使われます。
yylval