re2c 1.2

Na sexta-feira, 2 de agosto, foi lançado o re2c — um gerador livre de analisadores lexicais para as linguagens C e C++. Lembramos que o re2c foi escrito em 1993 por Peter Bambiulis como um gerador experimental de muito rápidos analisadores lexicais, que se distingue de outros geradores pela velocidade do código gerado e por uma interface de usuário incomumente flexível que permite integrar analisadores de forma fácil e eficaz em uma base de código existente. Desde então, o projeto é desenvolvido pela comunidade e continua a ser um espaço para experimentos e pesquisas na área de gramáticas formais e autômatos finitos.

As principais novidades na versão 1.2:

  • Adicionada uma nova (simplificada) forma de verificação do fim dos dados de entrada
    (ingl. "EOF rule").
    Para isso, foi adicionada a configuração re2c:eof,
    que permite escolher o símbolo terminal,
    e uma regra especial $, que é acionada se o lexer
    conseguir alcançar com sucesso o fim dos dados de entrada.
    Historicamente, o re2c oferece várias opções para verificar o
    fim dos dados de entrada, variando em termos de limitação, eficiência e simplicidade
    de aplicação. O novo método visa simplificar a escrita do código, mantendo-se
    efetivo e amplamente aplicável. Os métodos antigos
    continuam a funcionar e podem ser preferidos em alguns casos.

  • Adicionada a possibilidade de incluir arquivos externos usando a diretiva
    /*!include:re2c "file.re" */, где file.re
    este é o nome do arquivo incluído. O re2c procura arquivos no diretório do arquivo incluído,
    bem como na lista de caminhos definidos pela opção -I.
    Os arquivos incluídos podem incluir outros arquivos.
    O re2c fornece arquivos "padrão" no diretório include/
    do projeto — supõe-se que lá acumularão definições úteis
    de expressões regulares, algo no espírito de uma biblioteca padrão.
    Até agora, a pedido dos usuários, foi adicionado um arquivo com definições de categorias Unicode.

  • Adicionada a capacidade de gerar arquivos de cabeçalho com conteúdo arbitrário usando as opções -t —type-header (ou as configurações correspondentes) e as novas diretivas /*!header:re2c:on*/ e
    quando o re2c deve gerar definições de variáveis, estruturas e macros,
    usadas em outras unidades de tradução.
    /*!header:re2c:off*/. Это может быть полезно в случаях,
    O re2c agora entende literais UTF8 e classes de caracteres em expressões regulares.
    Por padrão, o re2c analisa expressões como "∀x ∃y" como.

  • O re2c agora entende literais UTF8 e classes de caracteres em expressões regulares.
    Por padrão, o re2c analisará expressões como "∀x ∃y" como.
    sequência de símbolos ASCII de 1 bit e2 88 80 78 20 e2 88 83 79
    (códigos hexadecimais), e os usuários precisam escapar símbolos Unicode manualmente:
    "u2200x u2203y". Isso é muito inconveniente e inesperado para muitos
    usuários (como evidenciam os relatórios de bugs constantes). Portanto, agora
    re2c oferece a opção —input-encoding ,
    que permite alterar o comportamento e analisar "∀x ∃y" como
    2200 78 20 2203 79.

  • Re2c agora permite usar blocos re2c normais no modo -r —reuse.
    Isso é conveniente se o arquivo de entrada contém muitos blocos, e apenas parte deles
    precisa ser reutilizada.

  • Foi adicionada a possibilidade de definir o formato de 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).
    Essa possibilidade pode ser útil para amantes de IDE.
    Uma opção —verbose também foi adicionada, que exibe uma mensagem curta de sucesso em caso de êxito.

  • O modo 'compatibilidade' com flex foi aprimorado — alguns erros de análise e
    prioridade incorreta de operadores foram corrigidos em casos raros.
    Historicamente, a opção -F —flex-support permite escrever código
    misturando o estilo flex e o estilo re2c, o que dificulta um pouco a análise sintática.
    O modo de compatibilidade com flex é raramente usado em código novo,
    mas re2c continua a suportá-lo para compatibilidade retroativa.

  • O operador de subtração de classes de caracteres / agora é aplicado
    antes da expansão da codificação, permitindo seu uso em mais casos,
    quando se utiliza uma codificação de comprimento variável (como UTF8).

  • O arquivo de saída agora é criado de forma atômica: re2c primeiro cria um arquivo temporário
    e escreve o resultado nele, e depois renomeia o arquivo temporário para o arquivo de saída
    em uma única operação.

  • A documentação foi reescrita e ampliada; novas
    capítulos foram adicionados sobre preenchimento de buffer
    e sobre formas de verificação do final dos dados de entrada.
    A nova documentação foi organizada em um
    manual abrangente de uma página
    com exemplos (os mesmos códigos-fonte são visualizados na manpage e na documentação online).
    Foram feitos esforços modestos para melhorar a legibilidade do site em telefones.

  • Do ponto de vista dos desenvolvedores, re2c ganhou um sistema de
    depuração mais completo. O código de depuração agora está desativado em versões de lançamento e
    pode ser ativado através da opção de configuração —enable-debug.

Esta versão levou muito tempo — quase um ano inteiro.
A maior parte do tempo, como sempre, foi dedicada ao desenvolvimento da base teórica e à redação
artigo «Extração Eficiente de Submatches POSIX em NFA».
Os algoritmos descritos no artigo estão implementados na biblioteca experimental libre2c
(a construção da biblioteca e dos benchmarks está desativada por padrão e pode ser ativada pela opção de configuração
—enable-libs). A biblioteca não foi concebida como uma concorrente dos já existentes
projetos como RE2, mas sim como uma plataforma de pesquisa para o desenvolvimento de novos
algoritmos (que podem ser utilizados posteriormente no re2c ou em outros projetos).
Isso também é conveniente para testes, benchmarks e criação de bindings para outras linguagens.

Agradecimentos dos desenvolvedores do re2c a todos que ajudaram para que esta versão se concretizasse,
e de maneira geral à comunidade por ideias, relatórios de bugs, patches, espírito de equipe, etc. ;]

Fonte: linux.org.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster