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