テーブルの圧縮とスピードの領域では、 FlexはLexの能力をはるかに上回っています。 Flexは、 使われるオプションに応じて、 Lexよりもはるかに高速なテーブル、 あるいは、 はるかに小さいテーブルを生成することができます。 この節では、 利用可能なオプションと各オプションがスピードにもたらす影響について説明します。 一般的には、 テーブルが圧縮されるほど、 そのスピードは遅くなります。 Flexでは、 こうしたオプションをコマンドラインで指定します。 オプションは以下のとおりです。1
REJECT
を使うことはできない点に注意してください。
注:‘-f’フラグと‘-F’フラグは、 Flexが生成するテーブルにおいて相違をもたらします。 ‘-f’フラグはフル・テーブル(full table)を生成し、 ‘-F’フラグはファスト・テーブル(fast table)を生成します。 ファスト・テーブルとは、 スピードを最大限にするよう最適化されたテーブル形式であり、 一方、 フル・テーブルには最適化は一切施されません。 もたらされる結果はよく似ていますが、 テーブルのサイズは大きく異なるものになる可能性があります。
ALPHA [a-zA-Z] NUM [0-9] ALPHANUM {ALPHA}|{NUM} %% begin return(BEGIN_SYM); ... rules and actions ... end return(END_SYM); {ALPHA}{ALPHANUM}* return(IDENTIFIER);
は‘-f’フラグを使って処理すべきであり、
{ALPHA}{ALPHANUM}* {ECHO; return(lookup(yytext));}
は‘-F’フラグを使って処理すべきです。
これらのオプションが指定されている場合は、
アクションの部分にREJECT
を使うことができない点に注意してください。
[0-9]
の範囲に限定されるのであれば、
0から9までの数は同等クラスの中に置かれることになります。
注:‘-Cxx’オプションは、 コマンドライン上には1つだけ指定すべきです。 というのは、 このうち最後に見つかったオプションだけが実際の効果を持つからです。 したがって、
flex -Cf -Cem foo.l
は、 Flexに‘-Cem’オプションを使わせることになります。
Flexのデフォルトの動作は、 コマンドライン上で‘-Cem’オプションを使った場合に相当します。 この動作では圧縮を最大限に行うことになり、 一般的には最も遅いスキャナが生成されることになります。 こうした小さなテーブルはより速く生成され、 コンパイルもより速く実行されるので、 デフォルトは、 開発段階では非常に便利です。 スキャナのデバッグが終了した後は、 より高速な (そして通常はよりサイズの大きい) スキャナを作成することができます。
[1] 訳注:Flex 2.5では、 ここに列挙されているもの以外に、 ‘-Ca’オプションをサポートしています。 これについては、 Command Line Switches (Flex 2.5)を参照してください。