[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
この章ではFlexを起動する基本的な方法を説明し、 Flexで使用可能なコマンドライン・オプションを簡単に説明します。
Flexは記述情報を含むファイルを入力として受け取り、 スキャナ機能を持つCのファイルに変換します。 Flexを起動するためのコマンド行は以下のようになります。
flex [-bcdfinpstvFILT8] [-C[efmF]] [-Sskeleton] [file …] |
一般的には、 単に‘flex’に続けて処理すべきファイル名を入力することで実行されます。
flex myfile.l |
記述情報ファイル名の末尾の‘.l’は、 ‘myfile’がFlexもしくはLexの記述ファイルであることを示唆する慣例的な方法です。 名前付けの慣例としてもう一つよく見られるのが、 末尾に‘.lex’を使うことです。 例えば、 以下のようになります。
flex myfile.lex |
Flexは記述情報ファイル(myfile.l
)を読み込み、
そこに記述されたパターンを認識するスキャナ機能を持つ‘lex.yy.c’という名前のC言語ファイルを生成します。
記述情報の中になんらかのエラーがあれば、
Flexは対応するエラー・メッセージをstderr
に出力します。
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
Flexのコマンドライン・オプションは以下のような意味を持ちます。
‘-b’オプションを指定すると‘lex.backtrack’というファイルが生成されます。 このファイルはスキャナの記述情報を最適化する際に使用されます。 詳細については、See section スピードの最適化。
このオプションはPOSIXとの互換性のために提供されているだけで、 実際には何もしません。 POSIXでは、 ‘-c’オプションはC言語によるアクションが使用されることを意味します。
このオプションを指定するとデバッグが可能になります。
これにより生成されるスキャナは、
実行中にスキャナの状態情報をstderr
に出力します。
Flexに対してファスト・スキャナ(fast scanner)とフル・スキャナ(full scanner)のどちらを生成するかを指示します。 詳細については、 See section テーブルの圧縮とスキャナのスピード。 ‘-f’(小文字)オプションと‘-F’(大文字)オプションとは異なる効果を持つ点に注意してください。
Flexに対して大文字、小文字を区別しないスキャナを生成するよう指示します。 詳細については、 See section 大文字・小文字を区別しないスキャナ。
このオプションはFlexにとっては何の意味も持たず、 POSIXとの互換性のためにのみ提供されています。 POSIXでは、 このフラグは‘-v’オプションによる出力を抑制するために使用されます。 POSIXでのデフォルトは、 テーブル・サイズが指定されない限りこのような出力を抑制するというものです。 Flexではテーブル・サイズは意味を持たないので、 このフラグは冗長です。
‘-p’オプションが指定されると、
Flexは性能レポートをstderr
に出力します。
スキャナの性能を向上させる方法に関する議論については、
See section スピードの最適化。
Flexスキャナがマッチするものを見つけることができなかった場合のデフォルトのアクションは、
そのマッチされなかった入力情報をstdout
に出力することです。
‘-s’オプションはこのようなアクションを抑制し、
その代わりに入力情報がマッチしなかった時点でスキャナを異常終了させます。
このオプションが指定された場合、
Flexは生成されたスキャナをファイル‘lex.yy.c’にではなくstdout
に出力します。
Flexに対して冗長モードで動作するよう指示します。
Flexに対してファスト・スキャナ(fast scanner)を生成するよう指示します。 詳細については、 See section スキャナの最適化。 ‘-F’(大文字)は‘-f’(小文字)とは異なる効果を持つ点に注意してください。 ‘-f’と‘-F’の相違点に関する情報については、 See section テーブルの圧縮とスキャナのスピード。
このオプションはFlexに対して対話型スキャナを生成するよう指示します。 詳細については、 See section ‘-I’オプション:対話型スキャナ。
デフォルトでは、
デバッグを支援するために、
Flexは生成されたスキャナのコード中に#line
指示子を書き込みます。
このオプションによって#line
指示子の書き込みは行われなくなります。
Flexに対してトレース・モードで動作するよう指示します。
Flexは多くのメッセージをstderr
に出力するようになります。
こうしたメッセージは、
Flexを非常によく理解しているユーザ以外には無意味でしょう。
このオプションは、 Flexに対して8ビット入力を受け付けるスキャナを生成するよう指示します。
これらのオプションは、 スキャン処理用のテーブルをどのように圧縮するかを制御します。 詳細については、 See section スキャナの最適化。
Flexに対して、 生成するスキャナのベースとしてskeleton_fileにより指定されるスケルトン・ファイルを使用するよう指示します。 主に、 Flex自体をデバッグするために使用されます。
[ < ] | [ > ] | [ << ] | [上] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
Flex 2.5では、 前節(コマンドライン・オプション)で説明されていない、 以下のオプションもサポートされています。
Flexに対してコマンドライン・オプションの要約情報を出力するよう指示します。
AT&Tにより実装されたlexとの互換性を最大限に提供します。 このオプションは、 性能面でかなりの悪影響を及ぼします。 また、 このオプションを、 ‘-f’、‘-F’、‘-Cf’、‘-CF’、‘-+’オプションと同時に指定することはできません。 FlexとLexの(非)互換性の問題については、 FlexとLexを参照してください。
このオプションが指定されると、 Flexは、 警告メッセージを出力しません。
Flexに対してバッチ・スキャナを生成するよう指示します。 これは、 対話型スキャナを生成するよう指示する‘-I’オプションの否定です。
Flexに対してバージョン番号を出力するよう指示します。
Flexに対して7ビット・スキャナを生成するよう指示します。 これは、 ‘-8’オプションの否定です。 内部的に生成されるテーブルのサイズは、 ‘-8’オプションが指定された場合と比較して半分になりますが、 生成されるスキャナは、 8ビット文字を含む入力を処理することができなくなります。 ‘-Cf’、‘-CF’が指定されていない場合は、 明示的に‘-7’を指定しない限り、 8ビット・スキャナが生成されます。
Flexに対してC++スキャナ・クラスを生成するよう指示します。 C++スキャナについては、 FlexとC++(Flex 2.5の補足情報)を参照してください。
Flexに対してコマンドライン・オプションの要約情報を出力するよう指示します。 (‘-h’オプションと同じです)。
このオプションは、
スキャン処理用のテーブルをlong int
の配列として定義するようFlexに通知します
(デフォルトではshort int
型の配列となります)。
RISCマシンによっては、
long int
の方が高速に処理されるため、
スキャナの性能向上が期待できますが、
その反面、
テーブルのサイズは大きくなります。
このオプションを指定して生成されたスキャナは、
入力にread()
システム・コールを使います。
デフォルトでは、
対話型スキャナの場合はgetc()
が、
バッチ(非対話型)・スキャナの場合はfread()
が使われます。
このオプションが指定されると、 Flexは生成されたスキャナをfileにより指定されるファイルに出力します。 デフォルトでは、 スキャナはファイル‘lex.yy.c’に出力されます。
Flexにより生成されるスキャナのソース・ファイルの中では、 大域変数や大域関数の名前の先頭に接頭辞‘yy’が付けられます。 このオプションが指定されると、 ‘yy’の代わりに、 prefixにより指定される文字列が接頭辞として使用されます。 また、 ‘-o’オプションが指定されない場合のスキャナ・ファイル名‘lex.yy.c’も、 ‘lex.prefix.c’となります。
以下に、 このオプションにより影響を受ける名前の一覧を示します。
yy_create_buffer yy_delete_buffer yy_scan_buffer yy_scan_string yy_scan_bytes yy_flex_debug yy_init_buffer yy_flush_buffer yy_load_buffer_state yy_switch_to_buffer yyin yyleng yylex yylineno yyout yyrestart yytext yywrap |
‘-+’オプションが指定されている場合は、
影響を受けるのはyywrap
とyyFlexLexer
の2つだけです。
このオプションにより、
yywrap()
の名前が変更されてしまう点に注意してください。
プログラムをリンクするためには、
‘prefixwrap’という名前の関数を作成する必要があります。
この関数を作成したくない場合には、
スキャナ定義ファイルの中で、
‘%option noyywrap’を指定して、
リンク時に‘-lfl’オプションを指定します。
%option
指示子については、
%option(Flex 2.5の補足情報)を参照してください。
Flexに対してコマンドライン・オプションの要約情報を出力するよう指示します。 (‘-h’オプションと同じです)。
Flexに対してバージョン番号を出力するよう指示します。 (‘-V’オプションと同じです)。
[ << ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
この文書は新堂 安孝によって2009年9月22日にtexi2html 1.82を用いて生成されました。