Las razones por las que lex/yacc y derivados parecen tan omnipresentes hoy en día son que han existido por mucho más tiempo que otras herramientas, tienen mucha más cobertura en la literatura y tradicionalmente vienen con sistemas operativos Unix. Tiene muy poco que ver con la forma en que se comparan con otras herramientas generadoras de lexer y analizador sintáctico.
No importa qué herramienta elijas, siempre habrá una curva de aprendizaje significativa.Entonces, una vez que haya usado una herramienta determinada varias veces y se haya sentido relativamente cómodo en su uso, es poco probable que desee incurrir en el esfuerzo extra de aprender otra herramienta. Eso es solo natural.
Además, a fines de la década de 1960 y principios de la década de 1970, cuando se creó lex/yacc, las limitaciones del hardware planteaban un serio desafío para el análisis sintáctico. El método de análisis de LR controlado por tabla utilizado por Yacc era el más adecuado en ese momento porque se podía implementar con una pequeña huella de memoria mediante el uso de una lógica de programa general relativamente pequeña y manteniendo el estado en archivos en cinta o disco. Los métodos de análisis basados en código como LL tenían una huella de memoria mínima mayor porque el código del programa analizador representa la gramática y, por lo tanto, debe ajustarse por completo a la RAM para ejecutarse y mantiene el estado en la pila en la RAM.
Cuando la memoria se hizo más abundante, mucha más investigación se dirigió a diferentes métodos de análisis sintáctico como LL y PEG y cómo crear herramientas utilizando esos métodos. Esto significa que muchas de las herramientas alternativas que se han creado después de la familia lex/yacc utilizan diferentes tipos de gramáticas. Sin embargo, cambiar los tipos de gramática también incurre en una curva de aprendizaje significativa. Una vez que esté familiarizado con un tipo de gramática, por ejemplo, gramáticas LR o LALR, es menos probable que desee cambiar a una herramienta que utiliza un tipo diferente de gramática, por ejemplo, las gramáticas LL.
En general, la familia de herramientas lex/yacc es generalmente más rudimentaria que las llegadas más recientes que a menudo tienen interfaces de usuario sofisticadas para visualizar gráficamente gramática y conflictos gramaticales o incluso resolver conflictos mediante refactorización automática.
Entonces, si no tiene experiencia previa con ninguna herramienta analizadora, si tiene que aprender una nueva herramienta de todos modos, entonces probablemente debería considerar otros factores como la visualización gráfica de gramáticas y conflictos, autorefactorización, disponibilidad de buena documentación, idiomas en los que los lexers/analizadores generados pueden mostrarse, etc. No seleccione ninguna herramienta simplemente porque "esto es lo que todo el mundo parece estar usando".
Aquí hay algunas razones que se me ocurrieron para el uso de la lex/yacc o flex/bison:
- el desarrollador ya está familiarizado con la lex/yacc o Flex/bisontes
- el desarrollador es más familiar y cómodo con LR/LALR gramáticas
- el desarrollador tiene un montón de libros que cubren lex/yacc pero hay libros que cubren otros
- el desarrollador tiene una oferta de trabajo prospectivo se aproximan y se ha dicho que las habilidades lex/yacc aumentarían sus posibilidades de ser contratado
- el desarrollador podría no obtener los titulares de aceptación por parte de los miembros del proyecto/juego para el uso de otras herramientas
- el medio ambiente ha instalado lex/yacc y por alguna razón no es factible instalar otras herramientas
¿Por casualidad usaste ANTLR? – kyoryu
Sí, eso podría haber sido ... –