Вы находитесь на странице: 1из 5

Introduccin a la Compilacin

Compiladores Un compilador es un programa que lee un programa fuente, que est escrito en un lenguaje, y lo traduce a un programa objeto, es decir a otro lenguaje. Tambin tiene la capacidad de informar al usuario de la presencia de errores en el programa fuente. Modelo de anlisis y sntesis de la compilacin En la compilacin e isten dos partes! "nlisis! di#ide al programa fuente en sus componentes y crea una representacin intermedia del mismo. $ntesis! construye, a partir de la representacin intermedia, el programa objeto deseado. En el anlisis, se determinan las operaciones que implica el programa fuente y se registran en una estructura jerrquica llamada rbol. El conte to de un compilador %ara crear un programa objeto ejecutable se necesitan otros programas adems de un compilador. Un programa fuente se puede di#idir en mdulos almacenados en arc&i#os distintos. 'a tarea de reunir el programa fuente a menudo se confa a un programa distinto, el cual recibe el nombre de preprocesador. Anlisis del Programa Fuente El anlisis, en la compilacin, consta de tres fases! (. Anlisis Lineal (Anlisis Lxico o Exploracin) ! la cadena de caracteres que constituye al programa fuente se lee de i)quierda a derec&a y se agrupa en componentes l icos, que son secuencias de caracteres que tienen un significado colecti#o. *. Anlisis Jerrquico (Anlisis Sintctico) ! los caracteres o componentes l icos se agrupan de manera jerrquica en colecciones alojadas con un significado colecti#o. En otras palabras se agrupan los componentes l icos del programa fuente en frases gramaticales que el compilador utili)a para sinteti)ar la salida. +ic&as frases gramaticales del programa fuente se representan mediante un rbol de anlisis sintctico. 'a di#isin entre el anlisis l ico y anlisis sintctico es arbitraria. ,abitualmente se escoge una di#isin que simplifique la tarea completa del anlisis. +ic&a di#isin se determina si una construccin del lenguaje fuente es in&erentemente recursi#a o no, esto debido a que las construcciones l icas no requieren recursin, mientras que las construcciones sintcticas suelen requerirla. -. Anlisis Semntico! re#isa el programa fuente para tratar de encontrar errores semnticos y re.ne la informacin sobre los tipos para la fase posterior de generacin de cdigo. Un componente importante del anlisis semntico es la #erificacin de tipos, en la cual el

compilador comprueba si cada operador tiene operandos permitidos por la especificacin del lenguaje fuente. Las Fases de un Compilador 'os compiladores trabajan en base a fases, cada una de las cuales transforma el programa fuente de una representacin a otra. "dministracin de la tabla de smbolos Una tabla de smbolos es una estructura de datos que contiene un registro por cada identificador, con los campos para los atributos del identificador. 'a estructura de datos permite encontrar el registro de cada identificador de una manera rpida, y almacenar o consultar los datos de ese registro. /uando el anali)ador l ico detecta un identificador en el programa fuente, ste se introduce en la taba de smbolos. %ero normalmente los atributos de un identificador no se pueden determinar durante el anlisis l ico. 'as fases que restan introducen informacin sobre los identificadores en la tabla de smbolos y despus la utili)an de #arias formas. %or ejemplo, cuando se est &aciendo el anlisis semntico y la generacin de cdigo intermedio, se necesita saber cules son los tipos de los identificadores, para poder comprobar si el programa fuente los utili)a de una manera #lida y as generar las operaciones apropiadas con cada uno de ellos. El generador de cdigo, por lo general, introduce y utili)a informacin detallada sobre la memoria establecida a los identificadores. +eteccin e informacin de errores En cada fase del compilador se pueden encontrar errores. +espus de detectar un error cada fase debe de manejarlo de alguna forma, para poder continuar la compilacin, permitiendo la deteccin de ms errores en el programa fuente, ya que un compilador que se detiene cuando encuentra el primer error no es muy .til. 'as fases de anlisis sintctico y semntico por lo general manejan una gran parte de los errores detectables por el compilador. 'a fase l ica puede descubrir errores donde los caracteres restantes de la entrada no constituyen ning.n componente l ico del lenguaje. 'a fase de anlisis sintctico determinan los errores donde la cadena de componente l icos incumplen las reglas de estructura 0sinta is1 del lenguaje. En el anlisis semntico el compilador intenta descubrir construcciones que tengan la estructura sintctica correcta, pero que no tengan sentido para la operacin in#olucrada. 2eneracin de cdigo intermedio "l concluir el anlisis sintctico y el semntico, algunos compiladores &acen una representacin intermedia e plcita del programa fuente, la cual se considera como un programa para una mquina abstracta. +ic&a representacin debe de poseer dos propiedades importantes, debe ser fcil de producir y fcil de traducir al programa objeto. 'a representacin intermedia puede tener #arias formas. Una de ellas se llama cdigo de tres direcciones que es como el lenguaje ensamblador para una mquina en la que cada posicin de memoria puede actuar como un registro. El cdigo de tres direcciones consiste en una secuencia de

instrucciones donde cada una tiene como m imo tres operandos. Esta representacin tiene #arias propiedades! (. /ada instruccin de tres direcciones tiene a lo sumo un operador, adems de la asignacin. %or lo que cuando se generan esas instrucciones, el compilador tiene que decidir el orden en el que se efectuarn las operaciones. *. El compilador debe generar un nombre temporal para guardar los #alores calculados por cada instruccin. -. "lgunas instrucciones de tres direcciones tienen menos de tres operandos. 3ptimi)acin del cdigo Est fase trata de mejorar el cdigo intermedio, de modo que se obtenga un cdigo de mquina ms rpido de ejecutar. E iste muc&a #ariacin en la cantidad de optimi)acin de cdigo que ejecutan los diferentes compiladores. E isten los llamados 4compiladores optimadores5 en los cuales se &ace muc&a optimi)acin y una parte significati#a del tiempo del compilador se ocupa en dic&a fase. " su #e) e isten las optimaciones sencillas las cuales mejoran el tiempo de ejecucin del programa objeto sin atrasar e cesi#amente la compilacin. 2eneracin de cdigo 'a generacin de cdigo objeto es la fase final de un compilador, y por lo general consiste en cdigo de mquina relocali)able o cdigo ensamblador. 'as posiciones de memoria se seleccionan para cada una de las #ariables usadas por el programa. +espus, cada una de las instrucciones intermedias se traduce a una secuencia de instrucciones de mquina que ejecuta la misma tarea. Un aspecto decisi#o es la asignacin de #ariables a registros. Programas de Sistemas Relacionados con un Compilador %reprocesadores 'os preprocesadores producen la entrada para un compilador, y pueden reali)ar las siguientes funciones! (. Procesamiento de macros! permite al usuario utili)ar abre#iaturas de construcciones ms grandes, las cuales reciben el nombre de macros. 'os procesadores de macros tratan dos clases de proposiciones! 6. +efinicin de macros! se indican con alg.n carcter e clusi#o o palabra cla#e. /onstan de un nombre para macro que se est definiendo y de un cuerpo, que forma su definicin. 66. Uso de macros! consiste en dar nombre a la macro y brindar parmetros reales, es decir, #alores para sus parmetros formales. *. Inclusin de archivos! inserta arc&i#os de encabe)amiento en el te to del programa. -. Preprocesadores racionales!! estos preprocesadores enriquecen los lenguajes antiguos con recursos ms modernos de flujo de control y de estructuras de datos. 7. Extensin a len"ua#es! estos procesadores tratan de crear posibilidades al lenguaje que equi#alen a macros incorporados.

Ensambladores "lgunos compiladores producen cdigo ensamblador, otros reali)an el trabajo del ensamblador, produciendo cdigo de mquina relocali)able que se puede pasar directamente al editor de carga y enlace. El cdigo ensamblador es una #ersin mnemotcnica del cdigo de mquina, done se usan nombres en lugar de cdigos binarios para operaciones y tambin se usan nombres para las direcciones de memoria. Ensamblado de dos pasadas Este tipo de ensamblador reali)a dos pasadas sobre la entrada. En la primera pasada se ubican todos los identificadores que denoten posiciones de memoria y se guardan en una tabla de smbolos, una #e) encontrados los identificadores se les asignan posiciones de memoria. En la segunda pasada se traduce cada cdigo de operacin a la secuencia de $its que representa esa operacin en lenguaje de mquina, y traduce cada identificador que representa una posicin de memoria a la direccin dada por ese identificador en la tabla de smbolos, dando as como resultado el cdigo de mquina relocali)able 0lo que significa que puede cargarse empe)ando en cualquier posicin de la memoria1. /argadores y editores de enlace Un programa llamado cargador reali)a las dos funciones de carga y edicin de enlaces. El proceso de carga consiste en tomar el cdigo de mquina relocali)able, modificar las direcciones relocali)ables y colocar las instrucciones y los datos modificados en las posiciones adecuadas de la memoria. El editor de enlace permite formar un solo programa a partir de #arios arc&i#os de cdigo de mquina relocali)able. El Agrupamiento de las Fases Etapa inicial y etapa final 'a etapa inicial est compuesta por los anlisis l ico y sintctico, la creacin de la tabla de smbolos, el anlisis semntico y la generacin de cdigo intermedio. En sta etapa tambin se incluye cierta optimi)acin de cdigo y el manejo de errores correspondiente a cada fase. 'a etapa final incluye las partes del compilador que dependen de la mquina objeto, en est encontramos los aspectos de la fase de optimi)acin de cdigo, adems de la generacin de cdigo, junto con el manejador de errores y las operaciones con la tabla de smbolos. %asadas 8ormalmente se aplican #arias fases de la compilacin en una sola pasada, que consiste en la lectura de un arc&i#o de entrada y en la escritura de un arc&i#o de salida. El anlisis l ico, el anlisis sintctico, el anlisis semntico y la generacin de cdigo intermedio pueden ser agrupados en una pasada. 9educcin del n.mero de pasadas

8o se puede generar el cdigo objeto para una construccin si no se conocen los tipos de las #ariables utili)adas en esa construccin. Es por esa ra)n, que en algunos casos, es posible dejar un segmento en blanco para la informacin que falta y llenar la ranura en el momento que la informacin est disponible. ,erramientas para la /onstruccin de /ompiladores Entre las &erramientas .tiles para la construccin de compiladores encontramos! (. %eneradores de anali&adores sintcticos ! producen anali)adores sintcticos a partir de una entrada fundamentada en una gramtica independiente del conte to. *. %eneradores de anali&adores lxicos! generan automticamente anali)adores l icos, a partir de una especificacin basada en e presiones regulares. -. 'ispositivos de traduccin diri"ida por la sintaxis ! producen grupos de rutinas que recorren el rbol del anlisis sintctico, generando cdigo intermedio. 7. %eneradores automticos de cdi"o ! toman un conjunto de reglas que definen la traduccin de cada operacin del lenguaje intermedio al lenguaje de maquina para la maquina objeto. 'as reglas deben incluir suficiente detalle para poder manejar los distintos mtodos de acceso posibles a los datos. :. 'ispositivos para anlisis de (lu#o de datos ! consiste en la recoleccin de informacin sobre la forma en que se trasmiten los #alores de una parte de un programa a cada una de las otras partes.

Вам также может понравиться