Generadores lexicos

Solo disponible en BuenasTareas
  • Páginas : 6 (1348 palabras )
  • Descarga(s) : 0
  • Publicado : 11 de mayo de 2010
Leer documento completo
Vista previa del texto
INSTITUTO TECNOLÓGICO SUPERIOR
DE LERDO
- Ing. En sistemas computacionales -
Programación de sistemas

Tarea
Generadores de código para analizadores léxicos
Modulo II

Alumno:
Manuel Alejandro Martínez palacios

Generadores de código para analizadores léxicos

Objetivo.-
El alumno investigara las características de un programa generador de código para analizadores léxicos, asícomo la búsqueda de programas que realicen este proceso, enfocándose en el LEX y el FLEX, dos de los más comunes.
Marco teórico.-
Un analizador léxico es un módulo destinado a leer caracteres del archivo de entrada, donde se encuentra la cadena a analizar, reconocer subcadenas que correspondan a símbolos del lenguaje y retornar los tokens correspondientes y sus atributos.
Puede asegurarse que laherramienta del tipo mencionado más conocida es Lex. 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. Lex toma comoentrada una especificación de analizador léxico y devuelve como salida el código fuente implementando el analizador léxico en C.
Aunque tradicionalmente se trata de software propietario, 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 de lex es Flex .
La estructura de unarchivo de lex es intencionadamente similar a la de un archivo del yacc; los archivos se dividen en tres secciones, separadas por líneas que contienen solamente dos 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 ellugar para definir macros 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íancualquier 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 entradaque es asociable a un 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 generado. 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 archivoseparado y enlazarlo en tiempo de compilación.
La forma en que trabaja lex es actuando como un autómata que empieza a localizar expresiones regulares que sean descritas, y una vez que sea reconocida la cadena representada por dicha expresión, inmediatamente va a ejecutar el código que está asociado a esa regla.

Flex
Se le considera una herramienta para generar programas que van a reconocerpatrones léxicos de un texto (también llamados escáner). La manera en que trabaja flex es que lee los ficheros de entrada, o la entrada estándar si no se le ha indicado ningún nombre de fichero con la descripción de un escáner a generar. Dicha descripción se encuentra dada en forma de expresiones regulares y de código en C denominadas reglas. Flex va a generar como salida un fichero fuente en C...
tracking img