La diferencia más significativa entre YACC / Bison y ANTLR es el tipo de gramáticas que estas herramientas pueden procesar. YACC / Bison manejan las gramáticas LALR, ANTLR maneja las gramáticas LL.
A menudo, las personas que han trabajado con gramáticas LALR durante mucho tiempo, encontrarán que trabajar con gramáticas LL es más difícil y viceversa. Eso no significa que las gramáticas o herramientas sean inherentemente más difíciles de trabajar. La herramienta que le resulte más fácil de usar se reducirá principalmente a la familiaridad con el tipo de gramática.
En cuanto a las ventajas, hay aspectos donde las gramáticas LALR tienen ventajas sobre las gramáticas LL y hay otros aspectos donde las gramáticas LL tienen ventajas sobre las gramáticas LALR.
YACC / Bison generan analizadores de tabla, lo que significa que la "lógica de procesamiento" está contenida en los datos del programa analizador, no tanto en el código del analizador. La recompensa es que incluso un analizador de un lenguaje muy complejo tiene una huella de código relativamente pequeña. Esto fue más importante en las décadas de 1960 y 1970, cuando el hardware era muy limitado. Los generadores de analizadores de tabla se remontan a esta época y la huella de código pequeña era un requisito principal en ese momento.
ANTLR genera analizadores de descenso recursivos, lo que significa que la "lógica de procesamiento" está contenida en el código del analizador, ya que cada regla de producción de la gramática está representada por una función en el código del analizador. La recompensa es que es más fácil entender lo que hace el analizador leyendo su código. Además, los analizadores de descenso recursivo suelen ser más rápidos que los de mesa. Sin embargo, para lenguajes muy complejos, la huella del código será mayor. Este fue un problema en los años sesenta y setenta. En aquel entonces, solo idiomas relativamente pequeños como Pascal, por ejemplo, se implementaron de esta manera debido a limitaciones de hardware.
Los analizadores generados por ANTLR están típicamente cerca de 10.000 líneas de código y más. Los analizadores de descenso recursivos escritos a mano suelen estar en el mismo estadio. El compilador Oberon de Wirth es quizás el más compacto con aproximadamente 4000 líneas de código, incluida la generación de código, pero Oberon es un lenguaje muy compacto con solo unas 40 reglas de producción.
Como alguien ya ha señalado, una gran ventaja para ANTLR es la herramienta gráfica IDE, llamada ANTLRworks. Es un laboratorio completo de diseño de gramática y lenguaje. Visualiza sus reglas gramaticales a medida que las escribe y, si encuentra algún conflicto, le mostrará gráficamente cuál es el conflicto y qué lo causa. Incluso puede refactorizar y resolver automáticamente conflictos como la recursión izquierda. Una vez que tenga una gramática libre de conflictos, puede dejar que ANTLRworks analice un archivo de entrada de su idioma y cree un árbol de análisis y AST para usted y muestre el árbol gráficamente en el IDE. Esta es una gran ventaja porque puede ahorrarle muchas horas de trabajo: ¡Encontrará errores conceptuales en el diseño de su lenguaje antes de comenzar a codificar! No he encontrado ninguna herramienta de este tipo para las gramáticas LALR, parece que no existe tal herramienta.
Incluso para las personas que no desean generar sus analizadores, sino que los codifican manualmente, ANTLRworks es una gran herramienta para el diseño / creación de prototipos del lenguaje. Posiblemente la mejor herramienta disponible. Desafortunadamente, eso no te ayuda si quieres construir analizadores LALR. Puede que valga la pena cambiar de LALR a LL simplemente para aprovechar ANTLRworks, pero para algunas personas, cambiar los tipos de gramática puede ser una experiencia muy dolorosa. En otras palabras: YMMV.