lançamento , 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 "«.
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
e .
A nova documentação foi organizada em um
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
