lex/yacc とその派生物が今日どこにでもあるように見える理由は、それらが他のツールよりもはるかに長く存在していること、文献ではるかに多く取り上げられていること、そして伝統的に Unix オペレーティング システムに付属していたことです。他のレクサーおよびパーサー生成ツールと比較する方法とはほとんど関係ありません。
どのツールを選択しても、学習曲線は常に重要です。したがって、特定のツールを数回使用し、比較的快適に使用できるようになると、別のツールを習得するために余分な労力を必要とすることはほとんどありません。それは当然のことです。
また、1960 年代後半から 1970 年代前半にかけて lex/yacc が作成されたとき、ハードウェアの制限が解析に深刻な問題をもたらしました。Yacc が使用するテーブル駆動型の LR 解析方法は、比較的小さな汎用プログラム ロジックを使用し、テープまたはディスク上のファイルに状態を保持することにより、小さなメモリ フットプリントで実装できるため、当時最も適していました。LL などのコード駆動型解析メソッドは、パーサー プログラムのコード自体が文法を表し、実行するには完全に RAM に収まる必要があり、RAM のスタックに状態を保持するため、最小メモリ フットプリントが大きくなりました。
メモリがより豊富になると、LL や PEG などのさまざまな解析方法と、それらの方法を使用してツールを構築する方法について、さらに多くの研究が行われました。これは、lex/yacc ファミリーの後に作成された代替ツールの多くが異なるタイプの文法を使用していることを意味します。ただし、文法タイプを切り替えると、かなりの学習曲線が発生します。LR 文法や LALR 文法などの 1 つのタイプの文法に慣れると、LL 文法などの別のタイプの文法を使用するツールに切り替えたくなる可能性は低くなります。
全体として、lex/yacc ファミリーのツールは一般に、文法や文法の競合をグラフィカルに視覚化したり、自動リファクタリングによって競合を解決したりするための洗練されたユーザー インターフェイスを備えていることが多い最近のツールよりも初歩的です。
したがって、パーサー ツールの使用経験がなく、いずれにせよ新しいツールを習得する必要がある場合は、文法と競合のグラフィカルな視覚化、自動リファクタリング、適切なドキュメントの入手可能性、言語など、他の要因を検討する必要があります。生成されたレクサー/パーサーを出力できるなど。「これは他の人が使用しているように見える」という理由だけでツールを選択しないでください。
lex/yacc または flex/bison を使用する理由として考えられるのは次のとおりです。
- 開発者はすでに lex/yacc または flex/bison に精通しています
- 開発者は LR/LALR 文法に最も精通しており、快適に使用できます。
- 開発者は lex/yacc を扱った本をたくさん持っていますが、それ以外を扱った本はありません。
- 開発者は将来の仕事のオファーが来ており、lex/yacc のスキルがあれば採用される可能性が高まると言われています。
- 開発者は、他のツールの使用についてプロジェクト メンバー/利害関係者から同意を得ることができませんでした
- 環境に lex/yacc がインストールされており、何らかの理由で他のツールをインストールできない