[Contents]   [Back]   [Prev]   [Up]   [Next]   [Forward]  


Flexの起動

この章では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
`-b'オプションを指定すると`lex.backtrack'というファイルが生成されます。 このファイルはスキャナの記述情報を最適化する際に使用されます。 詳細については、スピードの最適化を参照してください。
-c
このオプションはPOSIXとの互換性のために提供されているだけで、 実際には何もしません。 POSIXでは、 `-c'オプションはC言語によるアクションが使用されることを意味します。
-d
このオプションを指定するとデバッグが可能になります。 これにより生成されるスキャナは、 実行中にスキャナの状態情報をstderrに出力します。
-f
Flexに対してファスト・スキャナ(fast scanner)とフル・スキャナ(full scanner)のどちらを生成するかを指示します。 詳細については、 テーブルの圧縮とスキャナのスピードを参照してください。 `-f'(小文字)オプションと`-F'(大文字)オプションとは異なる効果を持つ点に注意してください。
-i
Flexに対して大文字、小文字を区別しないスキャナを生成するよう指示します。 詳細については、 大文字・小文字を区別しないスキャナを参照してください。
-n
このオプションはFlexにとっては何の意味も持たず、 POSIXとの互換性のためにのみ提供されています。 POSIXでは、 このフラグは`-v'オプションによる出力を抑制するために使用されます。 POSIXでのデフォルトは、 テーブル・サイズが指定されない限りこのような出力を抑制するというものです。 Flexではテーブル・サイズは意味を持たないので、 このフラグは冗長です。
-p
`-p'オプションが指定されると、 Flexは性能レポートをstderrに出力します。 スキャナの性能を向上させる方法に関する議論については、 スピードの最適化を参照してください。
-s
Flexスキャナがマッチするものを見つけることができなかった場合のデフォルトのアクションは、 そのマッチされなかった入力情報をstdoutに出力することです。 `-s'オプションはこのようなアクションを抑制し、 その代わりに入力情報がマッチしなかった時点でスキャナを異常終了させます。
-t
このオプションが指定された場合、 Flexは生成されたスキャナをファイル`lex.yy.c'にではなくstdoutに出力します。
-v
Flexに対して冗長モードで動作するよう指示します。
-F
Flexに対してファスト・スキャナ(fast scanner)を生成するよう指示します。 詳細については、 スキャナの最適化を参照してください。 `-F'(大文字)は`-f'(小文字)とは異なる効果を持つ点に注意してください。 `-f'`-F'の相違点に関する情報については、 テーブルの圧縮とスキャナのスピードを参照してください。
-I
このオプションはFlexに対して対話型スキャナを生成するよう指示します。 詳細については、 `-I'オプション:対話型スキャナを参照してください。
-L
デフォルトでは、 デバッグを支援するために、 Flexは生成されたスキャナのコード中に#line指示子を書き込みます。 このオプションによって#line指示子の書き込みは行われなくなります。
-T
Flexに対してトレース・モードで動作するよう指示します。 Flexは多くのメッセージをstderrに出力するようになります。 こうしたメッセージは、 Flexを非常によく理解しているユーザ以外には無意味でしょう。
-8
このオプションは、 Flexに対して8ビット入力を受け付けるスキャナを生成するよう指示します。
-C[efmF]
これらのオプションは、 スキャン処理用のテーブルをどのように圧縮するかを制御します。 詳細については、 スキャナの最適化を参照してください。
-Sskeleton_file
Flexに対して、 生成するスキャナのベースとしてskeleton_fileにより指定されるスケルトン・ファイルを使用するよう指示します。 主に、 Flex自体をデバッグするために使用されます。

コマンドライン・オプション(Flex 2.5の補足情報)

Flex 2.5では、 前節(コマンドライン・オプション)で説明されていない、 以下のオプションもサポートされています。

-h
Flexに対してコマンドライン・オプションの要約情報を出力するよう指示します。
-l
AT&Tにより実装されたlexとの互換性を最大限に提供します。 このオプションは、 性能面でかなりの悪影響を及ぼします。 また、 このオプションを、 `-f'`-F'`-Cf'`-CF'`-+'オプションと同時に指定することはできません。 FlexとLexの(非)互換性の問題については、 Flex と Lexを参照してください。
-w
このオプションが指定されると、 Flexは、 警告メッセージを出力しません。
-B
Flexに対してバッチ・スキャナを生成するよう指示します。 これは、 対話型スキャナを生成するよう指示する`-I'オプションの否定です。
-V
Flexに対してバージョン番号を出力するよう指示します。
-7
Flexに対して7ビット・スキャナを生成するよう指示します。 これは、 `-8'オプションの否定です。 内部的に生成されるテーブルのサイズは、 `-8'オプションが指定された場合と比較して半分になりますが、 生成されるスキャナは、 8ビット文字を含む入力を処理することができなくなります。 `-Cf'`-CF'が指定されていない場合は、 明示的に`-7'を指定しない限り、 8ビット・スキャナが生成されます。
-+
Flexに対してC++スキャナ・クラスを生成するよう指示します。 C++スキャナについては、 FlexとC++(Flex 2.5の補足情報)を参照してください。
-?
Flexに対してコマンドライン・オプションの要約情報を出力するよう指示します。 (`-h'オプションと同じです)。
-Ca
このオプションは、 スキャン処理用のテーブルをlong intの配列として定義するようFlexに通知します (デフォルトではshort int型の配列となります)。 RISCマシンによっては、 long intの方が高速に処理されるため、 スキャナの性能向上が期待できますが、 その反面、 テーブルのサイズは大きくなります。
-Cr
このオプションを指定して生成されたスキャナは、 入力にread()システム・コールを使います。 デフォルトでは、 対話型スキャナの場合はgetc()が、 バッチ(非対話型)・スキャナの場合はfread()が使われます。
-ofile
このオプションが指定されると、 Flexは生成されたスキャナをfileにより指定されるファイルに出力します。 デフォルトでは、 スキャナはファイル`lex.yy.c'に出力されます。
-Pprefix
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
`-+'オプションが指定されている場合は、 影響を受けるのはyywrapyyFlexLexerの2つだけです。 このオプションにより、 yywrap()の名前が変更されてしまう点に注意してください。 プログラムをリンクするためには、 `prefixwrap'という名前の関数を作成する必要があります。 この関数を作成したくない場合には、 スキャナ定義ファイルの中で、 `%option noyywrap'を指定して、 リンク時に`-lfl'オプションを指定します。 %option指示子については、 %option(Flex 2.5の補足情報)を参照してください。
--help
Flexに対してコマンドライン・オプションの要約情報を出力するよう指示します。 (`-h'オプションと同じです)。
--version
Flexに対してバージョン番号を出力するよう指示します。 (`-V'オプションと同じです)。


[Contents]   [Back]   [Prev]   [Up]   [Next]   [Forward]