Lançamento do re2c lexer generator 2.0

aconteceu liberar re2c 2.0, um gerador de analisador léxico gratuito para linguagens C e C++. O projeto re2c foi originalmente criado em 1993 por Peter Bamboulis como um gerador experimental de analisadores lexicais muito rápidos, diferenciado de outros geradores pela velocidade do código gerado e uma interface de usuário incomumente flexível que permite que os analisadores sejam incorporados de maneira fácil e eficiente em um ambiente existente. base de código. Desde então, o projeto tem sido desenvolvido pela comunidade e continua sendo uma plataforma para experimentos e pesquisas na área de gramáticas formais e máquinas de estados finitos.

Grandes mudanças:

  • Adicionado suporte para a linguagem Go (habilitado pela opção “--lang go” para re2c ou como um programa re2go separado). A documentação para C e Go é gerada a partir do mesmo texto, mas com exemplos de código diferentes. O subsistema de geração de código no re2c foi completamente redesenhado, o que deverá facilitar o suporte a novas linguagens no futuro.
  • Adicionado sistema de compilação alternativo no CMake (obrigado lifx!). As tentativas de traduzir re2c para CMake foram feitas há muito tempo, mas até o ligfx ninguém propôs uma solução completa. O antigo sistema de compilação Autotools continua a ser suportado e usado, e não há planos de abandoná-lo no futuro próximo (em parte para evitar criar problemas para os desenvolvedores de distribuição, em parte porque o antigo sistema de compilação é mais estável e mais conciso que o novo ). Ambos os sistemas são testados continuamente usando Travis CI.
  • Adicionada a capacidade de especificar o código da interface nas configurações ao usar a API genérica. Anteriormente, a maioria das APIs precisava ser especificada na forma de funções ou macros de funções. Agora eles podem ser especificados na forma de strings arbitrárias com parâmetros de modelo nomeados no formato “@@{nome}” ou simplesmente “@@” (se houver apenas um parâmetro e não houver ambiguidade). O estilo da API é definido pela configuração re2c:api:style (o valor da função especifica o estilo funcional e o formato livre especifica um estilo arbitrário).
  • A operação da opção “-c”, “—start-conditions” foi melhorada, permitindo combinar vários lexers interconectados em um bloco re2c. Agora você pode usar blocos regulares junto com blocos condicionais e definir vários blocos condicionais não relacionados em um arquivo. Operação aprimorada da opção "-r", "--reuse" (reutilizando código de um bloco em outros blocos) em combinação com "-c", "--start-conditions" e "-f", "-- opções de estado armazenável" (um lexer com estado que pode ser interrompido a qualquer momento e continuar a execução mais tarde).
  • Исправлена ошибка в недавно добавленном алгоритме обработки конца входных данных (EOF rule), приводившая в редких случаях к неправильной обработке перекрывающихся правил.
  • O processo de inicialização foi simplificado. Anteriormente, o sistema de compilação tentava encontrar dinamicamente um re2c já construído que pudesse ser usado para se reconstruir. Isso levou a dependências incorretas (porque o gráfico de dependências era dinâmico, o que a maioria dos sistemas de construção não gosta). Agora, para reconstruir lexers, você precisa configurar explicitamente o sistema de compilação e definir a variável RE2C_FOR_BUILD.

Fonte: opennet.ru

Adicionar um comentário