You are on page 1of 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 Compilador Lex Compilador C lex.yy.c

a.out

Fluxo de entrada

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

You might also like