Tecnologia

Páginas: 8 (1999 palabras) Publicado: 12 de octubre de 2012
Herramientas Lex y Yacc
Lex es un programa para generar analizadores léxicos (en inglés scanners o lexers). Lex se utiliza comúnmente con el programa yacc que se utiliza para generar análisis sintáctico.
Lex, escrito originalmente por Eric Schmidt y Mike Lesk, es el analizador léxico estándar en los sistemas Unix, y se incluye en el estándar de POSIX. Toma como entrada una especificación deanalizador léxico y devuelve como salida el código fuente implementando el analizador léxico en C.
Existen versiones libres de lex basadas en el código original de AT&T en sistemas como OpenSolaris y Plan 9 de los laboratorios Bell. Otra versión popular de software libre es Flex.
Estructura de un archivo de lex
La estructura de un archivo de lex es intencionadamente similar a la de unarchivo del yacc; los archivos se dividen en tres secciones, separadas por líneas que contienen solamente dos La sección de reglas símbolos "%", como sigue:
Sección de declaraciones
%%
Sección de reglas
%%
Sección de código en C


La sección de declaraciones es el lugar para definirmacros y para importar los archivos de cabecera escritos en C. También es posible escribir cualquier código de C aquí, que será copiado en el archivo fuente generado. Este código en C debe ir entre los símbolos %{ %}.
También se pueden incluir "atajos" para definir patrones de la Sección de Reglas, por ejemplo en vez del patrón [0-9]* (cero o más dígitos que reconocerían cualquier número natural),se puede definir en esta sección el "atajo": números [0-9]*, así, en la sección de código pondríamos el patrón {números} {acción_en_C;}. Con esto se clarifica la escritura del código en lex.
La sección de reglas es la sección más importante; asocia patrones a sentencias de C. Los patrones son simplemente expresiones regulares. Cuando el lexer encuentra un texto en la entrada que es asociable aun patrón dado, ejecuta el código asociado de C. Ésta es la base de del funcionamiento de lex.
La sección de código C contiene sentencias en C y funciones que serán copiadas en el archivo fuente generada. Estas sentencias contienen generalmente el código llamado por las reglas en la sección de las reglas. En programas grandes es más conveniente poner este código en un archivo separado y enlazarloen tiempo de compilación.

Ejemplo de lex
Ejemplo que ilustra de manera general el uso de lex para reconocer patrones de expresiones regulares básicas, que reconoce cualquier numero entero y cualquier palabra formada por letras mayúsculas de la "a" a la "z", sin importar si son mayúsculas o minúsculas.

Sección de declaraciones______________________________________________________________________
%{
#include
int palabra=0, numero=0;
%}

Numero -?[0-9]+
Palabra [a-zA-Z]+
______________________________________________________________________
Reglas
Esta sección también puede incluir código de C encerrado por %{ y%}, que será copiado dentro de la función yylex(), su alcance es local dentro de la misma función.
Las reglas de lex, tienen el siguiente formato:

<Expresión regular><Al menos un espacio> {Código en C}

%%
"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]);
-------------------------------------------------

Código en C

%%
main(){
printf("ejem1.l\nEste...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Tecnologia
  • Tecnología
  • Tecnologia
  • Tecnologia
  • Tecnologia
  • Tecnologia
  • Tecnologia
  • Tecnologia

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS