Sunteți pe pagina 1din 6

INTRODUCCION

Este trabajo de investigacin mostrara la forma en que trabaja o realiza sus operaciones un compilador, las operaciones que se llevan a cabo en cada una de las fases de un compilador. Para empezar definamos que es un compilador: El compilador es un programa que se encarga de traducir los programas escritos por el programador en lenguaje de alto nivel (entendible por el ser humano) a un lenguaje de bajo nivel que es el comprensible por la mquina y que, de esta manera, permite que pueda ser ejecutado por la computadora. Sera la transformacin del cdigo fuente a un lenguaje mquina o cdigo objeto. Tambin se conocern las funciones de un preprocesador, a continuacin se define lo que es un preprocesador: Un preprocesador es un programa separado que es invocado por el compilador antes de que comience la traduccin real. Un preprocesador de este tipo puede eliminar los comentarios, incluir otros archivos y ejecutar sustituciones de macros.

FASES DE UN COMPILADOR
ANALISIS LEXICO
A la primera fase de un compilador se le llama anlisis lxico. El analizador lxico lee el flujo de caracteres que componen el programa fuente y los agrupa en secuencias significativas, conocidas como lexemas. Para cada lexema, el analizador lxico produce como salida un token de la forma: (nombre-token, valor-atributo) que pasa a la siguiente fase, el anlisis de la sintaxis. En el token, el primer componente nombre-token es un smbolo abstracto que se utiliza durante el anlisis sintctico, y el segundo componente valor-atributo apunta a una entrada en la tabla de smbolos para este token. La informacin de la entrada en la tabla de smbolos se necesita para el anlisis semntico y la generacin de cdigo. Ejemplo: posicin = inicial + velocidad * 60 Los caracteres en esta asignacin podran agruparse en los siguientes lexemas y mapearse a los siguientes tokens que se pasan al analizador sintctico: 1.- posicin es un lexema que se asigna a un token (id, 1) en donde id es un smbolo abstracto que representa la palabra identificador y 1 apunta a la entrada en la tabla de smbolos para posicin. La entrada en la tabla de smbolos para un identificador contiene informacin acerca de este, como su nombre y tipo. 2.- El smbolo de asignacin = es un lexema que se asigna al token (=). Como este token no necesita un valor-atributo, se ha omitido el segundo componente. Se podra haber utilizado cualquier smbolo abstracto como asignar para el nombre-token, pero por conveniencia de notacin se ha optado por usar el mismo lexema como el nombre para el smbolo abstracto. 3.- inicial es un lexema que se asigna al token (id, 2), en donde 2 apunta a la entrada en la tabla de smbolos para inicial. 4.- + es un lexema que se asigna al token (+). 5.- velocidad es un lexema que se asigna al token (id, 3), en donde 3 apunta a la entrada en la tabla de smbolos para velocidad. 6.- + es un lexema que se asigna al token (+). 7.- 60 es un lexema que se asigna al token (60). El analizador lxico ignora los espacios en blanco que separan a los lexemas.

ANALISIS SINTACTICO
La segunda fase del compilador es el anlisis sintctico o parking. El parser (analizador sintctico) utiliza los primeros componentes de los tokens producidos por el analizador lxico para crear una representacin intermedia en forma de rbol que describa la estructura gramatical del flujo de tokens. Una representacin tpica es el rbol sintctico, en el cual cada nodo interior representa una operacin y los hijos del nodo representan los argumentos de la operacin. Ejemplo: posicin = inicial + velocidad * 60 El rbol tiene un nodo interior etiquetado como *, con (id, 3) como su hijo izquierdo, y el entero 60 como su hijo derecho. El nodo (id, 3) representa el identificador velocidad. El nodo etiquetado como * hace explicito que primero debemos multiplicar el valor de velocidad por 60. El nodo etiquetado como + indica que debemos sumar el resultado de esta multiplicacin al valor de inicial. La raz del rbol, que se etiqueta como =, indica que se debe almacenar el resultado de esta suma en la ubicacin para el identificador posicin. Este ordenamiento de operaciones es consistente con las convenciones usuales de la aritmtica, las cuales nos indican que la multiplicacin tiene mayor precedencia que la suma y, por ende, debe realizarse antes que la suma

ANALISIS SEMANTICO
El analizador semntico utiliza el rbol sintctico y la informacin en la tabla de smbolos para comprobar la consistencia semntica del programa fuente con la definicin del lenguaje. Tambin recopila informacin sobre el tipo y la guarda, ya sea en rbol sintctico o en la tabla de smbolos, para usarla mas tarde durante la generacin de cdigo intermedio. Una parte importante del anlisis semntico es la comprobacin (verificacin) de tipos, en donde el compilador verifica que cada operador tenga operandos que coincidan.

GENERACION DE CODIGO INTERMEDIO


En el proceso de traducir un programa fuente a cdigo destino, un compilador puede construir una o ms representaciones intermedias, las cuales pueden tener una variedad de formas. Los rboles sintcticos son una forma de representacin intermedia; por lo general, se utilizan durante el anlisis sintctico y semntico. Despus del anlisis sintctico y semntico del programa fuente, muchos compiladores generan un nivel bajo explicito, o una representacin intermedia similar al cdigo maquina, que se puede considerar como un programa para una maquina abstracta. Esta representacin intermedia debe tener dos propiedades importantes: - Debe ser fcil de producir, - Debe ser fcil de traducir en la maquina destino.

OPTIMIZACION DE CODIGO
La fase de optimizacin de cdigo independiente de la maquina trata de mejorar el cdigo intermedio, de manera que se produzca un mejor cdigo destino. Por lo general, mejor significa mas rpido, pero pueden lograrse otros objetivos, como un cdigo mas corto, o un cdigo de destino que consuma menos poder. Un algoritmo simple de generacin de cdigo intermedio, seguido de la optimizacin de cdigo, es una manera razonable de obtener un buen cdigo de destino. Hay una gran variacin en la cantidad de optimizacin de cdigo que realizan los distintos compiladores, En aquellos que realizan la mayor optimizacin, a los que se les denomina como compiladores optimizadores, se invierte mucho tiempo en esta fase. Hay optimizaciones simples que mejoran en forma considerable el tiempo de ejecucin del programa destino, sin reducir demasiado la velocidad de la compilacin.

GENERACION DE CODIGO OBJETO


El generador de cdigo recibe como entrada una representacin intermedia del programa fuente y la asigna al lenguaje destino. Si el lenguaje destino es cdigo maquina, se seleccionan registros o ubicaciones (localidades) de memoria para cada una de las variables que utiliza el programa. Despus, instrucciones intermedias se traducen en secuencias de instrucciones de maquina que realizan la misma tarea. Un aspecto crucial de la generacin de cdigo es la asignacin juiciosa de los para guardar las variables.

PREPROCESADORES
Un preprocesador es un programa separado que es invocado por el compilador antes de que comience la traduccin real. Un preprocesador de este tipo puede eliminar los comentarios, incluir otros archivos y ejecutar sustituciones de macros. Los preprocesadores pueden ser requeridos por el lenguaje (como en C) o pueden ser agregados posteriores que proporcionen facilidades adicionales (como el preprocesador Ratfor para FORTRAN). Los preprocesadores producen la entrada para un compilador, y pueden realizar las funciones siguientes: Procesamiento de macros. Un preprocesador puede permitir a un usuario definir macros, que son abreviaturas de construcciones ms grandes. Inclusin de archivos. Un preprocesador puede insertar archivos de encabezamiento en el texto del programa. Por ejemplo, el preprocesador de C hace que el contenido del archivo <global.h> reemplace a la proposicin #include <global.h> cuando procesa un archivo que contenga a esa proposicin. Preprocesadores "racionales". Estos preprocesadores enriquecen los lenguajes antiguos con recursos ms modernos de flujo de control y de estructuras de datos. Por ejemplo, un preprocesador de este tipo podra proporcionar al usuario macros incorporadas para construcciones, como proposiciones while o if, en un lenguaje de programacin que no las tenga. Extensiones a lenguajes. Estos preprocesadores tratan de crear posibilidades al lenguaje que equivalen a macros incorporadas. Por ejemplo, el lenguaje Equel es un lenguaje de consulta de base de datos integrado en C. El preprocesador considera las proposiciones que empiezan con ## como proposiciones de acceso a la base de datos, sin relacin con C, y se traducen a llamadas de procedimiento a rutinas que realizan el acceso a la base de datos. Los procesadores de macros tratan dos clases de proposiciones: definicin de macros y uso de macros. Las definiciones normalmente se indican con algn carcter exclusivo o palabra clave, como define o macro. Constan de un nombre para la macro que se est definiendo y de un cuerpo, que constituye su definicin. A menudo, los procesadores de macros admiten parmetros formales en su definicin, esto es, smbolos que se reemplazarn por valores (en este contexto, un "valor" es una cadena de caracteres). El uso de una macro consiste en dar nombre a la macro y proporcionar parmetros reales, es decir, valores para sus parmetros formales. El procesador de macros sustituye los parmetros reales por lo parmetros formales del cuerpo de la macro; despus, el cuerpo transformado reemplaza el uso de la propia macro.

REFERENCIAS
Aho Alfred V., Lam Monica S., Sethi Ravi, Ullman Jeffrey D. (2008). Compiladores principios, tcnicas y herramientas. En Pearson Addison Wesley (Segunda Edicin), 1.2 La estructura de un compilador (pp. 4 -11). Mxico: Pearson educacin de Mxico, S.A. de C.V. Snchez Elabra, (2006, 27 de Julio). Preprocesador. Extrado el 14 de Septiembre de 2009 desde http://es.wikipedia.org/wiki/Preprocesador

S-ar putea să vă placă și