Lançamento do gerador de analisadores léxicos re2c 1.2

Aconteceu lançamento re2c, um gerador livre de analisadores lexicais para as linguagens C e C++. Vale lembrar que o re2c foi criado em 1993 por Peter Bambulis como um gerador experimental de analisadores lexicais muito rápidos, que se diferencia dos outros geradores pela velocidade do código gerado e por uma interface de usuário incomumente flexível, permitindo a integração fácil e eficaz de analisadores em uma base de código existente. Desde então, o projeto tem sido desenvolvido pela comunidade e continua a ser um espaço para experimentos e pesquisas em gramáticas formais e autômatos finitos.

O preparo do lançamento levou quase um ano. A maior parte do tempo, como sempre, foi dedicada ao desenvolvimento da base teórica e à redação
do artigo "Efficient POSIX Submatch Extraction on NFA«.
Os algoritmos descritos no artigo estão implementados na biblioteca experimental libre2c
" (a compilação da biblioteca e dos testes de desempenho 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 projetos existentes, como o RE2, mas sim como um espaço de pesquisa para o desenvolvimento de novos
algoritmos (que podem ser utilizados posteriormente no re2c ou em outros projetos). Isso também é conveniente do ponto de vista de teste, medição de desempenho e criação de bindings para outras linguagens.

As principais inovações na versão re2c 1.2:

  • Foi adicionado um novo método simplificado para verificar o fim dos dados de entrada ("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" */", onde "file.re" é o nome do arquivo incluído. O re2c procura arquivos no diretório do arquivo que inclui,
    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
    com conteúdo através das opções "-t --type-header" (ou configurações correspondentes) e novas diretivas "/*!header:re2c:on*/" e
    "/*!header:re2c:off*/". Isso pode ser útil em casos em que
    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 analisa expressões como "∀x ∃y" como.
  • O re2c agora entende literais UTF8 e classes de caracteres em expressões regulares.
    uma sequência de caracteres ASCII de 1 bit "e2 88 80 78 20 e2 88 83 79"
    "\\u2200x \\u2203y". Isso é muito inconveniente e inesperado para muitos
    (códigos hexadecimais), e os usuários precisam escapar símbolos Unicode manualmente:
    o re2c oferece a opção "--input-encoding {ascii | utf8}",
    usuários (como evidenciam os relatórios de bugs constantes). Portanto, agora
    que permite mudar o comportamento e analisar "∀x ∃y" como
    "2200 78 20 2203 79".
    O re2c agora permite o uso de blocos re2c comuns no modo "-r --reuse".
  • com a nova opção "--location-format {gnu | msvc}". O formato GNU é exibido
    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
    com a nova opção «—location-format {gnu | msvc}». O formato GNU é exibido
    como «filename:line:column:», enquanto o formato MSVC é como «filename(line,column)».
    Essa possibilidade pode ser útil para amantes de IDE.
    Também foi adicionada a opção «—verbose», que exibe uma mensagem resumida de sucesso em caso de êxito.
  • O modo «compatibilidade» com flex foi aprimorado — alguns erros de análise foram corrigidos e
    prioridade incorreta de operadores foram corrigidos em casos raros.
    Historicamente, a opção «-F —flex-suppor» permite que você escreva 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 sobre http://re2c.org/manual/manual.html#buffer-refilling reabastecimento do buffer
    e sobre formas de verificação do final dos dados de entrada.
    A nova documentação foi organizada em um
    guia 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 habilitado através da opção de configuração «—enable-debug».

Fonte: opennet.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