Escolar Documentos
Profissional Documentos
Cultura Documentos
lex
Origem: Wikipdia, a enciclopdia livre.
Em cincia da computao (linguagens de programao), lex um programa que gera analisadores lxicos. Ele geralmente usado com o yacc, um gerador de analisador sinttico. Escrito originalmente por Eric Schmidt e Mike Lesk, ele o gerador de analisador lxico padro em diversos sistemas Unix. O lex l um fluxo de entrada especificando um analisador que mapeia expresses regulares em blocos de cdigo, e retorna um cdigo fonte implementando o analisador. Apesar do gerador ser genrico e poder se adequar a diferentes linguagens de programao, atualmente, somente a gerao de cdigo C suportada. Apesar de ser software proprietrio, verses do lex baseadas no cdigo original da AT&T esto disponveis em cdigo aberto, como parte de sistemas como OpenSolaris e Plan 9. Outra verso popular e livre do lex o flex.
ndice
1 Estrutura do arquivo 2 Exemplo de um arquivo lex 3 Relacionamento com yacc 4 Referncias gerais 5 Ver tambm
Estrutura do arquivo
A estrutura de um arquivo lex intencionalmente similar ao de um arquivo yacc. Os arquivos so divididos em trs sees, separadas por linhas que contm somente dois smbolos de porcentagem, como a seguir:
d e f i n i e s % % r e g r a s % % s u b r o t i n a s
Na seo de definies so definidas as macros e so importadas as bibliotecas escritas em C. tambm possvel escrever cdigo C na mesma seo. J a seo de regras associa padres com instrues C, padres escritos na forma de expresses regulares. Quando o analisador lxico identifica algum texto da entrada casando com um padro, ele executa o cdigo C associado. A tentativa do casamento sempre gananciosa, isto , no caso de dois padres distintos casando a mesma entrada, o maior deles ser usado. O maior deles o que consome mais caracteres da entrada. Caso os padres ambguos consumam a mesma quantidade de caracteres, o padro definido antes escolhido. Por fim, a seo de subrotinas contm blocos de cdigo C que sero apenas copiados ao arquivo final. Assume-se que tal cdigo ser invocado a partir das regras da seo de regras. Em programas maiores, mais conveniente separar esse cdigo final noutro arquivo.
30/07/13
% % / * * *s e od ec d i g oC* * * / i n tm a i n ( v o i d ) { / *e x e c u t aoa n a l i s a d o rl x i c o .* / y y l e x ( ) ; r e t u r n0 ; }
Com a entrada acima, ser feita a converso para um arquivo C. Para a seguinte entrada:
a b c 1 2 3 z . ! & * 2 g h j 6
O programa imprimir:
I n t e i r o :1 2 3 I n t e i r o :2 I n t e i r o :6
lex
yacc
pt.wikipedia.org/wiki/Lex
2/3
30/07/13
entrada
yylex()
yyparse()
sada
A partir do diagrama 1, percebe-se que o lex gera a subrotina y y l e x ( )a partir de regras lxicas, e que o yacc gera a subrotina y y p a r s e ( )a partir de regras gramaticais. A partir do diagrama 2, percebe-se que um programa qualquer invoca o analisador sinttico para uma fluxo de entrada. O analisador sinttico no consegue analisar entradas, mas sim tokens. Portanto, cada vez que ele precisa dum token, ele invoca o analisador lxico. O analisador lxico processa o fluxo de entrada e retorna o primeiro token que encontrar. Esse processo de requisio contnuo e s termina quando o analisador lxico identifica o fim o fluxo de entrada ou quando o analisador sinttico identifica uma falha gramatical.
Referncias gerais
M. E. Lesk e E. Schmidt. Lex - A Lexical Analyzer Generator (http://dinosaur.compilertools.net/lex/index.html) (em ingls). The Lex & Yacc Page. Pgina visitada em 22 de julho de 2008. Ivan L. M. Ricarte (14 de fevereiro de 2003). Desenvolvimento de uma aplicao (http://www.dca.fee.unicamp.br/cursos/EA876/apostila/HTML/node69.html). Programao de Sistemas: Uma Introduo. Universidade Estadual de Campinas. Pgina visitada em 22 de julho de 2008.
Ver tambm
flex yacc Ragel Quex Obtida de "http://pt.wikipedia.org/w/index.php?title=Lex&oldid=35162470" Categoria: Compiladores de compilador Esta pgina foi modificada pela ltima vez (s) 02h38min de 30 de maro de 2013. Este texto disponibilizado nos termos da licena Atribuio-Partilha nos Mesmos Termos 3.0 no Adaptada (CC BY-SA 3.0); pode estar sujeito a condies adicionais. Consulte as condies de uso para mais detalhes.
pt.wikipedia.org/wiki/Lex
3/3