Está en la página 1de 12

TRABAJO PRCTICO DE COMPILADORES

Prof. Ing. Hernn Garca


Autor: Jorge A. Vzquez Alczar 05/10/2011

Compiladores

Jorge A. Vzquez Alczar

INDICE.
A Anlisis Lxico. .................................................................................................................................... 7, 8 B BIOGRAFA ............................................................................................................................................. 12 C Como determinar donde se encuentra un LOOKAHEAD. ................................................................ 5 D DESCRIPCIN DEL TEMA...................................................................................................................... 3 F FIN DE LA ENTRADA EL ANALIZADOR LXICO DE FORTRAN ..................................................... 7 Flex. .......................................................................................................................................................... 10 H HERRAMIENTAS PARA LA GENERACIN DE ANALIZADORES LEXICOGRFICOS LEX, FLEX, TP LEX. ...................................................................................................................................... 9 I INTRODUCCIN ....................................................................................................................................... 4 L Lex. ........................................................................................................................................................... 10 LOOKAHEAD MULTICARACTER. ......................................................................................................... 5 M Manejo de Errores. .................................................................................................................................... 8 O Objetivos:.................................................................................................................................................... 7 P Posibles acciones: ..................................................................................................................................... 8 R RECUPERACIN DE ERRORES LXICOS. ......................................................................................... 7 Rutina de manejo de errores. ................................................................................................................... 7 T Tabla de Parseo. ...................................................................................................................................... 6 Tipos de errores: ........................................................................................................................................ 8 TOKEN DE ERROR. ................................................................................................................................. 8

Compiladores

Jorge A. Vzquez Alczar

DESCRIPCIN DEL TEMA Lookahead multicaracter. Fin de la entrada el analizador lxico de Fortran: Recuperacin de errores lxicos. Token de error. Herramientas para la generacin de analizadores lexicogrficos Lex, Flex. TP Lex

Compiladores

Jorge A. Vzquez Alczar

INTRODUCCIN Un compilador es un programa informtico que traduce un programa escrito en un lenguaje de programacin a otro lenguaje de programacin, generando un programa equivalente que la mquina ser capaz de interpretar. Se encarga principalmente de traducir los ficheros escritos en lenguajes de programacin (comprensibles para los humanos) en cdigo mquina (unos y ceros, comprensibles generalmente slo por los ordenadores). Son aquellos que una vez escrito el cdigo fuente, traduce el programa entero, de una sola vez, a un programa mquina y as se puede obtener un programa ejecutable directamente sin la necesidad de un traductor. En la compilacin hay dos partes anlisis y sntesis . Durante el anlisis se determinan las operaciones que implica el programa fuente y se registran en una estructura jerrquica llamada rbol. A menudo se usa una clase especial de rbol llamado rbol sintctico , donde cada nodo representa una operacin y los hijos del nodo son los argumentos de la operacin. Un compilador tpicamente opera en fases , cada una lleva a cabo una tarea sobre el programa fuente. La figura siguiente, muestra la descomposicin en fases de un compilador. Las primeras tres fases suelen agruparse en una sola fase llamada fase de anlisis y las ltimas tres en una llamada fase de sntesis. La fase de anlisis y el modulo de manejo de errores se describen posteriormente en este mismo captulo. La fase de sntesis no es relevante en el contexto de un lenguaje multibase de datos, ya que este sigue un enfoque diferente que el de los lenguajes tradicionales, por esta razn solo se menciona. Muchas herramientas de software que manipulan programas fuente realizan primero algn tipo de anlisis, entre estas se encuentran los editores de estructuras, impresoras estticas, verificadores estticos y los intrpretes.

Compiladores

Jorge A. Vzquez Alczar

LOOKAHEAD MULTICARACTER. Los analizadores sintcticos ascendentes construyen el rbol sintctico a partir de las hojas, paso a paso hasta llegar a la raz. Es decir parten de los distintos tokens de la sentencias a analizar, y por medio de reducciones llegan al smbolo inicial de la gramtica. Se llaman reducciones, para indicar que se efectan en sentido contrario a las producciones de la gramtica. El principal problema que se plantea en el anlisis ascendente es el del retroceso, que se traduce en la eleccin de un privote para realizar la reduccin. Para salvar este inconveniente se definieron distintos tipos de gramticas entres las cuales las ms utilizadas son las LR(k). Los analizadores sintcticos ascendentes que reconocen lenguajes descritos por LR(k), toman sus decisiones en funcin de los k tokens inspeccionados por delante a lo que denominamos LOOKAHEAD. Como determinar donde se encuentra un LOOKAHEAD. Para definir como identificar un LOOKAHEAD, utilizaremos el ejemplo de la entrada de caracteres LR(k). LR(0) y LR(1) Tanto LR(0) como LR(1) tienen el mismo engine de ejecucin, la diferencia est en la construccin de la tabla de parseo. Entonces, Dnde est el LOOKAHEAD? Shift sn ve el smbolo de entrada, ya sea lo consume o termina de parsear (accept o error) no es un lookahead slo ve el stack LR(0) misma reduccin para todos los inputs no lookahead LR(1) necesitamos el smbolo de entrada un lookahead

Goto sn Reduce n

Compiladores

Jorge A. Vzquez Alczar

Tabla de Parseo.

ACTION State s0 ( shift to s2 error shift to s2 error reduce (2) reduce (3) ) error error shift to s5 shift to s4 reduce (2) reduce (3) $ error accept error error reduce (2) reduce (3)

Goto X goto s1

LR(0)

s1 s2 s3 s4 s5

goto s3

ACTION State ( s0 s1 shift to s1 shift to s2 shift to s2 error error error error ) reduce (5) reduce (5) reduce (5) shift to s4 reduce (4) error error $ reduce (5) reduce (5) reduce (5) error reduce (4) accept reduce (2) X goto s5

Goto Y goto s6 goto s3 goto s3

LR(1)

s2 s3 s4 s5 s6

Compiladores

Jorge A. Vzquez Alczar

FIN DE LA ENTRADA EL ANALIZADOR LXICO DE FORTRAN Anlisis Lxico. La cadena de caracteres que constituye el programa fuente se lee de izquierda a derecha y se agrupa en componentes lxicos, que son secuencias de caracteres que tienen un significado colectivo. El anlisis lxico se encarga de hacer esta agrupacin. Las principales funciones que realiza son: Identificar los smbolos. Eliminar los blancos, caracteres de fin de lnea, etc... Eliminar los comentarios que acompaan al fuente. Crear unos smbolos intermedios llamados tokens. Avisar de los errores que detecte.

Ejemplo: A partir de la sentencia en PASCAL siguiente: nuevo := viejo + RAZON*2 Genera un cdigo simplificado para el anlisis sintctico posterior, por ejemplo: <id1> <:=> <id2> <+> <id3> <*> <ent> Nota: Cada elemento encerrado entre <> representa un nico token. Las abreviaturas id y ent significan identificador y entero, respectivamente2. RECUPERACIN DE ERRORES LXICOS. Los errores encontrados en las distintas fases de anlisis se envan a un mdulo denominado manejo de errores. En el caso ms sencillo puede ser un subprograma al que se le invoca envindole el cdigo de error, y que se encarga de escribir un mensaje con el error correspondiente, y el nmero de lnea donde se ha producido, as como de cortar el proceso de traduccin. Si se desea construir un tratamiento de errores ms completo, por ejemplo detectando todos los errores del programa fuente, el mdulo se complica dado que los analizadores deben proseguir su trabajo con falta de datos. Rutina de manejo de errores. Objetivos: Informar con claridad, exactitud. Recuperacin rpida, la recuperacin no implica correccin. No debe retrasar el procesamiento de programas sin errores. No generar errores en cascada.
7

Compiladores

Jorge A. Vzquez Alczar

Posibles acciones: Detectar errores. Informar de los errores. Recuperacin de los errores. Corregir errores. Lxicos: escribir mal un identificador, nmero. Sintcticos: la falta de un ; al final de una sentencia o estructura incorrecta. Semnticos: multiplicar por una variable booleana. Lgicos: bucle infinito.

Tipos de errores:

Manejo de Errores. Cada una de las etapas del compilador puede detectar errores que son informados al programador. Un buen compilador no debera terminar su ejecucin al detectar un error, sino que debera recuperarse y continuar con su ejecucin.

TOKEN DE ERROR. Anlisis Lxico. Un TOKEN, es una secuencia de caracteres que forman una unidad significativa. Cuando el anlisis lxico detecta un token de tipo identificador, lo ingresa en la tabla de smbolos. Durante la generacin de cdigos se ingresa informacin para los atributos de los smbolos y se usa esa informacin de diversas maneras. Palabras reservadas: IF, THEN, ELSE Operadores: +, >=, := Cadenas mltiples de caracteres: Identificador, Constante.

Los tokens se deferencian de la cadena de caracteres que representan, la cadena de caracteres es el lexema o valor lxico. Existen tokens que se corresponden con un nico lexema. Por ejemplo: palabra reservada IF. Existen tokens que pueden representar lexemas diferentes. Por ejemplo: identificador plazo, identificador taza.

El Anlisis Lxico hace una correspondencia entre cada token y un nmero entero, este, entrega al Anlisis Sintctico los tokens. Cuando un token puede corresponder a ms de un lexema, el Anlisis Lxico entrega al Anlisis Sintctico el par token-atributo
8

Compiladores

Jorge A. Vzquez Alczar

HERRAMIENTAS PARA LA GENERACIN LEXICOGRFICOS LEX, FLEX, TP LEX.

DE

ANALIZADORES

Los analizadores lexicogrficos, como las tcnicas de procesamiento de lenguajes en general, se pueden utilizar para resolver de manera simple muchos problemas que normalmente se presentan en el desarrollo de sistemas.

BibTeX es una herramienta que permite dar formato a las referencias o citaciones bibliogrficas escritas en documentos LaTeX, fue creado por Oren Patashnik e Leslie Lamport en 1985 con el objetivo de facilitar la separacin de la base de datos bibliogrfica del texto principal del documento. Ejemplo:
@inproceedings{C92,

author title booktitle year

= {Choi, E. M. and Von Mayhauser, A. }, = {Assessment of Support for Program Understanding}, = {Assessment of Quality Software Development Tools, 1992., Proceedings of the second Symposium}, = {1992},

Compiladores

Jorge A. Vzquez Alczar

isbn pages publisher address }

= {0-8186-2620-8}, = {102}, = {IEEE Computer Society}, = {New Orleans, DC, USA},

Las tcnicas de Anlisis Lexicogrfico tambin son tiles para construir procesadores para lenguajes tales como XML (eXtensible Markup Language). Generalmente los cdigos escritos en XML son complejos de leer y analizar. Por consiguiente la construccin de procesadores de lenguajes que permitan recuperar vistas del contenido de los archivos XML son aplicaciones interesantes. Lex. Es un generador de programas diseado para el proceso lxico de cadenas de caracteres de input. El programa acepta una especificacin, orientada a resolver un problema de alto nivel para comparar literales de caracteres, y produce un programa C que reconoce expresiones regulares. Estas expresiones las especifica el usuario en las especificaciones fuente que se le dan al lex. El cdigo lex reconoce estas expresiones en una cadena de input y divide este input. Diseo de un generador de anlisis lxico Lex:

Flex. Es una herramienta para genear scanners o reconocedores, en forma de programas que reconozcan los patrones lxicos en un texto. Recibe desde la lnea de comandos una descripcin del scanner a ser implementado desde un archivo especificado por el usuario. La descripcin del scanner est formada por pares de expresiones regulares y cdigo C, denominadas reglas.
Cdigo Fuente en Flex

FLEX

Cdigo C del analizador

10

Compiladores

Jorge A. Vzquez Alczar

Flex se encarga de transformar las especificaciones (reglas y acciones) que nosotros definamos a un cdigo C que representa al analizarlo. Reglas del reconocedor de Flex: /_ definiciones _/ %% /_ reglas _/ %% /_ cdigo de usuario _/ Ejemplo de aplicacin: basa en la obtencin de datos en tiempo real de celdas de ensayos de turbopropulsores con tecnologa VME y VXI, utilizando Flex y Bison para parsear ecuaciones y clculos en tiempo real, etc. La aplicacin podra presentar entre otras las siguientes caractersticas: Los datos podran grabarse en formato XML o en cualquier otro tipo de formato propietario. Mostrar grficas en distintas formas dependientes de las variables requeridas e interesadas en el banco de prueba. Informacin contnua de las seales procesadas, pudiendo apreciar las escalas de las diferentes variables implicadas. Sistema de filtros, para tratar, por ejemplo eliminar transitorios, espurios, etc. y un editor matemtico que permite presentar grficas calculadas. Sincronizar muestras con diferentes bases de tiempos e incluso datos asncronos. Configurar el lienzo de trabajo, anotaciones, llamadas de atencin, exportar a PDF, Jpg, imprimir, etc.

11

Compiladores

Jorge A. Vzquez Alczar

BIBLIOGRAFIA. Wikipedia Orienta Gnesis LAS MISMAS.COM Autores: Prez Rivera, Marlene Jimnez Mrquez, Mara Del Rosario Castillo Garca, Brenda Berenice Gutirrez Simon, Flavia Marisol Crespo Loto, Karina Aplicaciones de los Analizadores Lxicos. Diseo y construccin de Compiladores. Compiladores: principios, tcnicas y herramientas. Escrito por: Alfred V. Aho,Ravi Sethi,Jeffrey D. Ullman Java a Tope: Traductores Y Compiladores Con Lex/yacc, Jflex/cup Y Javacc. Escrito por: Sergio Glvez Rojas, Miguel ngel Mora Mata.

12

También podría gustarte