Lanzamiento del generador re2c lexer 2.0

tuvo lugar relizar re2c 2.0, un generador de analizadores léxicos gratuito para lenguajes C y C++. El proyecto re2c fue creado originalmente 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 sistema existente. base de código. 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.

Cambios importantes:

  • Se agregó soporte para el idioma Go (habilitado mediante la opción “--lang go” para re2c o como un programa re2go separado). La documentación para C y Go se genera a partir del mismo texto, pero con diferentes ejemplos de código. El subsistema de generación de código en re2c ha sido completamente rediseñado, lo que debería facilitar el soporte de nuevos lenguajes en el futuro.
  • Se agregó un sistema de compilación alternativo en CMake (gracias ligfx!). Se han realizado intentos de traducir re2c a CMake durante mucho tiempo, pero hasta ligfx nadie propuso una solución completa. El antiguo sistema de compilación Autotools sigue siendo compatible y utilizado, y no hay planes de abandonarlo en el futuro previsible (en parte para evitar crear problemas a los desarrolladores de distribuciones, en parte porque el antiguo sistema de compilación es más estable y conciso que el nuevo). ). Ambos sistemas se prueban continuamente utilizando Travis CI.
  • Se agregó la capacidad de especificar código de interfaz en configuraciones cuando se usa la API genérica. Anteriormente, la mayoría de las API debían especificarse en forma de funciones o macros de funciones. Ahora se pueden especificar en forma de cadenas arbitrarias con parámetros de plantilla con nombre del tipo “@@{nombre}” o simplemente “@@” (si solo hay un parámetro y no hay ambigüedad). El estilo de la API lo establece la configuración re2c:api:style (el valor de las funciones especifica el estilo funcional y la forma libre especifica un estilo arbitrario).
  • Se ha mejorado el funcionamiento de la opción “-c”, “—start-conditions”, lo que le permite combinar varios lexers interconectados en un bloque re2c. Ahora puede utilizar bloques regulares junto con bloques condicionales y definir varios bloques condicionales no relacionados en un archivo. Funcionamiento mejorado de la opción "-r", "--reuse" (reutilizar código de un bloque en otros bloques) en combinación con "-c", "--start-conditions" y "-f", "-- opciones de estado almacenable" (un lexer con estado que puede interrumpirse en cualquier momento y continuar la ejecución más tarde).
  • Se corrigió un error en el algoritmo de fin de entrada (regla EOF) agregado recientemente, que en casos excepcionales resultaba en un procesamiento incorrecto de reglas superpuestas.
  • El proceso de arranque se ha simplificado. Anteriormente, el sistema de compilación intentaba encontrar dinámicamente un re2c ya construido que pudiera usarse para reconstruirse. Esto llevó a dependencias incorrectas (porque el gráfico de dependencia era dinámico, lo que no les gusta a la mayoría de los sistemas de compilación). Ahora, para reconstruir lexers, necesita configurar explícitamente el sistema de compilación y establecer la variable RE2C_FOR_BUILD.

Fuente: opennet.ru

Añadir un comentario