Documentos de Académico
Documentos de Profesional
Documentos de Cultura
WORK PAPER #3
COMPILADOR
PARTES DE UN COMPILADOR
La construccin de un compilador involucra la divisin del proceso en una serie de fases que
variar con su complejidad. Generalmente estas fases se agrupan en dos tareas: el anlisis del
programa fuente y la sntesis del programa objeto.
Anlisis: Se trata de la comprobacin de la correccin del programa fuente, e incluye las fases
correspondientes al Anlisis lxico (que consiste en la descomposicin del programa fuente
en componentes lxicos), Anlisis sintctico (agrupacin de los componentes lxicos en
frases gramaticales) y Anlisis semntico (comprobacin de la validez semntica de las
sentencias aceptadas en la fase de Anlisis sintctico).
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).
HISTORIA
En 1946 se desarroll la primera computadora digital. En un principio, estas mquinas ejecutaban
instrucciones consistentes en cdigos numricos que sealaban a los circuitos de la mquina los
estados correspondientes a cada operacin, lo que se denomin lenguaje mquina.
Pronto los primeros usuarios de estos ordenadores descubrieron la ventaja de escribir sus
programas mediante claves ms fciles de recordar que esos cdigos; al final, todas esas claves
juntas se traducan manualmente a lenguaje mquina. Estas claves constituyen los llamados
lenguajes ensambladores.
Pese a todo, el lenguaje ensamblador segua siendo el de una mquina, pero ms fcil de
manejar. Los trabajos de investigacin se orientaron hacia la creacin de un lenguaje que
expresara las distintas acciones a realizar de una manera lo ms sencilla posible para una
persona. El primer compilador fue escrito por Grace Hopper, en 1952 para el lenguaje de
programacin A-0. En 1950 John Backus dirigi una investigacin en IBM sobre un lenguaje
algebraico. En 1954 se empez a desarrollar un lenguaje que permita escribir frmulas
matemticas de manera traducible por un ordenador; le llamaron FORTRAN (FORmulae
TRANslator). Fue el primer lenguaje de alto nivel y se introdujo en 1957 para el uso de la
computadora IBM modelo 704.
Surgi as por primera vez el concepto de un traductor como un programa que traduca un
lenguaje a otro lenguaje. En el caso particular de que el lenguaje a traducir es un lenguaje de alto
nivel y el lenguaje traducido de bajo nivel, se emplea el trmino compilador.
La tarea de realizar un compilador no fue fcil. El primer compilador de FORTRAN tard 18 aos-
persona en realizarse y era muy sencillo. Este desarrollo de FORTRAN estaba muy influenciado
por la mquina objeto en la que iba a ser implementado. Como un ejemplo de ello tenemos el
hecho de que los espacios en blanco fuesen ignorados, debido a que el perifrico que se utilizaba
como entrada de programas (una lectora de tarjetas perforadas) no contaba correctamente los
espacios en blanco.
El primer compilador autocontenido, es decir, capaz de compilar su propio cdigo fuente fue el
creado para Lisp por Hart y Levin en el MIT en 1962. Desde 1970 se ha convertido en una prctica
comn escribir el compilador en el mismo lenguaje que este compila, aunque Pascal y C han sido
alternativas muy usadas.
Crear un compilador autocontenido genera un problema llamado bootstrapping, es decir el primer
compilador creado para un lenguaje tiene que o bien ser compilado por un compilador escrito en
otro lenguaje o bien compilado al ejecutar el compilador en un intrprete.
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. El preprocesador tambin puede expandir
abreviaturas, llamadas a macros, a proposiciones del lenguaje fuente.
Normalmente la creacin de un programa ejecutable (un tpico.exe para Microsoft Windows o
DOS) conlleva dos pasos. El primer paso se llama compilacin (propiamente dicho) y traduce el
cdigo fuente escrito en un lenguaje de programacin almacenado en un archivo a cdigo en bajo
nivel (normalmente en cdigo objeto, no directamente a lenguaje mquina). El segundo paso se
llama enlazado en el cual se enlaza el cdigo de bajo nivel generado de todos los ficheros y
subprogramas que se han mandado compilar y se aade el cdigo de las funciones que hay en
las bibliotecas del compilador para que el ejecutable pueda comunicarse directamente con el
sistema operativo, traduciendo as finalmente el cdigo objeto a cdigo mquina, y generando un
mdulo ejecutable.
Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de
compilacin en archivos objetos (un tpico.obj para Microsoft Windows, DOS o para Unix); para
enlazarlos en fases posteriores, o crear directamente el ejecutable; con lo que la fase de
compilacin se almacena slo temporalmente. Un programa podra tener partes escritas en varios
lenguajes (por ejemplo C, C++ y Asm), que se podran compilar de forma independiente y luego
enlazar juntas para formar un nico mdulo ejecutable.
CUESTIONARIO
1. Qu es un compilador?
2. Qu realiza el compilador en la fase de anlisis?
3. Qu realiza el compilador en la fase de sntesis?
4. Resuma la historia de los compiladores.
5. A qu se refiere el trmino preprocesador? Cmo es el proceso de compilacin?
6. Qu es el anlisis lxico?
7. Qu es el anlisis sintctico?
8. Qu es el anlisis semntico?
9. Qu es la generacin de cdigo intermedio?
10. Qu es la optimizacin de cdigo?