¿Hubo un cambio de idioma que lo requirió o alguna razón práctica por la cual Bison ya no era apropiado u óptimo?
Vi en Wikipedia que cambiaron, refiriéndose a las notas de lanzamiento de GCC 3.4 y GCC 4.1 .
Estas notas de la versión indican:
Un analizador C ++ de descenso recursivo escrito a mano ha reemplazado el analizador C ++ derivado de YACC de versiones anteriores de GCC. El nuevo analizador contiene una infraestructura muy mejorada necesaria para un mejor análisis de los códigos fuente de C ++, manejo de extensiones y separación limpia (cuando sea posible) entre el análisis semántico adecuado y el análisis. El nuevo analizador corrige muchos errores que se encontraron en el antiguo analizador.
Y:
El antiguo analizador C y Objective-C basado en Bison ha sido reemplazado por un nuevo analizador de descenso recursivo escrito a mano más rápido
Lo que me gustaría saber es qué problemas reales tenían y por qué era imposible / poco práctico resolver usando Bison
Respuestas:
GCC cambió a análisis escrito a mano porque los mensajes de error son más significativos cuando se utilizan técnicas de descenso recursivo, como expliqué aquí .
Además, C ++ se está convirtiendo en un lenguaje tan complejo (sintácticamente) para analizar que no vale la pena usar generadores de analizadores sintácticos.
Por fin, la mayor parte del trabajo de un compilador real no se analiza, se optimiza. Los pases de optimización de gama media de GCC son mucho más complejos que su análisis.
(Por cierto, puede personalizar GCC, por ejemplo, con complementos o usando MELT , pero realmente no puede extender la sintaxis del idioma que está aceptando, excepto agregando atributos y pragmas).
fuente