re2c 2.0

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.

  • Se añadió un sistema de construcción alternativo en CMake (gracias a ligfx!).


    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

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster