re2c 1.2

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.

  • A documentación foi completada e reescrita; en particular, engadíronse outras novas
    capítulos sobre encher o buffer
    и sobre as formas de comprobar o final dos datos de entrada.
    A nova documentación recóllese no formulario
    un completo manual dunha páxina
    con exemplos (as mesmas fontes aparecen na páxina de manual e na documentación en liña).
    Fixéronse malos intentos para mellorar a lexibilidade do sitio nos teléfonos.

  • 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. ;]

Fonte: linux.org.ru

Engadir un comentario