Você está na página 1de 4

Compiladores 1

O Gerador de Analisador Lxico LEX


A ferramenta Lex ou Flex, permite especificar um analisador lxico definindo
expresses regulares para descrever padres para os tokens.
Existem muitas verses diferentes de Lex. A verso mais popular denominada
Flex (Fast Lex). Ela distribuda como parte do pacote de compilao Gnu, produzido
pela Free Sfotware Foundation, e est disponvel gratuitamente em diversos endereos
na internet.
Lex um programa que recebe como entrada um arquivo de texto contendo
expresses regulares, juntamente com as aes associadas a cada expresso. A notao
de entrada para a ferramenta Lex chamada de linguagem Lex, e a ferramenta em si
o compilador Lex.
O compilador Lex transforma os padres de entrada em um diagrama de
transio e gera cdigo em um arquivo chamado lex.yy.c, que simula esse diagrama
de transio.
A figura abaixo ilustra como criar um analisador lxico com o Lex.
Programa fonte
lex.l
Lex.yy.c

Fluxo de entrada

Compilador
Lex

lex.yy.c

a.out

Compilador
C

a.out

Sequncia de
tokens

Um arquivo de entrada, Lex.1, escrito na linguagem Lex e descreve o


analisador lxico a ser gerado. O compilador Lex transforma Lex.1 em um programa C,
e o armazena em um arquivo que sempre se chama Lex.yy.c. Esse ltimo arquivo
compilado pelo compilador C em um arquivo sempre chamado a.out. A sada do
compilador C o analisador lxico gerado, que pode receber como entrada um fluxo de
caracteres e produzir como sada um fluxo de tokens.

Convenes Lex para expresses regulares


Na tabela abaixo temos um resumo das convenes de metacaracteres em Lex.
Padro Significado
a
caractere a
a
caractere a, mesmo se a for um metacaractere
\a
caractere a se a for um metacaractere
a*
zero ou mais repeties de a
a+
uma ou mais repeties de a
a?
um a opcional
a|b
a ou b
(a)
a propriamente dito
[abc] qualquer caractere entra a, b e c
http://erinaldosn.wordpress.com

2 O Gerador de Analisador Lxico LEX

Padro Significado
[a-d] qualquer caractere entra a, b, c e d
[^ab] qualquer caractere, exceto a ou b
.
qualquer caractere, exceto mudana de linha
{xxx} a expresso regular representada pelo nome xxx
H muitas outras convenes de metacaractes Lex.

Estrutura de programas Lex


Um arquivo de entrada Lex composto por trs partes: coleo de definies (ou
declaraes), coleo de regras de traduo e coleo de rotinas auxiliares (ou rotinas de
usurio). As trs sees so separadas por dois sinais de porcentagem que aparecem em
linhas separadas iniciando na primeira coluna.
{definies}
%%
{regras}
%%
{rotinas auxiliares}
A seo de definies inclui declaraes de variveis, constantes e definies
regulares.
Cada uma das regras de traduo possui o formato
padro {ao}
Cada padro uma expresso regular, que pode usar as definies regulares da
seo de declarao. As aes so fragmentos de cdigo, normalmente escritos em C.
A terceira seo contm quaisquer funes adicionais usadas nas aes. Essa
seo pode tambm conter um programa principal, se quisermos compilar a sada Lex
como um programa independente.
Exemplo: programa Lex para definies de constantes manifestas.

http://erinaldosn.wordpress.com

Compiladores 3

Exemplo: programa Lex adicionar nmeros de linhas a linhas de um texto, e imprimir o


novo texto para a sada padro.

Insero de cdigo em C
Qualquer texto entre %{ e %} na seo de definio ser copiado diretamente no
programa de sada externamente a todos os procedimentos.
Qualquer texto na seo de procedimentos auxiliares ser copiado diretamente
no programa de sada no final do cdigo Lex.
Qualquer cdigo seguinte a uma expresso regular (separado dela por pelo
menos um espao) na seo de aes (aps o primeiro %%) ser inserido no ponto
apropriado no procedimento de reconhecimento yylex e executado quando ocorrer um
casamento com a expresso regular correspondente. O cdigo em C que representa uma
ao pode ser uma declarao nica em C ou uma declarao composta por declaraes
apresentadas entre chaves.

Exerccios
1. Escreva os seguintes programas, utilizando Lex ou outra linguagem:
a) Modifique os nmeros de notao decimal para hexadecimal, com uma
estatstica impressa.
b) Selecione somente linhas que terminam ou iniciam com a letra a, apagando
todo o resto.
c) Converte caixa alta em caixa baixa, exceto dentro de comentrios.
d) Copie um programa C, substituindo cada instncia da palavra-chave float por
double.
e) Considere que um arquivo uma sequncia de palavras separadas por espao em
branco. Toda vez que encontrar uma palavra:
i. Iniciando em consoante, mova-a para o fim da palavra e inclua ay.
ii. Iniciando em vogal, insira ay ao fim da palavra.

Bibliografia
Compiladores: princpios, tcnicas e ferramentas
Aho, Alfred. Lam, Monica. Sethi, Ravi. Ullman, Jeffrey D.
So Paulo: Pearson Addison-Wesley, 2008.
Compiladores: princpios e prticas
Louden, Kenneth C.
So Paulo: Pioneira Thomson Learning, 2004
http://erinaldosn.wordpress.com

4 O Gerador de Analisador Lxico LEX

Implementao de linguagens de programao: Compiladores


Price, Ana. Toscani, Simo
Porto Alegre: Bookman: Instituto de Informtica da UFRGS, 2008.

http://erinaldosn.wordpress.com

Você também pode gostar