lanzamiento , generador de analizadores léxicos libre para lenguajes C y C++. Cabe recordar que re2c fue escrito en 1993 por Peter Bambilis como un generador experimental de analizadores léxicos muy rápidos, distinto de otros generadores por la velocidad del código generado y una interfaz de usuario inusualmente flexible que permite integrar analizadores fácilmente y de manera efectiva en una base de código existente. Desde entonces, el proyecto ha sido desarrollado por la comunidad y sigue siendo un espacio para experimentos e investigaciones en gramáticas formales y autómatas finitos.
La preparación del lanzamiento tomó casi un año. La mayor parte del tiempo, como siempre, se dedicó al desarrollo de la base teórica y la redacción
del artículo "«.
Los algoritmos descritos en el artículo están implementados en la biblioteca experimental libre2c
(la compilación de la biblioteca y las pruebas de rendimiento están desactivadas por defecto y se activan con la opción de configuración "--enable-libs"). La biblioteca no está pensada como un competidor de proyectos existentes como RE2, sino como una plataforma de investigación para desarrollar nuevos
algoritmos (que luego pueden ser utilizados en re2c o en otros proyectos). También resulta conveniente desde el punto de vista de las pruebas, la medición de rendimiento y la creación de enlaces a otros lenguajes.
Las principales novedades en la versión re2c 1.2:
- Se ha añadido un nuevo método simplificado para verificar el final de los datos de entrada ("EOF rule"). Para ello se ha añadido la configuración "re2c:eof",
que permite elegir el símbolo terminal,
y una regla especial "$" que se activa si el analizador
ha alcanzado con éxito el final de los datos de entrada.
Históricamente, re2c ofrece varias maneras de comprobar el
final de los datos de entrada, variando en limitación, eficiencia y simplicidad
de aplicación. La nueva forma busca simplificar la redacción de código, manteniéndose
efectiva y ampliamente aplicable. Los métodos antiguos
siguen funcionando y pueden ser preferibles en ciertos casos. - Se agregó la posibilidad de incluir archivos externos mediante la directiva
"/*!include:re2c "file.re" */", donde "file.re" es el nombre del archivo incluido. Re2c busca archivos en el directorio del archivo incluido,
así como en la lista de rutas especificadas con la opción "-I".
Los archivos incluidos pueden incluir otros archivos.
Re2c proporciona archivos "estándar" en el directorio "include/"
del proyecto, se supone que ahí se acumularán definiciones útiles
de expresiones regulares, algo en la línea de una biblioteca estándar.
Hasta ahora, a petición del público, se ha añadido un archivo con definiciones de categorías Unicode. - Se agregó la posibilidad de generar archivos de encabezado con contenido arbitrario
con contenido mediante las opciones "-t --type-header" (o configuraciones correspondientes) y nuevas directivas "/*!header:re2c:on*/" y
"/*!header:re2c:off*/". Esto puede ser útil en casos en los que
Por defecto, re2c analiza expresiones como "∀x ∃y" como
que se utilizan en otras unidades de traducción.
Re2c ahora entiende literales UTF8 y clases de símbolos en expresiones regulares. - Re2c ahora comprende literales UTF8 y clases de símbolos en expresiones regulares.
una secuencia de caracteres ASCII de 1 bit "e2 88 80 78 20 e2 88 83 79"
"\\u2200x \\u2203y". Esto es muy inconveniente e inesperado para muchos
(códigos hexadecimales), y los usuarios deben escapar manualmente los caracteres Unicode:
re2c proporciona la opción "--input-encoding {ascii | utf8}",
usuarios (como lo demuestran los constantes informes de errores). Por eso ahora
que permite modificar el comportamiento y analizar "∀x ∃y" como
"2200 78 20 2203 79".
Re2c ahora permite usar bloques re2c regulares en modo "-r --reuse". - con la nueva opción "--location-format {gnu | msvc}". El formato GNU se muestra
Esto es conveniente si el archivo de entrada contiene muchos bloques, y solo parte de ellos
necesita ser reutilizada. - Se ha añadido la posibilidad de configurar el formato de advertencias y mensajes de error
con la nueva opción «—location-format {gnu | msvc}». El formato GNU se muestra
como «filename:line:column:», y el formato MSVC — como «filename(line,column)».
Esta opción puede ser útil para los aficionados a las IDE.
También se agregó la opción «—verbose», que muestra un breve mensaje de éxito en caso de éxito. - Se ha mejorado el modo de «compatibilidad» con flex — se han corregido algunos errores de análisis y
la prioridad incorrecta de operadores en casos raros.
Históricamente, la opción «-F --flex-support» permite escribir código
mezclando el estilo de flex y el estilo de re2c, lo que dificulta un poco el análisis sintáctico.
El modo de compatibilidad con flex se usa raramente en nuevo código,
pero re2c sigue apoyándolo por compatibilidad hacia atrás. - El operador de resta de clases de caracteres «/» ahora se aplica
antes de la expansión de la codificación, lo que permite su uso en más casos,
si se utiliza una codificación con longitud variable de caracteres (por ejemplo, UTF8). - El archivo de salida ahora se crea de forma atómica: re2c primero crea un archivo temporal
y escribe el resultado en él, y luego renombra el archivo temporal como el archivo de salida
en una sola operación. - La documentación ha sido completada y reescrita; en particular, se han agregado nuevos
capítulos sobre
y .
La nueva documentación se ha recopilado en un
con ejemplos (los mismos fuentes se dibujan en manpage y en la documentación en línea).
Se han hecho intentos débiles para mejorar la legibilidad del sitio en teléfonos. - Desde el punto de vista de los desarrolladores, re2c ha adquirido un sistema de subsistemas más completo.
depuración. El código de depuración ahora está desactivado en las compilaciones de lanzamiento y
puede activarse mediante la opción de configuración «—enable-debug».
Fuente: opennet.ru
