re2c 1.2

Na sexta-feira, 2 de agosto, foi lançado o re2c, um gerador gratuito de analisadores lexicais para as linguagens C e C++. Re2c foi escrito 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 uma base de código existente. 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.

Principais inovações na versão 1.2:

  • Adicionada uma nova maneira (simplificada) de verificar o final dos dados de entrada
    (inglês “regra EOF”).
    Para isso, a configuração re2c:eof foi adicionada,
    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 "arquivo.re" */ onde arquivo.re
    este é o nome do arquivo de inclusão. 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 uma opção --input-encoding ,
    que permite alterar o comportamento e analisar "∀x ∃y" como
    2200 78 20 2203 79.

  • Re2c agora permite o uso de blocos re2c regulares 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 . O formato GNU é exibido
    como filename:line:column: e o formato MSVC como filename(line,column).
    Este recurso pode ser útil para amantes de IDE.
    Uma opção --verbose também foi adicionada, que imprime uma pequena 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-support 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 personagem / 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.

  • A documentação foi completada e reescrita; em particular, novos foram adicionados
    capítulos sobre preencher o buffer
    и sobre maneiras de verificar o fim dos dados de entrada.
    A nova documentação é coletada no formulário
    um manual abrangente de uma página
    com exemplos (as mesmas fontes são renderizadas na página de manual e na documentação online).
    Foram feitas tentativas fracas para melhorar a legibilidade do site nos telefones.

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

Este lançamento demorou muito - 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 benchmarks está desabilitada por padrão e habilitada pela opção de configuração
--enable-libs). A biblioteca não é concebida como concorrente dos existentes
projetos como RE2, mas como 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 testes, benchmarks e criação de ligações para outras linguagens.

Obrigado dos desenvolvedores do re2c a todos que ajudaram este lançamento a acontecer,
e à comunidade em geral para ideias, relatórios de bugs, patches, moral, etc. ;]

Fonte: linux.org.ru

Adicionar um comentário