Solución:
Actualizado 2015-01-05:
Mi respuesta original apuntando a una pregunta ahora eliminada:
Ya hay un montón de buenas respuestas a esta pregunta en ¿Qué generador de analizador me recomiendan?
Así que tomé la lista de elementos de la respuesta eliminada en archive.org con al menos 1 voto aquí:
- Paquete de la rata
- Elkhound
- Antlr
- Espíritu parte de Boost (C ++)
- Limón
- Analizador GOLD
- Kit de herramientas de reingeniería de software DMS (no FOSS)
Yo mismo he hecho varios sistemas flex / bison, pero ahora reemplazaría ambos con Lemon de sqlite, ya que es una herramienta, reentrante y segura para subprocesos, además de tener un modelo basado en transmisión / extracción.
La mala noticia es que la mayoría de los lenguajes informáticos reales no son “LALR (1)”, lo que significa que tiene que recurrir a una considerable piratería para que YACC analice los lenguajes reales.
Si está diseñando un DSL, puede usar cualquiera de los generadores de analizadores sintácticos LALR sin muchos problemas precisamente porque puede cambiar la gramática de su DSL cuando el generador de analizadores sintácticos chirría. Los generadores de analizadores sintácticos LL también funcionan aquí por la misma razón, pero la falta de recursividad a la izquierda puede ser un verdadero dolor de cabeza.
Si no se compromete en la forma en que le gusta su sintaxis, los analizadores GLR son ganadores indiscutibles. Los usamos en el kit de herramientas de reingeniería de software de DMS y hemos creado analizadores de calidad de producción para más de 30 idiomas, incluido C ++, que tiene un teorema popular que dice que es casi imposible de analizar. El teorema popular fue iniciado por personas que usaban analizadores sintácticos LL y LALR para tratar de manejar C ++. GLR lo hace fácilmente.