Estoy buscando un buen generador de analizadores que pueda usar para leer un formato de archivo de texto personalizado en nuestra gran aplicación comercial. Actualmente, este formato de archivo particular se lee con un analizador sintáctico recursivo hecho a mano, pero el formato ha crecido y se ha complejizado hasta el punto en que ese enfoque se ha vuelto inmanejable.¿Es el generador de analizadores ANTLR el mejor para una aplicación C++ con memoria limitada?
Parece que la mejor solución sería construir una gramática adecuada para este formato y luego usar un generador de analizador real como yacc para leerlo, pero tengo problemas para decidir qué generador usar o incluso si ' vale la pena el problema en absoluto. Miré ANTLR y Spirit, pero nuestro proyecto tiene limitaciones específicas más allá de earlier answers que me preguntan si son apropiadas para nosotros. En particular, necesito:
- Un analizador que genera código C o C++ con MSVC. ANTLR 3 no es compatible con C++; afirma generar C directa, pero los documentos sobre cómo conseguir que funcione realmente son un tanto confusos.
- Uso de memoria severamente restringido. La memoria es una gran ventaja en nuestra aplicación e incluso pequeñas pérdidas son fatales. Necesito poder anular el asignador de memoria del analizador para usar nuestro malloc personalizado(), o al menos necesito darle un conjunto contiguo del cual extrae toda su memoria (y que luego puedo desasignar en bloque). Puedo ahorrar unos 200 kb para el ejecutable del analizador, pero cualquier montón dinámico que asigna en el análisis tiene que liberarse después.
- Buen rendimiento. Esto es menos crítico, pero deberíamos poder analizar 100 kb de texto en no más de un segundo en un procesador de 3 ghz.
- Debe estar libre de GPL. No podemos usar el código GNU.
me gusta herramientas IDE y depuración ANTLRworks', pero parece conseguir su objetivo C para ponerse a trabajar con nuestra aplicación será una empresa enorme. Antes de embarcarme en esa palabrería, ¿ANTLR es la herramienta adecuada para este trabajo?
El formato de texto en cuestión se ve algo como:
attribute "FluxCapacitance" real constant
asset DeLorean
{
//comment foo bar baz
model "delorean.mdl"
animation "gullwing.anm"
references "Marty"
loadonce
}
template TimeMachine
{
attribute FluxCapacitance 10
asset DeLorean
}
ANTL3 no admite C++: https://theantlrguy.atlassian.net/wiki/pages/viewpage.action?pageId=2687097 esta respuesta debe actualizarse. –