On Github rodrigoavalente / flexandbison
Criado por Rodrigo A Valente
O desenvolvimento de compiladores nunca foi uma tarefa fácil. Entretanto, quando se fala em computação e surge uma tarefa difícil, sempre surgem pessoas que tentam facilitar esse processo. E é por isso que ferramentas como Flex e Bison foram criadas.
Foi desenvolvido por Vern Paxson por volta do ano de 1987. O programa foi todo desenvolvido em linguagem C e é uma versão aprimorada do Lex, trazendo consigo um algoritmo de processamento muito mais veloz que o seu antecessor.
O Flex é um programa gerador de analisadores léxicos. Nele são definidos as regras para o reconhecimento de tokens de sua linguagem.
Essas regras são definidas através de expressões regulares, tendo uma para cada token. O Flex gera um programa em C chamado "lex.yy.c" o qual é o analisar léxico referente as regras descritas.
Definição de Regras no Flex
%% "if" {return IF;} "while" {return WHILE;} [0-9]*\.?[0-9]+ {return NUMBER;} %%
GNU bison ou comumente conhecido como Bison é uma ferramenta capaz de gerar um analisador sintático em linguagens C, C++ e Java. Foi desenvolvido por Robert Corbett por volta do ano de 1988, e mais tarde foi aprimorada pra se tornar compatível com o yacc (outra ferramenta para se gerar analisadores sintáticos) por Richard Stallman.
O Bison processa uma gramática escrita na notação de Backus Naur. Comumente se faz a definição dos tokens no analisador léxico, entretanto, aqui essa tarefa é invertida; os tokens devem ser definidos no Bison.
Para isso a ferramenta exporta os códigos fontes do programa para que ele possa ser utilizado em outros programas.
Definição de uma Gramática em BNF
%% calculadora: %empty | calculadora expressao EOL ; expressao: NUMERO ADD NUMERO {$$ = $1 + $3;} | NUMERO SUB NUMERO {$$ = $1 + $3;} ; %%
As duas ferramentas geram programas distintos, entretanto, que podem ser facilmente interligados, já ambos são compatíveis com o yacc, permitindo-os que se completem, agilizando fortemente o processo de criação de compiladores.
Essa facilidade vem em custa de certa perda de desempenho no compilador gerado, já que um solução específica para um problema específico é muito mais eficaz que utlizar ferramentas genéricas.
Por isso, muitas das vezes, Flex e Bison são escolhidos para se gerar o protótipo de uma linguagem.
As duas ferramentas tem um funcionamento muito parecido, separando a estrutura do programa em 3 partes:
Os geradores são ferramentas de linha de comando e totalmente gratuitos, praticamente toda distribuição Linux já as possui instalados.
Para usá-los basta chamar o programa e mostrar o caminho do arquivo.
bison meuparser.y flex meulexer.l