La differenza più significativa tra YACC / Bison e ANTLR è il tipo di grammatiche che questi strumenti possono elaborare. YACC / Bison gestiscono grammatiche LALR, ANTLR gestisce grammatiche LL.
Spesso, le persone che hanno lavorato con le grammatiche LALR per molto tempo, troveranno più difficile lavorare con le grammatiche LL e viceversa. Ciò non significa che le grammatiche o gli strumenti siano intrinsecamente più difficili da lavorare. Lo strumento che trovi più facile da usare dipenderà principalmente dalla familiarità con il tipo di grammatica.
Per quanto riguarda i vantaggi, ci sono aspetti in cui le grammatiche LALR presentano vantaggi rispetto alle grammatiche LL e ci sono altri aspetti in cui le grammatiche LL presentano vantaggi rispetto alle grammatiche LALR.
YACC / Bison genera parser guidati da tabella, il che significa che la "logica di elaborazione" è contenuta nei dati del programma parser, non tanto nel codice del parser. Il risultato è che anche un parser per un linguaggio molto complesso ha un footprint di codice relativamente piccolo. Ciò era più importante negli anni '60 e '70, quando l'hardware era molto limitato. I generatori di parser guidati da tabelle risalgono a questa era e il footprint di codice ridotto era un requisito fondamentale a quei tempi.
ANTLR genera parser di discesa ricorsivi, il che significa che la "logica di elaborazione" è contenuta nel codice del parser, poiché ogni regola di produzione della grammatica è rappresentata da una funzione nel codice del parser. Il vantaggio è che è più facile capire cosa sta facendo il parser leggendo il suo codice. Inoltre, i parser di discesa ricorsivi sono in genere più veloci di quelli guidati da tabella. Tuttavia, per linguaggi molto complessi, l'impronta del codice sarà maggiore. Questo è stato un problema negli anni '60 e '70. All'epoca solo linguaggi relativamente piccoli come Pascal, per esempio, erano implementati in questo modo a causa di limitazioni hardware.
I parser generati da ANTLR sono in genere nelle vicinanze di 10.000 righe di codice e altro ancora. I parser di discesa ricorsivi scritti a mano sono spesso nello stesso campo. Il compilatore Oberon di Wirth è forse il più compatto con circa 4000 righe di codice inclusa la generazione di codice, ma Oberon è un linguaggio molto compatto con solo circa 40 regole di produzione.
Come qualcuno ha già sottolineato, un grande vantaggio per ANTLR è lo strumento grafico IDE, chiamato ANTLRworks. È un laboratorio completo di progettazione grammaticale e linguistica. Visualizza le tue regole grammaticali mentre le digiti e se trova dei conflitti ti mostrerà graficamente qual è il conflitto e cosa lo causa. Può anche refactoring e risolvere automaticamente conflitti come la ricorsione a sinistra. Una volta che hai una grammatica libera da conflitti, puoi consentire ad ANTLRworks di analizzare un file di input della tua lingua e creare un albero di analisi e AST per te e mostrarlo graficamente nell'IDE. Questo è un grande vantaggio perché può farti risparmiare molte ore di lavoro: troverai errori concettuali nella progettazione del tuo linguaggio prima di iniziare a scrivere codice! Non ho trovato nessuno strumento simile per le grammatiche LALR, sembra che non esistano strumenti del genere.
Anche per le persone che non desiderano generare i loro parser ma che li codificano manualmente, ANTLRworks è un ottimo strumento per la progettazione / prototipazione del linguaggio. Molto probabilmente il miglior strumento disponibile. Sfortunatamente, questo non ti aiuta se vuoi costruire parser LALR. Passare da LALR a LL semplicemente per trarre vantaggio da ANTLRworks può essere utile, ma per alcune persone, cambiare tipo di grammatica può essere un'esperienza molto dolorosa. In altre parole: YMMV.