Flex & Bison – Construindo Compiladores – O Flex



Flex & Bison – Construindo Compiladores – O Flex

0 0


flexandbison


On Github rodrigoavalente / flexandbison

Flex & Bison

Construindo Compiladores

Criado por Rodrigo A Valente

Introdução

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.

O Flex

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.

Funcionamento

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.

Exemplo

Definição de Regras no Flex

							
	%%
	"if"			    {return IF;}
	"while"			    {return WHILE;}
	[0-9]*\.?[0-9]+  	    {return NUMBER;}
	%%
							
						

Bison

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.

Funcionamento

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.

Exemplo

Definição de uma Gramática em BNF

							
%%
calculadora:
		%empty
	|	calculadora expressao EOL
	;

expressao:
		NUMERO ADD NUMERO		{$$ = $1 + $3;}
	|	NUMERO SUB NUMERO		{$$ = $1 + $3;}
	;
%%							
							
						

Por que utilizar Flex e Bison juntos?

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.

Mas nem tudo são flores.

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.

Estrutura

As duas ferramentas tem um funcionamento muito parecido, separando a estrutura do programa em 3 partes:

  • Configurações
  • Definição de Regras
  • Código (Opcional)

Uso

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
						
					

Fonte

FIM

Flex & Bison Construindo Compiladores Criado por Rodrigo A Valente