El martes 19 de noviembre se presentó el lanzamiento re2c – del generador de analizadores léxicos (también conocido como compilador de expresiones regulares al código en el lenguaje de programación de destino). re2c se especializa en la generación de léxers rápidos y fácilmente integrables. Se diferencia de su contraparte más conocida, flex, por su interfaz flexible, la generación de léxers optimizados sin tabla y el soporte para extracción de subcoincidencias (submatch extraction) basada en autómatas finitos deterministas con etiquetas (TDFA). re2c se utiliza en proyectos donde la velocidad del léxer es crucial, como en Ninja y PHP.
En el lanzamiento 4.0, se rediseñó completamente el subsistema de generación de código, lo que permitió agregar soporte para ocho nuevos lenguajes (D, Haskell, Java, JavaScript, OCaml, Python, V, Zig) además de los ya soportados (C/C++, Go, Rust), así como un mecanismo general para añadir nuevos lenguajes a través de archivos de configuración. El generador de código se encarga de traducir el autómata finito ya construido y optimizado a código, es decir, su tarea es elegir las estructuras de control adecuadas, los tipos de datos, el modelo general del programa, etc. Anteriormente, toda esta lógica formaba parte del código fuente de re2c, y para modificarla o añadir un nuevo lenguaje, era necesario parchear el código fuente y recompilar re2c. Tales parches no se aceptaban en el repositorio principal sin implementar un conjunto estándar de ejemplos y pruebas, lo que complicaba aún más todo el proceso. Ahora toda esta lógica se ha trasladado a archivos de sintaxis – archivos de configuración de texto que pueden ser proporcionados por el usuario (por defecto, re2c utiliza los estándar). El código fuente de re2c está completamente libre de detalles de un lenguaje específico y se basa únicamente en el archivo de sintaxis. El usuario puede sobrescribir parcialmente un archivo de sintaxis existente o escribir uno nuevo desde cero. Para todos los lenguajes oficialmente soportados hay documentación completa con ejemplos.
Por cierto, la propia idea de los archivos de sintaxis surgió gracias a un comentario en LOR, gracias a
the_coder.
El lanzamiento incluyó muchos otros cambios para simplificar la interfaz de usuario, mejorar el manejo de grupos de captura (capturing groups), y también se añadió un entorno en línea para editar y compilar ejemplos: http://re2c.org/playground.
Fuente: linux.org.ru
