Lex
http://www.medinaweb.com/programas/documents/tut
oriales/lex_yacc/core/lex.html
Lex. Conceptos básicos
• Lex: herramienta para construir analizadores
léxicos (1ª. Fase)
• Requiere escribiruna especificación léxica, a
través de la creación un conjunto de patrones
(Expresiones Regulares)
• Lex no produce un programa compilado, lo que
hace es traducir las especificaciones a lenguaje C
•Incluye una rutina llamada yylex(), que es
utilizada para iniciar el análisis de la entrada
Lex. Conceptos Básicos
• La entrada es tomada de yyin, que por defecto
su valor es stdin, es decir, lapantalla o
terminal. Este valor puede ser modificado por
cualquier apuntador a un archivo.
• La entrada se puede leer también desde un
arreglo de caracteres u otros medios, lo que
implica implementaralgunas funciones de lex.
Un ejemplo sencillo
%%
. printf("%c",yytext[0]);
%%
* Guardar como ejem0.l
$ lex ejem0.l
$ gcc -o ejem0 lex.yy.c -ll
$ ./ejem0
Ejemplo de Lex
Ejemplo de Lex
^C$
Ejemplo:Reconoce cualquier numero entero y
cualquier palabra formada por letras mayúsculas o
minúsculas de la «a» a la «z» (ejem1.l)
• Definiciones o
declaraciones:
%{
#include
int palabra=0, numero=0;
%}Numero-?[0-9]+
Palabra [a-zA-Z]+
1. Declaraciones en C
– Son aquellas
encerradas entre %
{ %}
2. Declaraciones de lex
– Están formados por un
nombre o identificador
y su respectiva
expresión regularEjemplo: Reconoce cualquier numero entero y
cualquier palabra formada por letras mayúsculas o
minúsculas de la «a» a la «z» (ejem1.l)
• Reglas:
"bye"{bye();return 0;}
"quit" {bye();return 0;}
"resume"{bye();return 0;}
{Palabra} {printf("Se leyo la
palabra : %s", yytext);palabra++;}
{Numero} {printf("Se leyo el
numero : %d",
atoi(yytext));numero++;}
. printf("%s",yytext[0]);
• Las reglas Lextienen el
siguiente formato:
• La primera columna son las
expresiones regulares
• En la segunda columna se
escriben acciones en C
• Cada que se acepta una
cadena se...
Regístrate para leer el documento completo.