Lanzamento de re2c lexer generator 2.0

tivo lugar liberación re2c 2.0, un xerador de analizador léxico gratuíto para linguaxes C e C++. O proxecto re2c foi creado orixinalmente 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 nun contido existente. base de código. 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 cambios:

  • Engadido soporte para o idioma Go (activado pola opción "--lang go" para re2c ou como un programa re2go separado). A documentación de C e Go xérase a partir do mesmo texto, pero con exemplos de código diferentes. O subsistema de xeración de código en re2c foi completamente redeseñado, o que debería facilitar a compatibilidade con novos idiomas no futuro.
  • Engadiuse un sistema de compilación alternativo para CMake (grazas ligfx!). Hai moito tempo que se intentou traducir re2c a CMake, pero ata ligfx ninguén propuxo unha solución completa. O antigo sistema de compilación de Autotools segue sendo compatible e utilizándose, e non hai plans para abandonalo nun futuro previsible (en parte para evitar crear problemas para os desenvolvedores de distribución, en parte porque o sistema de compilación antigo é máis estable e conciso que o novo). ). Ambos sistemas son probados continuamente usando Travis CI.
  • Engadida a posibilidade de especificar o código de interface nas configuracións cando se usa a API xenérica. Anteriormente, a maioría das API tiñan que especificarse en forma de funcións ou macros de funcións. Agora pódense especificar en forma de cadeas arbitrarias con parámetros de modelo denominados da forma "@@{nome}" ou simplemente "@@" (se só hai un parámetro e non hai ambigüidade). O estilo da API establécese pola configuración re2c:api:style (o valor das funcións especifica o estilo funcional e o formato libre especifica un estilo arbitrario).
  • Mellorouse o funcionamento da opción "-c", "—start-conditions", o que lle permite combinar varios lexers interconectados nun bloque re2c. Agora podes usar bloques normais xunto cos condicionais e definir varios bloques condicionais non relacionados nun ficheiro. Funcionamento mellorado da opción "-r", "--reuse" (reutilizando o código dun bloque noutros bloques) en combinación coas "-c", "--start-conditions" e "-f", "-- storable-state" (un lexer con estado que se pode interromper en calquera momento e continuar a execución máis tarde).
  • Corrixiuse un erro no algoritmo de fin de entrada (regra EOF) engadido recentemente, que en casos raros producía un procesamento incorrecto de regras superpostas.
  • Simplificouse o proceso de arranque. Anteriormente, o sistema de compilación intentou atopar de forma dinámica un re2c xa construído que puidese usarse para reconstruírse. Isto levou a dependencias incorrectas (porque o gráfico de dependencias era dinámico, o que non lle gusta á maioría dos sistemas de compilación). Agora, para reconstruír lexers, cómpre configurar explícitamente o sistema de compilación e establecer a variable RE2C_FOR_BUILD.

Fonte: opennet.ru

Engadir un comentario