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です。