Lanzamiento del generador re2c lexer 1.2

tuvo lugar relizar re2c, un generador de analizadores léxicos gratuito para lenguajes C y C++. Recuerde que re2c fue escrito en 1993 por Peter Bambulis como un generador experimental de analizadores léxicos muy rápidos, que se diferencia de otros generadores en 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 código existente. base. 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.

La preparación para el lanzamiento tomó casi un año entero. La mayor parte del tiempo, como siempre, se dedicó a desarrollar un marco teórico y escribir
artículos "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 las pruebas de rendimiento está deshabilitada de forma predeterminada y se habilita mediante la opción de configuración “—enable-libs”). La biblioteca no pretende ser un competidor de proyectos existentes como RE2, sino una plataforma de investigación para el desarrollo de otros nuevos.
algoritmos (que luego se pueden utilizar en re2c o en otros proyectos). También es conveniente desde el punto de vista de probar, medir el rendimiento y crear enlaces a otros idiomas.

Principales novedades en la versión re2c 1.2:

  • Se agregó un nuevo método simplificado para verificar el final de los datos de entrada (“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 "file.re" */", donde "file.re" es el nombre del archivo que se incluirá. 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 la opción "--input-encoding {ascii | utf8}",
    que le permite cambiar el comportamiento y analizar “∀x ∃y” como
    “2200 78 20 2203 79”.

  • Re2c ahora permite utilizar 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 {gnu | msvc}". 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 muestra 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-suppor" le 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.

  • Ahora se aplica el operador de resta de clase de caracteres "/"
    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 http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и sobre formas de comprobar el final de los datos de entrada.
    La nueva documentación se recoge en el formulario
    una guía completa 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".

Fuente: opennet.ru

Añadir un comentario