1.3. Fases de un Compilador y sus Fundamentos Teóricos

Conceptualmente, un compilador opera en fases, cada una de las cuales transforma al programa fuente de una representación en otra. En La figura 1.9 se muestra una descomposición típica de un compilador. En la práctica, se pueden agrupar algunas fases y las representaciones intermedias entre las fases agrupadas no necesitan ser construidas explícitamente.

 

Figura 1.9 Fases de un compilador

Las tres primeras fases, que forman la mayor parte de la porción del análisis de un compilador, se introdujeron en la sección anterior. Otras dos actividades, la administración de la tabla de símbolos y el manejo de errores, se muestran en interacción con las seis fases de análisis léxico, análisis sintáctico, análisis semántico, generación de código intermedio, optimación de código y generación de código. De modo informal, también se llamarán ‘fases” al administrador de la tabla de símbolos y al manejador de errores.

A primera vista, la diversidad de compiladores puede parecer abrumadora. Hay miles de lenguajes fuente, desde los lenguajes de programación tradicionales, como FORTRAN o Pascal, hasta los lenguajes especializados que han surgido virtualmente en todas ias áreas de aplicación de la informática. Los lenguajes objeto son igualmente variados; un lenguaje objeto puede ser otro lenguaje de programación o el lenguaje de máquina de cualquier computador entre un microproccsador y un supercomputador.

Los compiladores a menudo se clasifican como de una pasada, de múltiples pasadas, de carga y ejecución, de depuracion o de optimación, dependiendo de cómo hayan sido construidos o de que función se supone que realizan. A pesar de esta aparente complejidad, las tareas básicas que debe realizar cualquier compilador son esencialmente las mismas.

Al comprender tales tareas, se pueden construir compiladores para una gran diversidad de lenguajes fuente y máquinas objeto utilizando las mismas técnicas básicas,

 Nuestro conocimiento sobre cómo organizar y escribir compiladores ha aumentado mucho desde que comenzaron a aparecer los primeros compiladores a principios de los años cincuenta. Es dificil dar una fecha exacta de la aparición del primer compilador, porque en un principio gran parte del trabajo de experimentación y aplicación se realizó de manera independiente por varios grupos. Gran parte de los primeros trabajos de compilación estaba relacionada con la traducción de formulas aritméticas a código de máquina.

En la década de 1950, se consideró a los compiladores como programas notablemente dificiles de escribir. El primer compilador de FORTRAN, por ejemplo, necesitó para su implantación 18 años de trabajo en grupo (Backus y otros [1975]). Desde entonces, se han descubierto técnicas sistemáticas para manejar muchas de las importantes tareas que surgen en la compilación. También se han desarrollado buenos lenguajes de implantación, entornos de programación y herramientas de software. Con estos avances, puede hacerse un compilador real incluso como proyecto de estudio en un curso de un semestre sobre diseño de compiladores.