YACC / BisonとANTLRの最も重要な違いは、これらのツールが処理できる文法のタイプです。YACC / BisonはLALR文法を処理し、ANTLRはLL文法を処理します。
多くの場合、LALR文法を長い間使用してきた人は、LL文法を使用するのがより困難であり、その逆も同様です。これは、文法やツールの操作が本質的に難しいという意味ではありません。どのツールを使用するのが簡単かは、ほとんどの場合、文法の種類に精通していることになります。
利点に関する限り、LALR文法がLL文法よりも優れている側面と、LL文法がLALR文法よりも優れている側面があります。
YACC / Bisonは、テーブル駆動型パーサーを生成します。これは、「処理ロジック」がパーサーのコードではなく、パーサープログラムのデータに含まれていることを意味します。見返りは、非常に複雑な言語のパーサーでさえ、コードのフットプリントが比較的小さいことです。これは、ハードウェアが非常に限られていた1960年代と1970年代にさらに重要でした。テーブル駆動型パーサジェネレータはこの時代にさかのぼり、当時は小さなコードフットプリントが主な要件でした。
ANTLRは再帰下降パーサーを生成します。これは、文法の各生成ルールがパーサーのコード内の関数によって表されるため、「処理ロジック」がパーサーのコードに含まれていることを意味します。見返りは、コードを読み取ることでパーサーが何をしているのかを理解しやすくなることです。また、再帰下降パーサーは通常、テーブル駆動パーサーよりも高速です。ただし、非常に複雑な言語の場合、コードのフットプリントは大きくなります。これは1960年代と1970年代の問題でした。当時、ハードウェアの制限により、たとえばPascalのような比較的小さな言語しかこの方法で実装されていませんでした。
ANTLRで生成されたパーサーは、通常、10.000行以上のコードの近くにあります。手書きの再帰下降パーサーは、同じ球場にあることがよくあります。WirthのOberonコンパイラは、コード生成を含めて約4000行のコードを含む最もコンパクトなコンパイラですが、Oberonは、約40のプロダクションルールしかない非常にコンパクトな言語です。
誰かがすでに指摘しているように、ANTLRの大きなプラスはANTLRworksと呼ばれるグラフィカルなIDEツールです。それは完全な文法と言語デザインの実験室です。入力時に文法規則を視覚化し、競合が見つかった場合は、競合とは何か、原因は何かをグラフィカルに表示します。左再帰などの競合を自動的にリファクタリングして解決することもできます。競合のない文法ができたら、ANTLRworksに言語の入力ファイルを解析させ、解析ツリーとASTを構築して、IDEにツリーをグラフィカルに表示させることができます。これは、多くの時間を節約できるため、非常に大きな利点です。コーディングを開始する前に、言語設計に概念上のエラーが見つかります。LALR文法用のそのようなツールは見つかりませんでした。そのようなツールはないようです。
パーサーを生成したくないが手作業でコーディングしたい人にとっても、ANTLRworksは言語の設計/プロトタイピングに最適なツールです。おそらく、そのようなツールとしては最高のものがあります。残念ながら、LALRパーサーを構築する場合は役に立ちません。単にANTLRworksを利用するためにLALRからLLに切り替えることは価値があるかもしれませんが、一部の人々にとっては、文法タイプを切り替えることは非常に苦痛な経験になる可能性があります。言い換えれば、YMMVです。