2017-02-17 7 views
0

私が知っている限り、Flexはなぜ今まで使用されているのでしょうか?フレックス - 高速スキャナジェネレータ。どうして?

今では使用されておらず、以前に使用されていた場合は、Cコードを直接書くよりも何が利点ですか?

これは、私はそれはそれぞれの式が一致したとき を取られるために一緒に行動して、その入力として、正規表現を含むテキストファイルを取りフレックス

読んものです。入力ファイルの正規表現 に対応するDFAのテーブル駆動型実装である関数yylexを定義するCソースコード を含む出力ファイルを生成します。次に、Flex出力ファイルをCコンパイラでコンパイルして、 に実行ファイルを取得します。

Flexの必要性は何ですか?それはCプログラムを直接書くよりも優れていますか? 実行やコードの書き込み速度が改善されていますか?

私は手でステートマシンを書き出すと比較すると、私のソース

+1

通常、入力ストリームをトークン化(疎結合、解析)するために特別なCコードを書くよりも、Flexコードを書く方が簡単です。確かに、それはC言語で行うことができます(そして私はしばしばそれを行います)が、コードは、Flexで生成されるものと同じくらい速く、頑強で、明確であるとは限りません。 –

+2

マシンコードを入力するために、すべてを反転スイッチに戻す必要があります。 –

答えて

4

としてthisを参照しています、それは確かにフレックスとの字句スキャナを生成するために以下のコードを取ります。フレックス仕様を読んで、それによってどのトークンが認識されるのかを理解する方がはるかに簡単です。

スキャナを手で最適化し、実行時間の点で屈曲することは可能ですが、プログラマ時間を使用することはめったにありません。ほとんどの解析問題では、字句スキャンはボトルネックではなく、パフォーマンスの向上は見えません。また、正規表現ライブラリのようなツールを単純に使用すると、コードを生成する可能性が高くなります。これは、保守が非常に遅く、難しくなります。

上記のいずれの文にも影響する過去20年間のC言語の変更はありません。

上記のすべては、ツールの使い方を理解しているプログラマと、それが問題であり適切ではないことが条件です。任意のツールセットと同様。