Next: , Previous: Case Insensitive Scanners, Up: Other Flex Features


5.2 ‘-I’オプション:対話型スキャナ

Flexの問題として、 どのルールを適用するかを決定する前に、 入力情報中の次の1文字を先読みする必要があるということがあります。 対話的ではない使い方をする場合には問題になりませんが、 Flexを使ってユーザから直接入力文字を受け取るような場合には、 問題になることがあります。

このような場合を2つ挙げると、 1つはシェルとやりとりする場合、 もう1つはデータベースのフロント・エンドとやりとりする場合です。 通常のアクションは、 改行が入力の終わりを表すというもので、 改行自身は一種の「中身のない文」として受け付けるのが望ましいのですが、 通常のFlexスキャナではこれは可能ではありません。 Flexが常に先読みをするという事実は、 改行が認識されるためにはユーザが次の行を入力しなければならないということを意味しています (すなわち、 単一の改行は、 それだけでは認識されず、 他の文字が入力される必要があるということです)。 これはシェル上ではまったく望ましくありません。

Flexにはこれを回避する方法があります。 コマンドラインで‘-I’オプションを使うと、 Flexは、 必要な場合にしか先読みをしない特別な対話型スキャナを生成します。 この種のスキャナは、 ユーザからの入力を直接受け取るのに適していますが、 若干の性能低下を引き起こすかもしれません。

注:-I’オプションは、 ‘-f’、‘-F’、‘-Cf’、または‘-CF’フラグと一緒に使うことはできません。 つまり、 先読みができないことから来る性能低下に加えて、 パーサも性能向上のために最適化することができないということを意味しています。

-I’オプションに関連するマイナス面は、 通常はきわめて小さいので、 入力情報がどこから来るのか確かではなく、 性能向上のための最適化を施す可能性を諦めても構わないのであれば、 コマンドラインにおいて‘-I’オプションを使う方が良いでしょう。