前: Start States, 上: Flex Descriptions
Flex 2.5では、
スキャナ定義ファイルの中で様々なオプションを指定することができます。
オプションを指定するには、
スキャナ定義ファイルの先頭
(最初の`%%'よりも前の部分)
に、
%option指示子を記述します。
ほとんどの%option指示子は、
以下の形式で指定されます。
%option option_name
オプションoption_nameの指定を無効にするためには、 オプション名の前に`no'を付けます。
%option nooption_name
以下に、
コマンドライン・オプションと同等の効果を持つ%option指示子を示します。
各コマンドライン・オプションの意味については、
Command Line SwitchesとCommand Line Switches (Flex 2.5)を参照してください。
%option 7bit%option 8bit%option align%option backup%option batch%option c++%option caseful%option case-sensitive%option case-insensitive%option caseless%option debug%option default%option ecs%option fast%option full%option interactive%option lex-compat%option meta-ecs%option output="file"%option perf-report%option prefix="prefix"%option read%option stdout%option verbose%option warn
次に、
コマンドライン・オプションでは代替できない%option指示子を示します。
%option arrayyytextをcharの配列として定義します。
これは、
`%array'と同じです。
%option always-interactiveisatty()を呼び出して、
入力を対話的に(1文字ずつ)読み込むべきか否かを決定します。
%option mainmain()関数を組み込むよう指示します。
int main()
{
yylex();
return 0;
}
これは、 暗黙のうちに`%option noyywrap'を指定します。
%option never-interactiveisatty()を呼び出して、
入力を対話的に(1文字ずつ)読み込むべきか否かを決定します。
%option pointeryytextをcharに対するポインタとして定義します。
これは、
`%pointer'と同じです。
%option rejectREJECTが使われていることを、
Flexに通知します。
Flexは通常、
定義ファイルの中でREJECTが使われているか否かを自分で調査しますが、
この%option指示子の指定は、
Flex自身による判定結果に優先します。
%option stack%option指示子を指定しなければなりません。
%option stdinityyinをstdinで、
yyoutをstdoutで、
それぞれ初期化します。
この%option指示子が指定されない場合、
あるいは、
`%option nostdinit'が指定された場合、
yyinとyyoutは、
(FILE *)0(NULLポインタ)で初期化されます。
%option unputunput()が組み込まれません。1
%option yy_pop_stateyy_pop_state()が組み込まれません。
ただし、
`%option stack'が指定されていない場合は、
`%option noyy_pop_state'の指定の有無にかかわらず、
関数yy_pop_state()は組み込まれません。
%option yy_push_stateyy_push_state()が組み込まれません。
ただし、
`%option stack'が指定されていない場合は、
`%option noyy_push_state'の指定の有無にかかわらず、
関数yy_push_state()は組み込まれません。
%option yy_scan_bufferyy_scan_buffer()が組み込まれません。
%option yy_scan_bytesyy_scan_bytes()が組み込まれません。
%option yy_scan_stringyy_scan_string()が組み込まれません。
%option yy_top_stateyy_top_state()が組み込まれません。
ただし、
`%option stack'が指定されていない場合は、
`%option noyy_top_state'の指定の有無にかかわらず、
関数yy_top_state()は組み込まれません。
%option yyclass="classname"yyFlexLexerのサブクラスとして定義されます。
実際にスキャン処理を実行するコードは、
クラスclassnameのメンバ関数yylex()(classname::yylex())に実装されます。
詳細については、
Flex and C++ (Flex 2.5)を参照してください。
%option yylinenoyylinenoに保持するスキャナを生成するよう指示します。
%option yymoreyymore()が使われていることを、
Flexに通知します。
Flexは通常、
定義ファイルの中でyymore()が使われているか否かを自分で調査しますが、
この%option指示子の指定は、
Flex自身による判定結果に優先します。
%option yywrapyywrap()はマクロとして、
#define yywrap() 1
のように定義されます。 この結果、 ファイルの終端を検出した時に、 スキャナは、 ほかにスキャンすべきファイルは存在しないと判断するようになります。
[1] Flex 2.5.4に付属のドキュメントflex.texiには、
関数input()についても同様のことが記載されていますが、
実際に`%option noinput'を指定してみると、
生成されるスキャナの中に、
関数input()が組み込まれます。