前: Case Insensitive Scanners, 上: Case Insensitive Scanners


5.1.1 `-i'オプション

Flexは、 この問題を簡単に解決するための方法を提供しています。 コマンドラインで`-i'オプションを使うことによって、 入力情報の大文字・小文字を区別しないスキャナを生成するよう、 Flexに対して通知することができます。 つまり、 Flexでは上記のようなテクニックを使う必要がないということを意味しています。 例えば、

     %%
     begin        return(BEGIN_SYM);
     end          return(END_SYM);

は、 `-i'オプションを使うことによって、 `BEGIN'、`begin'、`BeGiN'、およびこれ以外のすべての大文字・小文字の組み合わせにマッチします。 これは、 Lexにおいて同様のことを行うための方法よりも、 はるかに簡単です。

`-i'オプションには1つ注意すべき点があります。 それは、 スキャナが大文字・小文字を区別しないだけで、 その変換まではしてくれないということです。 つまり、 Pascalにおいてシンボル名をハッシュしたいような場合、 自分でシンボル名を大文字または小文字に変換しなければならないことを意味しています。 そうしないと、 `FOO'と`foo'は異なるものとして扱われます。 これは、 シンボルを保存するルーチンの中で対処することもできますし、 YY_USER_ACTIONを使うことによって対処することもできます。 これを実現する方法の例については、 Flex and CにおけるYY_USER_ACTIONの説明を参照してください。