Академический Документы
Профессиональный Документы
Культура Документы
�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[editar]
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[editar]
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[editar]
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.
Fase de an�lisis[editar]
An�lisis l�xico[editar]
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[editar]
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[editar]
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.
Un componente importante del an�lisis sem�ntico es la verificaci�n de tipos. Aqu�,
el compilador verifica si cada operador tiene operandos permitidos por la
especificaci�n del lenguaje fuente. Por ejemplo, las definiciones de muchos
lenguajes de programaci�n requieren que el compilador indique un error cada vez que
se use un n�mero real como �ndice de una matriz. Sin embargo, la especificaci�n del
lenguaje puede imponer restricciones a los operandos, por ejemplo, cuando un
operador aritm�tico binario se aplica a un n�mero entero y a un n�mero real.3?
Revisa que los arreglos tengan definido el tama�o correcto.
Fase de s�ntesis[editar]
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[editar]
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[editar]
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[editar]
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[editar]
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[editar]
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.