Mudanças entre as edições de "ABNF++: um gerador de parser ABNF"
Linha 25: | Linha 25: | ||
sudo dpkg -i abnfparser_1.0_all.deb | sudo dpkg -i abnfparser_1.0_all.deb | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | = Uso do compilador = | ||
+ | |||
+ | O programa ''gen_abnf'' compila uma gramática ABNF, gerando um ''parser'' sob medida para a especificação. A execução do compilador sem argumentos, ou com a opção ''-h'', apresenta uma ajuda: | ||
+ | |||
+ | <syntaxhighlight lang=bash> | ||
+ | $ gen_abnf | ||
+ | Uso: /usr/local/bin/gen_abnf [-n name][-d dir] rules_file | -h | ||
+ | -n: nomeia arquivos de codigo e classe usando "name" (default="default") | ||
+ | -d: grava arquivos de codigo no subdiretorio "dir" | ||
+ | -h: mostra esta ajuda | ||
+ | rules_file: arquivo com regras ABNF | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | As opções do compilador seguem descritas abaixo em maiores detalhes: | ||
+ | * '''-n''': especifica o nome do parser a ser criado. O compilador gera um parser chamado ''Parser_<nome>''. Por exemplo, se o nome informado for ''teste'', a classe gerada será ''Parser_teste''. | ||
+ | * '''-d''': informa o diretório onde devem ser criados os arquivos de código-fonte do parser. Por default é o diretório atual. | ||
+ | |||
= API do parser= | = API do parser= |
Edição das 13h53min de 26 de outubro de 2015
O compilador ABNF é um aplicativo desenvolvido no IFSC que gera um parser a partir de uma gramática. O parser se apresenta como uma classe C++ capaz de identificar e decompor texto de entrada de acordo com um conjunto de regras gerado com base na gramática especificada. Por exemplo, ao compilar esta especificação de gramática ABNF:
header="E-mail: " %d60 nome %d62 WSP email CRLF
email=1*16ALPHA %d64 1*8(1*16ALPHA ".") 1*16ALPHA
nome=*6(1*16ALPHA WSP) 1*16ALPHA
... são gerados estes arquivos:
- parser_default.h: declaração da classe Parser_default
- parser_default.cpp: implementação da classe Parser_default
A classe Parser_default contém a tabela de regras finais do parser. Uma regra final corresponde a uma linha completa de texto identificada pelo parser, enquanto uma regra intermediária corresponde a um trecho do texto identificado. O parser procura identificar uma regra final que corresponda integralmente a uma linha de texto. No exemplo acima existe uma regra final chamada header e duas regras intermediárias chamadas email e nome. Regras finais sempre terminam com CRLF (a sequência \r\n). Assim, o Parser_default do exemplo consegue identificar apenas linhas de texto que estejam no formato definido pela regra header. Além disso, ele consegue decompô-las em sequências de caracteres dadas pelas regras intermediárias email e nome.
Instalação
O compilador ABNF deve ser instalado a partir do seguinte arquivo:
Instale-o com o seguinte comando executado em um terminal:
sudo dpkg -i abnfparser_1.0_all.deb
Uso do compilador
O programa gen_abnf compila uma gramática ABNF, gerando um parser sob medida para a especificação. A execução do compilador sem argumentos, ou com a opção -h, apresenta uma ajuda:
$ gen_abnf
Uso: /usr/local/bin/gen_abnf [-n name][-d dir] rules_file | -h
-n: nomeia arquivos de codigo e classe usando "name" (default="default")
-d: grava arquivos de codigo no subdiretorio "dir"
-h: mostra esta ajuda
rules_file: arquivo com regras ABNF
As opções do compilador seguem descritas abaixo em maiores detalhes:
- -n: especifica o nome do parser a ser criado. O compilador gera um parser chamado Parser_<nome>. Por exemplo, se o nome informado for teste, a classe gerada será Parser_teste.
- -d: informa o diretório onde devem ser criados os arquivos de código-fonte do parser. Por default é o diretório atual.