O venres 2 de agosto lanzouse o lanzamento de re2c, un xerador gratuíto de analizadores léxicos para as linguaxes C e C++. Re2c foi escrito en 1993 por Peter Bamboulis como un xerador experimental de analizadores léxicos moi rápidos, que se distingue doutros xeradores pola velocidade do código xerado e unha interface de usuario inusualmente flexible que permite que os analizadores se incrusten de forma sinxela e eficiente nunha base de código existente. Desde entón, o proxecto foi desenvolvido pola comunidade e segue a ser unha plataforma para experimentos e investigacións no campo das gramáticas formais e das máquinas de estados finitos.
Principais novidades na versión 1.2:
Engadiuse un novo xeito (simplificado) de comprobar o final dos datos de entrada
(Regra EOF en inglés).
Para iso, engadiuse a configuración re2c:eof,
permítelle seleccionar o carácter do terminal,
e unha regra especial de $ que dispara se o lexer
alcanzou con éxito o final dos datos de entrada.
Históricamente, re2c ofrece unha selección de varios métodos de verificación para
fin de entradas que varían en limitación, eficacia e sinxeleza
aplicacións. O novo método está deseñado para simplificar a escritura de código, mentres
aínda que segue sendo eficaz e amplamente aplicable. Vellos camiños
aínda funcionan e poden ser preferidos nalgúns casos.
Engadida a posibilidade de incluír ficheiros externos mediante unha directiva
/*!include:re2c "ficheiro.re" */ onde ficheiro.re
este é o nome do ficheiro de inclusión. Re2c busca ficheiros no directorio de ficheiros incluídos,
así como na lista de camiños especificados mediante a opción -I.
Os ficheiros incluídos poden incluír outros ficheiros.
Re2c proporciona ficheiros "estándar" no directorio include/
proxecto - espérase que alí se acumulen definicións útiles
expresións regulares, algo así como a biblioteca estándar.
Ata agora, a petición dos traballadores, engadiuse un ficheiro con definicións de categorías Unicode.
Engadida a posibilidade de xerar ficheiros de cabeceira con arbitrario
contido usando as opcións -t --type-header (ou apropiadas
configuracións) e novas directivas /*!header:re2c:on*/ e
/*!header:re2c:off*/. Isto pode ser útil nos casos en que
cando re2c necesita xerar definicións de variables, estruturas e macros,
usado noutras unidades de tradución.
Re2c agora comprende os literais UTF8 e as clases de caracteres en expresións regulares.
Por defecto, re2c analiza expresións como "∀x ∃y" como.
secuencia de caracteres ASCII de 1 bit e2 88 80 78 20 e2 88 83 79
(códigos hexadecimales) e os usuarios teñen que escapar dos caracteres Unicode manualmente:
"u2200x u2203y". Isto é moi inconveniente e inesperado para moitos
usuarios (como demostran constantes informes de erros). Entón agora
re2c ofrece unha opción --input-encoding ,
que lle permite cambiar o comportamento e analizar "∀x ∃y" como
2200 78 20 2203 79.
Re2c agora permite o uso de bloques re2c normais no modo -r --reuse.
Isto é conveniente se o ficheiro de entrada contén moitos bloques e só algúns deles
necesita ser reutilizado.
Agora podes configurar o formato de avisos e mensaxes de erro
usando a nova opción --location-format . Móstrase o formato GNU
como nome de ficheiro:liña:columna: e o formato MSVC como nome de ficheiro (liña,columna).
Esta función pode ser útil para os amantes de IDE.
Tamén se engadiu unha opción --verbose, que imprime unha breve mensaxe de vitoria se ten éxito.
O modo de "compatibilidade" con flex foi mellorado - corrixíronse algúns erros de análise e
precedencia incorrecta do operador en casos raros.
Históricamente, a opción -F --flex-support permitíache escribir código
mesturado en estilo flex e estilo re2c, o que dificulta un pouco a análise.
O modo de compatibilidade Flex raramente se usa no código novo,
pero re2c segue a admitilo para compatibilidade con versións anteriores.
Agora aplícase o operador de resta de clase de caracteres /
antes de expandir a codificación, o que permite empregala nun maior número de casos,
se se usa unha codificación de lonxitude de caracteres variable (por exemplo, UTF8).
O ficheiro de saída agora créase atomicamente: re2c crea primeiro un ficheiro temporal
e escribe o resultado nel, e despois cambia o nome do ficheiro temporal á saída
unha operación.
Desde o punto de vista dos desenvolvedores, re2c adquiriu un subsistema máis completo
depuración O código de depuración agora está desactivado nas compilacións de versións e
pódese activar usando a opción de configuración --enable-debug.
Este lanzamento levou moito tempo, case un ano enteiro.
A maior parte do tempo, coma sempre, dedicouse a desenvolver un marco teórico e escribir
Artigo "Extracción eficiente de submatch POSIX en NFA".
Os algoritmos descritos no artigo están implementados na biblioteca experimental libre2c
(a creación da biblioteca e os puntos de referencia está desactivada por defecto e está habilitada pola opción de configuración
--enable-libs). A biblioteca non se concibe como competidora da existencia
proxectos como RE2, senón como plataforma de investigación para o desenvolvemento de novos
algoritmos (que logo se poden usar en re2c ou noutros proxectos).
Tamén é conveniente desde o punto de vista de probas, benchmarks e creación de enlaces a outros idiomas.
Grazas dos desenvolvedores de re2c a todos os que axudaron a que esta versión se realizara,
e á comunidade en xeral por ideas, informes de erros, parches, moral, etc. ;]