Lançamento do re2c lexer generator 1.2

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.

  • A documentação foi completada e reescrita; em particular, novos foram adicionados
    capítulos sobre http://re2c.org/manual/manual.html#buffer-refilling заполнение буфера
    и sobre maneiras de verificar o fim dos dados de entrada.
    A nova documentação é coletada no formulário
    um guia 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".

Fonte: opennet.ru

Adicionar um comentário