You are on page 1of 2

Jos Miguel Chicas Caras Carn 200412849 Compiladores 1 Seccin C

Fecha entrega: 20 Julio 2009

TAREA 1 Compilador: es un programa de computadora que toma como entrada un texto escrito en un lenguaje de alto nivel (llamado lenguaje fuente) y lo traduce a otro lenguaje de bajo nivel (llamado lenguaje objeto).

Clasificacin de los compiladores En un sentido ms amplio, un compilador traduce las instrucciones que el usuario hace (en alto nivel) a instrucciones que la computadora pueda interpretar y ejecutar (cdigo binario). Por lo tanto estas instrucciones son pulsaciones electrnicas ejecutables y para cada lenguaje de programacin se requiere un compilador separado. Los compiladores pueden ser: a) Una sola pasada: se examina el cdigo fuente una vez, generando el cdigo o programa objeto. b) Pasadas mltiples: se requieren pasos intermedios para producir un cdigo en otro lenguaje, y una pasada final para producir y optimizar el cdigo producido durante los pasos anteriores. c) Optimacin: lee un cdigo fuente, lo analiza y descubre errores potenciales sin ejecutar el programa. d) Incrementales: generan un cdigo objeto instruccin por instruccin cuando el usuario teclea cada orden individual. e) Ensamblador: el lenguaje fuente es el lenguaje ensamblador (assembler) y posee estructura sencilla. f) Compilador cruzado: genera cdigo en lenguaje objeto (binario) para una mquina diferente de la que se est usando para compilar. Un ejemplo es construir un compilador de Pascal que genere cdigo para MS-DOS y que el compilador funcione en LINUX y se haya escrito en C++. g) Compilador con montador: compila distintos mdulos de forma independiente y despus es capaz de enlazarlos. h) Autocompilador: compilador que est escrito en el mismo lenguaje que va a compilar. Lgicamente no se puede ejecutar a la primera vez. En otras palabras hace ampliaciones al lenguaje, mejora el cdigo existente, etc. i) Metacompilador: recibe como entrada las especificaciones del lenguaje para que el que se desea obtener un compilador y genera como salida el compilador deseado. Sin embargo tiene una dificultad de unir la generacin de cdigo con la parte de anlisis. Lo que si se ha hecho gracias a estos metacompiladores son el desarrollo de analizadores lxicos y sintcticos. Un ejemplo: Generadores de analizadores lxicos LEX Analizadores sintcticos: YACC j) Descompilador: programa que acepta como entrada cdigo mquina y lo traduce a un lenguaje de alto nivel. En otras palabras hace las funciones inversas a un compilador.

Tabla de smbolos: Es una estructura de datos que contiene un registro para cada identificador. Esta estructura permite encontrar rpidamente el registro de cada identificador y almacenar o consultar datos rpidamente en un registro. En otras palabras reconoce los smbolos que se han definido en la gramtica vlida para el programa. Cuando el analizador lxico detecta un identificador (token) en el programa fuente, el identificador se introduce en la tabla de smbolos. Ya que estos identificadores pueden proporcionar informacin sobre la memoria asignada, su tipo, mbito y en el caso de nombres de procedimiento, cosas como el nmero y tipos de sus argumentos. Sin embargo, los atributos de un identificador no se pueden determinar en el anlisis lxico. Un ejemplos en una declaracin en Pascal como var posicin, inicial, velocidad: real; el tipo real no se conoce cuando el analizador lxico encuentra posicin inicial y velocidad. En el anlisis semntico y la generacin de cdigo intermedio, se necesita saber cules son los tipos de los identificadores para comprobar si el programa fuente los usa de forma vlida y as generar operaciones apropiadas. El generador de cdigo por lo general, introduce y utiliza informacin detallada sobre la memoria asignada a los identificadores. En conclusin la tabla de smbolos son los registros que se han definido en la gramtica vlida para el programa deseado, para que en el anlisis lxico se reconozcan identificadores vlidos para que luego en el anlisis sintctico y semntico sean vlidos, y as generar un cdigo apropiado. Detector o manejador de errores: Es una de las misiones ms importantes de un compilador, y al mismo tiempo es lo ms difcil de realizar. Se usa en las etapas de anlisis sintctico y semntico, aunque los errores se pueden descubrir en cualquier fase. Es difcil por dos motivos: Unos errores ocultan otros Un error provoca una avalancha de muchos errores que se solucionan con el primero.

Es conveniente un buen manejo de errores y que el compilador detecte TODOS los errores que tiene el programa y no se pare en el primero que encuentre. Hay dos criterios a seguir a la hora de manejar errores: Pararse al detectar el primer error, aunque no es muy conveniente (eficiencia). Detectar todos los errores de una pasada.

Procedimiento: En la fase lxica se pueden detectar errores donde los caracteres no forman ningn componente lxico del lenguaje (identificador o token). Los errores donde en la fase de anlisis lxico se violan las reglas de estructura (sintaxis) del lenguaje son determinados por la fase de anlisis sintctico. En el anlisis semntico, el compilador intenta detectar construcciones que tengan la estructura sintctica correcta, pero que tengan significado para la operacin implicada, por ejemplo, si se intenta sumar dos identificadores, uno de los cuales es el nombre de una matriz, y el otro el nombre de un procedimiento. BIBLIOGRAFA Compiladores, Principios, tcnicas y herramientas, Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman. Addison Wesley iberoamericana. - Compiladores: Conceptos Fundamentales. B. Teufel, S. Schmidt, T. Teufel. Addison Wesley Iberoamericana.

You might also like