re2c 1.2

El viernes 2 de agosto se lanzó re2c, un generador gratuito de analizadores léxicos para los lenguajes C y C++. Como recordatorio, re2c fue escrito en 1993 por Peter Bamboulis como un generador experimental de analizadores léxicos muy rápidos, que se distingue de otros generadores por la velocidad del código generado y una interfaz de usuario inusualmente flexible que permite integrar los analizadores de manera fácil y eficiente en un base de código existente. Desde entonces, el proyecto ha sido desarrollado por la comunidad y sigue siendo una plataforma para experimentos e investigaciones en el campo de las gramáticas formales y las máquinas de estados finitos.

Principales novedades en la versión 1.2:

  • Se agregó una forma nueva (simplificada) de verificar el final de los datos de entrada.
    (En inglés “regla EOF”).
    Para ello se ha añadido la configuración re2c:eof,
    le permite seleccionar el carácter terminal,
    y una regla $ especial que se activa si el lexer
    Llegó con éxito al final de los datos de entrada.
    Históricamente, re2c ofrece la posibilidad de elegir entre varios métodos de verificación para
    final de entradas que varían en limitación, eficiencia y simplicidad
    aplicaciones. El nuevo método está diseñado para simplificar la escritura de código, mientras
    sin dejar de ser eficaz y ampliamente aplicable. Maneras viejas
    todavía funciona y puede ser preferible en algunos casos.

  • Se agregó la capacidad de incluir archivos externos usando una directiva.
    /*!include:re2c "archivo.re" */ donde archivo.re
    este es el nombre del archivo de inclusión. Re2c busca archivos en el directorio de archivos incluido,
    así como en la lista de rutas especificadas usando la opción -I.
    Los archivos incluidos pueden incluir otros archivos.
    Re2c proporciona archivos "estándar" en el directorio include/
    proyecto: se espera que allí se acumulen definiciones útiles
    expresiones regulares, algo así como la biblioteca estándar.
    Hasta el momento, a petición de los trabajadores, se ha añadido un archivo con definiciones de categorías Unicode.

  • Se agregó la capacidad de generar archivos de encabezado con arbitrarios
    contenido usando las opciones -t --type-header (o apropiadas
    configuraciones) y nuevas directivas /*!header:re2c:on*/ y
    /*!encabezado:re2c:off*/. Esto puede ser útil en los casos en que
    cuando re2c necesita generar definiciones de variables, estructuras y macros,
    utilizado en otras unidades de traducción.

  • Re2c ahora comprende literales UTF8 y clases de caracteres en expresiones regulares.
    De forma predeterminada, re2c analiza expresiones como "∀x ∃y" como.
    secuencia de caracteres ASCII de 1 bit e2 88 80 78 20 e2 88 83 79
    (códigos hexadecimales), y los usuarios tienen que escapar los caracteres Unicode manualmente:
    "u2200x u2203y". Esto es muy inconveniente e inesperado para muchos.
    usuarios (como lo demuestran los constantes informes de errores). Y ahora
    re2c proporciona una opción de codificación de entrada ,
    que le permite cambiar el comportamiento y analizar "∀x ∃y" como
    2200 78 20 2203 79.

  • Re2c ahora permite el uso de bloques re2c normales en modo -r --reuse.
    Esto es conveniente si el archivo de entrada contiene muchos bloques y solo algunos de ellos
    necesita ser reutilizado.

  • Ahora puedes configurar el formato de advertencias y mensajes de error.
    usando la nueva opción --location-format . Se muestra el formato GNU
    como nombre de archivo: línea: columna: y el formato MSVC como nombre de archivo (línea, columna).
    Esta función puede resultar útil para los amantes de IDE.
    También se ha agregado una opción --verbose, que imprime un breve mensaje de victoria si tiene éxito.

  • Se ha mejorado el modo "compatibilidad" con flex: se han solucionado algunos errores de análisis y
    precedencia de operador incorrecta en casos raros.
    Históricamente, la opción -F --flex-support te permitía escribir código
    mezclado en estilo flex y estilo re2c, lo que dificulta un poco el análisis.
    El modo de compatibilidad flexible rara vez se usa en código nuevo,
    pero re2c continúa admitiéndolo por compatibilidad con versiones anteriores.

  • El operador de resta de clase de caracteres / ahora se aplica
    antes de ampliar la codificación, lo que permite su uso en un mayor número de casos,
    si se utiliza una codificación de longitud de caracteres variable (por ejemplo, UTF8).

  • El archivo de salida ahora se crea atómicamente: re2c crea primero un archivo temporal
    y escribe el resultado en él, y luego cambia el nombre del archivo temporal a la salida
    una operación.

  • La documentación fue completada y reescrita; en particular, se agregaron nuevos
    capítulos sobre llenar el buffer
    и sobre formas de comprobar el final de los datos de entrada.
    La nueva documentación se recoge en el formulario
    un manual completo de una página
    con ejemplos (las mismas fuentes se muestran en la página de manual y en la documentación en línea).
    Se han realizado malos intentos para mejorar la legibilidad del sitio en los teléfonos.

  • Desde el punto de vista de los desarrolladores, re2c ha adquirido un subsistema más completo
    depuración El código de depuración ahora está deshabilitado en las versiones de lanzamiento y
    se puede habilitar usando la opción de configuración --enable-debug.

Este lanzamiento llevó mucho tiempo: casi un año entero.
La mayor parte del tiempo, como siempre, se dedicó a desarrollar un marco teórico y escribir
Artículo "Extracción eficiente de subcoincidencias POSIX en NFA".
Los algoritmos descritos en el artículo están implementados en la biblioteca experimental libre2c.
(La creación de la biblioteca y los puntos de referencia está deshabilitada de forma predeterminada y está habilitada mediante la opción de configuración
--enable-libs). La biblioteca no está concebida como competidora de las existentes.
proyectos como RE2, sino como plataforma de investigación para el desarrollo de nuevos
algoritmos (que luego se pueden utilizar en re2c o en otros proyectos).
También es conveniente desde el punto de vista de realizar pruebas, realizar evaluaciones comparativas y crear enlaces a otros idiomas.

Gracias de parte de los desarrolladores de re2c a todos los que ayudaron a que se realizara este lanzamiento.
y a la comunidad en general para ideas, informes de errores, parches, moral, etc. ;]

Fuente: linux.org.ru

Añadir un comentario