You are on page 1of 12

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERIA ESCUELA DE CIENCIA Y SISTEMAS LENGUAJES FORMALES Y DE PROGRAMACIN SECCIN: ACATEDRTICA: INGA,

DAMARIS CAMPOS AUXILIAR: PABLO TUM

PARTES DE UN COMPILADOR
NOMBRE: SAMY JOSUE RUIZ MONZN CARN: 2007-14767

INDICE
No. Pagina Contenido

i ---------------------------------------- Introduccin ii ---------------------------------------- Objetivos 1-6 ------------------------------------- Contenido iii -------------------------------------- Conclusiones iv -------------------------------------- Bibliografa

Pg. i

INTRODUCCIN
uchos hemos pensado y nos ha llamado la atencin hacer algn programa, por eso estamos estudiando Ingeniera en sistemas, hasta el momento hemos hecho aplicaciones pequeas de escritorio, pero nos hemos centrado mas en el diseo y la lgica de los proyectos, no viendo mas all el proceso de compilacin del programa, solo vamos viendo si corre, corrigiendo errores y revisando si hace las funciones q queramos, sin darnos cuenta q la compilacin es un proceso muy importante, sin el cual las instrucciones q damos a los programas, no serian nada, en grandes rasgos, la compilacin es el proceso de traduccin del cdigo q nosotros escribimos, a un lengpg. 3uaje q es entendido por la maquina, un compilador esta formado por varias partes desde un nivel muy bajo hasta un nivel muy alto, entre estas partes encontramos: El analizador lxico, analizador sintctico, analizador semntico, generacin de cdigo intermedio, optimizacin de cdigo intermedio etc. En las primeras pocas de la informtica, el software de los compilador era considerado como uno de los mas complejos q poda existir, los primeros compiladores llevaron aos de estudio, y aos en poder crearlos, el proceso de creacin se hacia directamente en lenguajes maquina o en lenguaje ensamblador, haciendo muy difcil la programacin.

Pg. ii

OBJETIVOS
y y Conocer, analizar y entender las fases de un compilador. Conocer la importancia de un compilador en el proceso de creacin de aplicaciones. Conocer los diferentes tipos de compiladores que existen.

Pg. 1

Que es un Compilador?
Un compilador es un programa informtico el cual traduce un cdigo escrito en un lenguaje de programacin a otro lenguaje de programacin, dicho lenguaje ser entendido por la computadora, usualmente este lenguaje es lenguaje de maquina pero tambin puede ser un cdigo intermedio llamado bytecode. Una funcin importante del compilador es reportar cualquier error en el cdigo fuente que detecte durante el proceso de traduccin.
Cdigo fuente

Compilador

Mensaje de error

Cdigo destino

Un intrprete es otro tipo comn de procesador de lenguaje. Este en vez de producir un programa destino como una traduccin, nos da la apariencia de ejecutar directamente las operaciones especificadas en el lenguaje de origen con las entradas proporcionadas por el usuario. Cdigo fuente Entrada Intrprete Salida

Tipos de compiladores
Existen varios tipos de compiladores, entre ellos podemos mencionar: y y y y y Compilador de una sola pasada: el cual genera el cdigo maquina a partir de una nica lectura del cdigo fuente. Compilador de varias pasadas: el cual necesita varias lecturas del cdigo fuente para generar el cdigo maquina. Compilador JIT (just-in-time): forman parte de un intrprete y compilan partes del cdigo segn se valla necesitando. Compiladores cruzados: generan cdigo para un sistema distinto del que estn funcionando. Compiladores optimizadores: realizan cambios en el cdigo para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original.

Partes de un compilador
La construccin de un compilador involucra la divisin del proceso en una serie de fases, generalmente estas fases se agrupan en dos tipos de tareas: el anlisis del programa fuente y la sntesis del programa objeto.

Pg. 2

Anlisis: esta parte divide el programa fuente en componentes e impone una estructura gramatical sobre ellas. Si la parte de anlisis detecta que en el cdigo fuente esta mal formado en cuanto a sintaxis, o que no tiene una semntica consistente, entonces debe proporcionar mensajes informando al usuario para poder corregirlos, la parte de anlisis tambin recolecta informacin sobre el cdigo fuente y la almacena en una estructura de datos llamada tabla de smbolo. Sntesis: Su objetivo es la generacin de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generacin de Cdigo (normalmente se trata de cdigo intermedio o de cdigo objeto) y de Optimizacin de Cdigo (en las que se busca obtener un cdigo lo ms eficiente posible). Alternativamente, las fases descritas para las tareas de anlisis y sntesis se pueden agrupar en Front-end y Back-end:
y

Front-end: es la parte que analiza el cdigo fuente, comprueba su validez, genera el rbol de derivacin y rellena los valores de la tabla de smbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar, y est compuesta por las fases comprendidas entre el Anlisis Lxico y la Generacin de Cdigo Intermedio. Back-end: es la parte que genera el cdigo mquina, especfico de una plataforma, a partir de los resultados de la fase de anlisis, realizada por el Front End.

Proceso de compilacin
Es el proceso por el cual se traducen las instrucciones escritas en un determinado lenguaje de programacin a lenguaje mquina. Adems de un traductor, se pueden necesitar otros programas para crear un programa objeto ejecutable. Un programa fuente se puede dividir en mdulos almacenados en archivos distintos. La tarea de reunir el programa fuente a menudo se confa a un programa distinto, llamado preprocesador.

Pg. 3

El preprocesador tambin puede expandir abreviaturas, llamadas a macros, a proposiciones del lenguaje fuente.

Etapas del proceso


El proceso de traduccin se compone internamente de varias etapas o fases, que realizan distintas operaciones lgicas. Es til pensar en estas fases como en piezas separadas dentro del traductor, y pueden en realidad escribirse como operaciones codificadas separadamente aunque en la prctica a menudo se integren juntas.

Anlisis lxico
A la primera fase del compilador se le llama anlisis lxico o escaneo. 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 token de la forma: (nombre-token, valor-atributo) Que pasa a la fase siguiente, el anlisis de la sintaxis. En e 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.

Anlisis sintctico
En esta fase los caracteres o componentes lxicos se agrupan jerrquicamente en frases gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si lo obtenido de la fase anterior es sintcticamente correcto (obedece a la gramtica del lenguaje). Por lo general, las frases gramaticales del programa fuente se representan mediante un rbol de anlisis sintctico. La estructura jerrquica de un programa normalmente se expresa utilizando reglas recursivas. Por ejemplo, se pueden dar las siguientes reglas como parte de la definicin de expresiones: 1. Cualquier identificador es una expresin. 2. Cualquier nmero es una expresin. 3. Si expresin1 y expresin2 son expresiones, entonces tambin lo son: o expresin1 + expresin2 o expresin1 * expresin2

Pg. 4 o

( expresin1 )

Las reglas 1 y 2 son reglas bsicas (no recursivas), en tanto que la regla 3 define expresiones en funcin de operadores aplicados a otras expresiones. La divisin entre anlisis lxico y anlisis sintctico es algo arbitraria. Un factor para determinar la divisin es si una construccin del lenguaje fuente es inherentemente recursiva o no. Las construcciones lxicas no requieren recursin, mientras que las construcciones sintcticas suelen requerirla. No se requiere recursin para reconocer los identificadores, que suelen ser cadenas de letras y dgitos que comienzan con una letra. Normalmente, se reconocen los identificadores por el simple examen del flujo de entrada, esperando hasta encontrar un carcter que no sea ni letra ni dgito, y agrupando despus todas las letras y dgitos encontrados hasta ese punto en un componente lxico llamado identificador. Por otra parte, esta clase de anlisis no es suficientemente poderoso para analizar expresiones o proposiciones. Por ejemplo, no podemos emparejar de manera apropiada los parntesis de las expresiones, o las palabras begin y end en proposiciones sin imponer alguna clase de estructura jerrquica o de anidamiento a la entrada.

Anlisis semntico
La fase de anlisis semntico revisa el programa fuente para tratar de encontrar errores semnticos y rene la informacin sobre los tipos para la fase posterior de generacin de cdigo. En ella se utiliza la estructura jerrquica determinada por la fase de anlisis sintctico para identificar los operadores y operandos de expresiones y proposiciones. Un componente importante del anlisis semntico es la verificacin de tipos. Aqu, el compilador verifica si cada operador tiene operandos permitidos por la especificacin del lenguaje fuente. Por ejemplo, las definiciones de muchos lenguajes de programacin requieren que el compilador indique un error cada vez que se use un nmero real como ndice de una matriz. Sin embargo, la especificacin del lenguaje puede imponer restricciones a los operandos, por ejemplo, cuando un operador aritmtico binario se aplica a un nmero entero y a un nmero real. Revisa que los arreglos tengan definido el tamao correcto.

Generacin de cdigo intermedio


Despus de los anlisis sintctico y semntico, algunos compiladores generan una representacin intermedia explcita del programa fuente. Se puede considerar esta representacin intermedia como un programa para una mquina abstracta. Esta representacin intermedia debe tener dos propiedades importantes; debe ser fcil de producir y fcil de traducir al programa objeto.

Pg. 5

La representacin intermedia puede tener diversas formas. Existe una forma intermedia llamada cdigo de tres direcciones que es como el lenguaje ensamblador de 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, cada una de las cuales tiene como mximo tres operandos. Esta representacin intermedia tiene varias propiedades:
y

y y

Primera.- Cada instruccin de tres direcciones tiene a lo sumo un operador, adems de la asignacin, por tanto, cuando se generan estas instrucciones, el traductor tiene que decidir el orden en que deben efectuarse las operaciones. Segunda.- El traductor debe generar un nombre temporal para guardar los valores calculados por cada instruccin. Tercera.- Algunas instrucciones de tres direcciones tienen menos de tres operandos, por ejemplo, la asignacin.

Optimizacin de cdigo
La fase de optimizacin de cdigo consiste en mejorar el cdigo intermedio, de modo que resulte un cdigo mquina ms rpido de ejecutar. Esta fase de la etapa de sntesis es posible sobre todo si el traductor es un compilador (difcilmente un interprete puede optimizar el cdigo objeto). Hay mucha variacin en la cantidad de optimizacin de cdigo que ejecutan los distintos compiladores. En los que hacen mucha optimizacin, llamados compiladores optimizadores, una parte significativa del tiempo del compilador se ocupa en esta fase. Sin embargo, hay optimizaciones sencillas que mejoran sensiblemente el tiempo de ejecucin del programa objeto sin retardar demasiado la compilacin.

Componentes lxicos o tokens


Cuando un analizador lxico rene los caracteres en un token, generalmente representa el token de manera simblica, es decir, como un valor de un tipo de datos enumerado que representa el conjunto de tokens del lenguaje fuente. En ocasiones tambin es necesario mantener la cadena de caracteres misma u otra informacin derivada de ella, tal como el nombre asociado con un token identificador o el valor de un token de nmero. En la mayora de los lenguajes el analizador lxico slo necesita generar un token a la vez. En este caso se puede utilizar una variable global simple para mantener la informacin del token. En otros casos (cuyo ejemplo ms notable es FORTRAN), puede ser necesario un arreglo (o vector) de tokens.

Pg. 6

Generacin de cdigo objeto


La fase final de un compilador es la generacin de cdigo objeto, que por lo general consiste en cdigo de mquina relocalizable o cdigo ensamblador. Las posiciones de memoria se seleccionan para cada una de las variables usadas por el programa. Despus cada una de las instrucciones intermedias se traducen a una secuencia de instrucciones mquina que ejecuta la misma tarea. Un aspecto decisivo es la asignacin de variables a registros.

Tabla de smbolos
Esta estructura de datos mantiene la informacin asociada con los identificadores: funciones, variables, constantes y tipos de datos. La tabla de smbolos interacta con casi todas las fases del compilador: el analizador lxico, el analizador sintctico o el analizador semntico pueden introducir identificadores dentro de la tabla; el analizador semntico agregar tipos de datos y otra informacin; y las fases de optimizacin y generacin de cdigo utilizarn la informacin proporcionada por la tabla de smbolos para efectuar selecciones apropiadas de cdigo objeto. Puesto que la tabla de smbolos tendr solicitudes de acceso con tanta frecuencia, las operaciones de insercin, eliminacin y acceso necesitan ser eficientes, preferiblemente operaciones de tiempo constante. Una estructura de datos estndar para este propsito es la tabla de dispersin o de clculo de direccin, aunque tambin se pueden utilizar diversas estructuras de rbol. En ocasiones se utilizan varias tablas y se mantienen en una lista o pila.

Pg. iii

CONCLUSIONES
El compilador es la principal herramienta para un programador, ya que este facilita la programacin de sistemas de manera mucho ms sencilla que hacerlo con un ensamblador o ms difcil aun tratar de programar en el lenguaje mquina.

Pg. iv

BIBLIOGRAFIA
y Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman; Compiladores, principios, tcnicas y herramientas; Segunda edicin www.wikipedia.com

You might also like