Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ir a la navegaci�nIr a la b�squeda
Commons-emblem-question book orange.svg
Este art�culo o secci�n necesita referencias que aparezcan en una publicaci�n
acreditada.
Este aviso fue puesto el 22 de diciembre de 2017.
�Compilaci�n� redirige aqu�. Para otras acepciones, v�ase recopilaci�n.
�ndice
1 Historia
2 Tipos de compiladores
3 Proceso de compilaci�n
4 Etapas del proceso
4.1 Fase de an�lisis
4.1.1 An�lisis l�xico
4.1.2 An�lisis sint�ctico
4.1.3 An�lisis sem�ntico
4.2 Fase de s�ntesis
4.2.1 Generaci�n de c�digo intermedio
4.3 Optimizaci�n de c�digo
5 Estructura de datos principales
5.1 Componentes l�xicos o t�kenes
5.2 �rbol sint�ctico
5.3 Tabla de s�mbolos
5.4 Tabla de literales
5.5 C�digo intermedio
5.6 Archivos temporales
6 V�ase tambi�n
7 Referencias
8 Enlaces externos
Historia
Art�culo principal: Historia de la construcci�n de los compiladores
En 1946 se desarroll� la primera computadora digital. En un principio, estas
m�quinas ejecutaban instrucciones consistentes en c�digos num�ricos que se�alaban a
los circuitos de la m�quina los estados correspondientes a cada operaci�n, lo que
se denomin� lenguaje m�quina.
Pese a todo, el lenguaje ensamblador segu�a siendo el de una m�quina, pero m�s
f�cil de manejar. Los trabajos de investigaci�n se orientaron hacia la creaci�n de
un lenguaje que expresara las distintas acciones a realizar de una manera lo m�s
sencilla posible para una persona. El primer compilador fue escrito por Grace
Hopper, en 1952 para el lenguaje de programaci�n A-0. En 1950 John Backus dirigi�
una investigaci�n en IBM sobre un lenguaje algebraico. En 1954 se empez� a
desarrollar un lenguaje que permit�a escribir f�rmulas matem�ticas 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
traduc�a 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 t�rmino compilador.
Tipos de compiladores
Esta taxonom�a de los tipos de compiladores no es excluyente, por lo que puede
haber compiladores que se adscriban a varias categor�as:
Compiladores cruzados: generan c�digo para un sistema distinto del que est�n
funcionando.
Compiladores optimizadores: realizan cambios en el c�digo para mejorar su
eficiencia, pero manteniendo la funcionalidad del programa original.
Compiladores de una sola pasada: generan el c�digo m�quina a partir de una �nica
lectura del c�digo fuente.
Compiladores de varias pasadas: necesitan leer el c�digo fuente varias veces antes
de poder producir el c�digo m�quina.
Compiladores JIT (just in time): forman parte de un int�rprete y compilan partes
del c�digo seg�n se necesitan.
En las primeras �pocas de la inform�tica, los compiladores eran considerados un
software de los m�s complejos existentes.
Proceso de compilaci�n
Es el proceso por el cual se traducen las instrucciones escritas en un determinado
lenguaje de programaci�n a lenguaje m�quina. Adem�s de un traductor, se pueden
necesitar otros programas para crear un programa objeto ejecutable. Un programa
fuente se puede dividir en m�dulos almacenados en archivos distintos. La tarea de
reunir el programa fuente a menudo se conf�a a un programa distinto, llamado
preprocesador. El preprocesador tambi�n puede expandir abreviaturas, llamadas a
macros, a proposiciones del lenguaje fuente.
Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase
de compilaci�n en archivos objetos (un t�pico.obj para Microsoft Windows, DOS o
para Unix); para enlazarlos en fases posteriores, o crear directamente el
ejecutable; con lo que la fase de compilaci�n se almacena solo temporalmente. Un
programa podr�a tener partes escritas en varios lenguajes (por ejemplo C, C++ y
Asm), que se podr�an compilar de forma independiente y luego enlazar juntas para
formar un �nico m�dulo ejecutable.
Etapas del proceso
El proceso de traducci�n se compone internamente de varias etapas o fases, que
realizan distintas operaciones l�gicas. 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 pr�ctica a menudo se integren
juntas.
Fase de an�lisis
An�lisis l�xico
Art�culo principal: Analizador l�xico
El an�lisis l�xico constituye la primera fase, aqu� se lee el programa fuente de
izquierda a derecha y se agrupa en componentes l�xicos (t�kenes), que son
secuencias de caracteres que tienen un significado. Adem�s, todos los espacios en
blanco, l�neas en blanco, comentarios y dem�s informaci�n innecesaria se elimina
del programa fuente. Tambi�n se comprueba que los s�mbolos del lenguaje (palabras
clave, operadores, etc.) se han escrito correctamente.
An�lisis sint�ctico
Art�culo principal: Analizador sint�ctico
En esta fase los caracteres o componentes l�xicos se agrupan jer�rquicamente en
frases gramaticales que el compilador utiliza para sintetizar la salida. Se
comprueba si lo obtenido de la fase anterior es sint�cticamente correcto (obedece a
la gram�tica del lenguaje). Por lo general, las frases gramaticales del programa
fuente se representan mediante un �rbol de an�lisis sint�ctico.
An�lisis sem�ntico
La fase de an�lisis sem�ntico revisa el programa fuente para tratar de encontrar
errores sem�nticos y re�ne la informaci�n sobre los tipos para la fase posterior de
generaci�n de c�digo. En ella se utiliza la estructura jer�rquica determinada por
la fase de an�lisis sint�ctico para identificar los operadores y operandos de
expresiones y proposiciones.
Fase de s�ntesis
Consiste en generar el c�digo objeto equivalente al programa fuente. Solo se genera
c�digo objeto cuando el programa fuente est� libre de errores de an�lisis, lo cual
no quiere decir que el programa se ejecute correctamente, ya que un programa puede
tener errores de concepto o expresiones mal calculadas. Por lo general el c�digo
objeto es c�digo de m�quina relocalizable o c�digo ensamblador. Las posiciones de
memoria se seleccionan para cada una de las variables usadas por el programa.
Despu�s, cada una de las instrucciones intermedias se traduce a una secuencia de
instrucciones de m�quina que ejecuta la misma tarea. Un aspecto decisivo es la
asignaci�n de variables a registros.
�rbol sint�ctico
Si el analizador sint�ctico genera un �rbol sint�ctico, por lo regular se construye
como una estructura est�ndar basada en un puntero que se asigna de manera din�mica
a medida que se efect�a el an�lisis sint�ctico. El �rbol entero puede entonces
conservarse como una variable simple que apunta al nodo ra�z. Cada nodo en la
estructura es un registro cuyos campos representan la informaci�n recolectada tanto
por el analizador sint�ctico como, posteriormente, por el analizador sem�ntico. Por
ejemplo, el tipo de datos de una expresi�n puede conservarse como un campo en el
nodo del �rbol sint�ctico para la expresi�n.
Tabla de s�mbolos
Esta estructura de datos mantiene la informaci�n asociada con los identificadores:
funciones, variables, constantes y tipos de datos. La tabla de s�mbolos interact�a
con casi todas las fases del compilador: el analizador l�xico, el analizador
sint�ctico o el analizador sem�ntico pueden introducir identificadores dentro de la
tabla; el analizador sem�ntico agregar� tipos de datos y otra informaci�n; y las
fases de optimizaci�n y generaci�n de c�digo utilizar�n la informaci�n
proporcionada por la tabla de s�mbolos para efectuar selecciones apropiadas de
c�digo objeto.
Puesto que la tabla de s�mbolos tendr� solicitudes de acceso con tanta frecuencia,
las operaciones de inserci�n, eliminaci�n y acceso necesitan ser eficientes,
preferiblemente operaciones de tiempo constante. Una estructura de datos est�ndar
para este prop�sito es la tabla de dispersi�n o de c�lculo de direcci�n, aunque
tambi�n se pueden utilizar diversas estructuras de �rbol. En ocasiones se utilizan
varias tablas y se mantienen en una lista o pila.
Tabla de literales
La b�squeda y la inserci�n r�pida son esenciales tambi�n para la tabla de
literales, la cual almacena constantes y cadenas utilizadas en el programa. Sin
embargo, una tabla de literales necesita impedir las eliminaciones porque sus datos
se aplican globalmente al programa y una constante o cadena aparecer� solo una vez
en esta tabla. La tabla de literales es importante en la reducci�n del tama�o de un
programa en la memoria al permitir la reutilizaci�n de constantes y cadenas.
Tambi�n es necesaria para que el generador de c�digo construya direcciones
simb�licas para las literales y para introducir definiciones de datos en el archivo
de c�digo objeto.
C�digo intermedio
De acuerdo con la clase de c�digo intermedio (por ejemplo, c�digo de tres
direcciones o c�digo P) y de las clases de optimizaciones realizadas, este c�digo
puede conservarse como un arreglo de cadenas de texto, un archivo de texto temporal
o bien una lista de estructuras ligadas. En los compiladores que realizan
optimizaciones complejas debe ponerse particular atenci�n a la selecci�n de
representaciones que permitan una f�cil reorganizaci�n.
temp1 := entreal(60)
temp2 := id3 * temp1 ===> (2)
temp3 := id2 + temp2
id1 := temp3
Esta representaci�n intermedia tiene varias propiedades. Primera, cada instrucci�n
de tres direcciones tiene a lo sumo un operador, adem�s de la asignaci�n. Por
tanto, cuando se generan esas instrucciones el compilador tiene que decidir el
orden en que deben efectuarse, las operaciones; la multiplicaci�n precede a la
adici�n al programa fuente de. Segunda, el compilador debe generar un nombre
temporal para guardar los valores calculados por cada instrucci�n. Tercera, algunas
instrucciones de �tres direcciones� tienen menos de tres operadores, por ejemplo la
primera y la �ltima instrucciones de asignaci�n.
Optimizaci�n de C�digo
La fase de optimizaci�n de c�digo trata de mejorar el c�digo intermedio de modo que
resulte un c�digo de m�quina m�s r�pido de ejecutar. Algunas optimizaciones son
triviales. Por ejemplo, un algoritmo natural genera el c�digo intermedio (2)
utilizando una instrucci�n para cada operador de la representaci�n del �rbol
despu�s del an�lisis sem�ntico, aunque hay una forma mejor de realizar los mismos
c�lculos usando las dos instrucciones
Archivos temporales
Al principio las computadoras no ten�an la suficiente memoria para guardar un
programa completo durante la compilaci�n. Este problema se resolvi� mediante el uso
de archivos temporales para mantener los productos de los pasos intermedios durante
la traducci�n o bien al compilar �al vuelo�, es decir, manteniendo solo la
informaci�n suficiente de las partes anteriores del programa fuente que permita
proceder a la traducci�n.
V�ase tambi�n
BlueJ
Lenguaje de programaci�n
Proceso de traducci�n de programas
Lenguaje ensamblador
Ensamblador
Desensamblador
Decompilador
Int�rprete
Depurador
Lenguaje de alto nivel
Lenguaje de bajo nivel
Lenguaje de m�quina
Historia de la construcci�n de los compiladores
Libros Principles of Compiler Design, Compilers: Principles, Techniques, and Tools
Referencias
Clocksin, William (1997). Clause and effect. Springer-Verlag. p. 93. ISBN 978-3-
540-62971-9.
Laborda, Javier; Josep Galimany, Rosa Mar�a Pena, Antoni Gual (1985). �Software�.
Biblioteca pr�ctica de la computaci�n. Barcelona: Ediciones Oc�ano-�xito, S.A.
Aho, Alfred V.; Ravi Sethi, Jeffrey D. Ullman (2008). �Introducci�n a la
Compilaci�n�. Compiladores: Principios, t�cnicas y pr�cticas. M�xico: Addison
Wesley.
Enlaces externos
Wikcionario tiene definiciones y otra informaci�n sobre compilador.
Let's Build a Compiler. Tutorial de Jack W. Crenshaw sobre c�mo hacer un compilador
Java a tope: Traductores y Compiladores con Lex/Yacc, JFlex/Cup y JavaCC. Libro
b�sico sobre compiladores
Categor�as: CompiladoresProgramas de c�digo objeto