La différence la plus significative entre YACC / Bison et ANTLR est le type de grammaires que ces outils peuvent traiter. YACC / Bison gère les grammaires LALR, ANTLR gère les grammaires LL.
Souvent, les personnes qui ont travaillé avec les grammaires LALR pendant une longue période, trouveront plus difficile de travailler avec les grammaires LL et vice versa. Cela ne veut pas dire que les grammaires ou les outils sont intrinsèquement plus difficiles à utiliser. L'outil que vous trouvez le plus facile à utiliser dépendra principalement de la familiarité avec le type de grammaire.
En ce qui concerne les avantages, il y a des aspects où les grammaires LALR ont des avantages par rapport aux grammaires LL et il y a d'autres aspects où les grammaires LL ont des avantages par rapport aux grammaires LALR.
YACC / Bison génèrent des analyseurs basés sur des tables, ce qui signifie que la "logique de traitement" est contenue dans les données du programme parseur, pas tellement dans le code de l'analyseur. L'avantage est que même un analyseur pour un langage très complexe a une empreinte de code relativement faible. Cela était plus important dans les années 1960 et 1970, lorsque le matériel était très limité. Les générateurs d'analyseurs basés sur des tables remontent à cette époque et une faible empreinte de code était une exigence principale à l'époque.
ANTLR génère des analyseurs de descente récursifs, ce qui signifie que la "logique de traitement" est contenue dans le code de l'analyseur, car chaque règle de production de la grammaire est représentée par une fonction dans le code de l'analyseur. L'avantage est qu'il est plus facile de comprendre ce que fait l'analyseur en lisant son code. En outre, les analyseurs de descente récursifs sont généralement plus rapides que ceux pilotés par table. Cependant, pour les langages très complexes, l'empreinte du code sera plus importante. C'était un problème dans les années 60 et 70. À l'époque, seuls des langages relativement petits comme Pascal par exemple étaient implémentés de cette façon en raison de limitations matérielles.
Les analyseurs générés par ANTLR sont généralement à proximité de 10 000 lignes de code et plus. Les analyseurs de descente récursifs manuscrits sont souvent dans la même situation. Le compilateur Oberon de Wirth est peut-être le plus compact avec environ 4000 lignes de code, y compris la génération de code, mais Oberon est un langage très compact avec seulement environ 40 règles de production.
Comme quelqu'un l'a déjà souligné, un gros plus pour ANTLR est l'outil graphique IDE, appelé ANTLRworks. C'est un laboratoire complet de conception de grammaire et de langage. Il visualise vos règles de grammaire au fur et à mesure que vous les tapez et s'il trouve des conflits, il vous montrera graphiquement ce qu'est le conflit et ce qui le cause. Il peut même automatiquement refactoriser et résoudre des conflits tels que la récursivité à gauche. Une fois que vous avez une grammaire sans conflit, vous pouvez laisser ANTLRworks analyser un fichier d'entrée de votre langue et créer un arbre d'analyse et AST pour vous et afficher l'arborescence graphiquement dans l'EDI. C'est un très gros avantage car cela peut vous faire gagner de nombreuses heures de travail: vous trouverez des erreurs conceptuelles dans la conception de votre langage avant de commencer à coder! Je n'ai pas trouvé un tel outil pour les grammaires LALR, il semble qu'il n'y en ait pas.
Même pour les personnes qui ne souhaitent pas générer leurs analyseurs mais les coder à la main, ANTLRworks est un excellent outil de conception / prototypage de langage. Très probablement le meilleur outil disponible. Malheureusement, cela ne vous aide pas si vous souhaitez créer des analyseurs LALR. Passer de LALR à LL simplement pour profiter de ANTLRworks peut bien valoir la peine, mais pour certaines personnes, changer de type de grammaire peut être une expérience très pénible. En d'autres termes: YMMV.