aconteceu liberar re2c, um gerador de analisador léxico gratuito para linguagens C e C++. Lembre-se de que re2c foi escrito em 1993 por Peter Bambulis como um gerador experimental de analisadores lexicais muito rápidos, diferindo de outros geradores na velocidade do código gerado e em uma interface de usuário incomumente flexível que permite que os analisadores sejam integrados de maneira fácil e eficiente em um código existente. base. 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.
A preparação para o lançamento durou quase um ano inteiro. A maior parte do tempo, como sempre, foi gasto no desenvolvimento de uma estrutura teórica e na redação
artigos "Extração eficiente de subcorrespondência POSIX em NFA".
Os algoritmos descritos no artigo são implementados na biblioteca experimental libre2c
(a construção da biblioteca e dos testes de desempenho está desabilitada por padrão e habilitada pela opção de configuração “—enable-libs”). A biblioteca não pretende ser um concorrente de projetos existentes como RE2, mas sim uma plataforma de pesquisa para o desenvolvimento de novos.
algoritmos (que podem então ser usados no re2c ou em outros projetos). Também é conveniente do ponto de vista de teste, medição de desempenho e criação de ligações para outras linguagens.
Principais inovações na versão re2c 1.2:
Adicionado um novo método simplificado para verificar o final dos dados de entrada (“regra EOF”). Para isso, foi adicionada a configuração “re2c:eof”,
permite que você selecione o caractere do terminal,
e uma regra especial “$”, que é acionada se o lexer
atingiu com sucesso o final dos dados de entrada.
Historicamente, o re2c oferece uma escolha de vários métodos de verificação para
fim das entradas variando em limitação, eficiência e simplicidade
formulários. O novo método foi projetado para simplificar a escrita de código, enquanto
permanecendo eficaz e amplamente aplicável. Métodos antigos
ainda funciona e pode ser preferido em alguns casos.
Adicionada a capacidade de incluir arquivos externos usando uma diretiva
"/*!include:re2c "file.re" */", onde "file.re" é o nome do arquivo a ser incluído. Re2c procura arquivos no diretório de arquivos incluindo,
bem como na lista de caminhos especificados usando a opção “-I”.
Os arquivos incluídos podem incluir outros arquivos.
Re2c fornece arquivos "padrão" no diretório "include/"
projeto - espera-se que definições úteis se acumulem lá
expressões regulares, algo como a biblioteca padrão.
Até o momento, a pedido dos trabalhadores, foi adicionado um arquivo com definições de categorias Unicode.
Adicionada a capacidade de gerar arquivos de cabeçalho com arbitrários
conteúdo usando as opções "-t --type-header" (ou apropriado
configurações) e novas diretivas "/*!header:re2c:on*/" e
"/*!header:re2c:off*/". Isto pode ser útil nos casos em que
quando re2c precisa gerar definições de variáveis, estruturas e macros,
usado em outras unidades de tradução.
Re2c agora entende literais UTF8 e classes de caracteres em expressões regulares.
Por padrão, re2c analisa expressões como "∀x ∃y" como
sequência de caracteres ASCII de 1 bit “e2 88 80 78 20 e2 88 83 79”
(códigos hexadecimais), e os usuários precisam escapar dos caracteres Unicode manualmente:
“\u2200x\u2203y.” Isto é muito inconveniente e inesperado para muitos
usuários (como evidenciado por constantes relatórios de bugs). Então agora
re2c fornece a opção "--input-encoding {ascii | utf8}",
que permite alterar o comportamento e analisar “∀x ∃y” como
“2200 78 20 2203 79.”
Re2c agora permite que blocos re2c regulares sejam usados no modo "-r --reuse".
Isto é conveniente se o arquivo de entrada contiver muitos blocos e apenas alguns deles
precisa ser reutilizado.
Agora você pode definir o formato dos avisos e mensagens de erro
usando a nova opção "--location-format {gnu | msvc}". O formato GNU é exibido
como "nome do arquivo: linha: coluna:" e o formato MSVC como "nome do arquivo (linha, coluna)".
Este recurso pode ser útil para amantes de IDE.
Uma opção "--verbose" também foi adicionada, que exibe uma breve mensagem de vitória se for bem-sucedida.
O modo de “compatibilidade” com flex foi melhorado - alguns erros de análise foram corrigidos e
precedência incorreta do operador em casos raros.
Historicamente, a opção "-F --flex-suppor" permitia escrever código
misturado no estilo flex e no estilo re2c, o que torna a análise um pouco difícil.
O modo de compatibilidade Flex raramente é usado em código novo,
mas o re2c continua a apoiá-lo para compatibilidade com versões anteriores.
O operador de subtração de classe de caractere "/" agora se aplica
antes de expandir a codificação, o que permite sua utilização em um maior número de casos,
se uma codificação de comprimento de caracteres variável for usada (por exemplo UTF8).
O arquivo de saída agora é criado atomicamente: re2c cria primeiro um arquivo temporário
e grava o resultado nele e, em seguida, renomeia o arquivo temporário para a saída
uma operação.
Do ponto de vista dos desenvolvedores, o re2c adquiriu um subsistema mais completo
depuração A depuração de código agora está desabilitada em compilações de lançamento e
pode ser habilitado usando a opção de configuração "--enable-debug".