I análisis de fuente agregado recientemente analizado a una herramienta existente que generó archivos de salida a partir de argumentos de línea de comando complejos.¿Existe una herramienta mejor (más moderna) que lex/flex para generar un tokenizer para C++?
Los argumentos de la línea de comandos llegaron a ser tan complejos que comenzamos a permitir que se suministraran como un archivo que se analizó como si fuera una línea de comando muy grande, pero la sintaxis aún era incómoda. Así que agregué la capacidad de analizar un archivo fuente usando una sintaxis más razonable.
Utilicé flex 2.5.4 para Windows para generar el tokenizer para este formato de archivo fuente personalizado, y funcionó. Pero odiaba el código. las variables globales, la convención de nomenclatura extraña y el código de C++ que generó fueron terribles. El backend de generación de código existente estaba pegado a la salida de flex: no uso yacc o bison.
Estoy a punto de sumergirme en ese código y me gustaría utilizar una herramienta mejor/más moderna. ¿Alguien sabe de algo?
- Se ejecuta en el intérprete de comandos de Windows (integración de Visual Studio está bien, pero yo uso que los archivos para construir)
- Genera un adecuado tokenizer encapsulado C++. (Sin variables globales)
- Utiliza expresiones regulares para describir las reglas de tokenización (compatible con sintaxis lex a plus)
- No me obliga a utilizar el c-runtime (o simularlo) para la lectura de archivos. (Análisis sintáctico de la memoria)
- me advierte cuando mis reglas obligan al tokenizer que dar marcha atrás (o correcciones de forma automática)
- me da un control total sobre los nombres de variables y métodos (para que pueda ajustarse a mi convención de nomenclatura existente)
- me permite enlazar varios programas de análisis en un solo .exe y sin conflictos de nombres
- se puede generar un analizador Unicode (UCS-2 de 16 bits), si yo quiero que
- no es una tokenizer + integrado generador de analizadores sintácticos (Quiero un lex reemplazo, no reemplazo de lex + yacc)
Probablemente podría vivir con una herramienta que acaba de generar las tablas de tokenización si eso fuera lo único disponible.
Boost.Spirit, Boost.Proto y Boost.Xpressive no son opciones? –
@Konrad: pueden ser, no estoy familiarizado con ellos. algo que genere plantillas en lugar de una clase de C++ sería aceptable. –