El lunes 20 de julio se lanzó re2c, un generador de analizadores léxicos rápidos.
Principales cambios:
Se agregó soporte para el lenguaje Go
(activado con la opción —lang go para re2c, o como un programa separado re2go).
La documentación para C y Go se genera a partir del mismo texto, pero con diferentes
ejemplos de código. Se ha revisado por completo el subsistema de generación de código en re2c, lo que
debería facilitar el soporte de nuevos lenguajes en el futuro.-
Los intentos de portar re2c a CMake se han realizado desde hace tiempo, pero hasta ligfx nadie
propuso una solución completa.
El antiguo sistema de construcción con Autotools sigue siendo soportado y usado,
y no hay planes a corto plazo de abandonarlo (en parte para no crear
problemas a los desarrolladores de distribuciones, en parte porque el antiguo sistema de construcción
es más estable y conciso que el nuevo).
Ambos sistemas se prueban continuamente mediante Travis CI. Se agregó la posibilidad de definir el código de interfaz en las configuraciones al usar
una API genérica (generic API). Anteriormente, la mayoría de las API debían definirse en forma de
funciones o macros funcionales. Ahora se pueden definir en forma de cadenas arbitrarias
con parámetros de plantilla nombrados del tipo @@{nombre} o simplemente @@ (si
el parámetro es uno y no hay ambigüedad). El estilo de la API se define por la configuración
re2c:api:style (el valor functions establece el estilo funcional, y free-form – el estilo arbitrario).Se mejoró el funcionamiento de la opción -c, —start-conditions, que permite combinar varios
analizadores léxicos interrelacionados en un solo bloque de re2c. Ahora se pueden utilizar
bloques normales junto con bloques condicionales y definir varios bloques condicionales no relacionados
en un solo archivo.
Se mejoró el funcionamiento de la opción -r, —reuse (reutilización de código de un bloque
en otros bloques) en combinación con las opciones -c, —start-conditions y -f, —storable-state
(un analizador léxico con estado guardable, que se puede interrumpir en cualquier momento
y continuar más tarde).Se corrigió un error en el algoritmo recientemente añadido para manejar el final de los datos de entrada
(regla EOF), que provocaba en raras ocasiones un procesamiento incorrecto
de reglas superpuestas.Se simplificó el proceso de arranque. Anteriormente, el sistema de construcción intentaba encontrar dinámicamente
un re2c ya compilado que se pudiera usar para recompilarse a sí mismo.
Esto llevaba a dependencias incorrectas (ya que el gráfico de dependencias resultaba
dinámico, algo que la mayoría de los sistemas de construcción no aprecian).
Ahora, para reconstruir los lexers, es necesario configurar explícitamente
el sistema de construcción y establecer la variable RE2C_FOR_BUILD.
¡Gracias a todos los que participaron en la preparación de esta versión!
Fuente: linux.org.ru
