Professional Documents
Culture Documents
La etapa inicial comprende aquellas fases, o partes de fases, que dependen principalmente del
lenguaje fuente y que son en gran parte independientes de la maquina objeto. Ahí normalmente
se incluyen los análisis léxico y sintáctico, la creación de la tabla de símbolos, el análisis semántico
y la generación de código intermedio. La etapa inicial también puede hacer cierta optimación de
código. La etapa inicial incluye, además, el manejo de errores correspondientes a cada una de las
fases.
2) LA ETAPA FINAL
La etapa final incluye aquellas partes del compilador que dependen de la maquina objeto y, en
general, esas partes no dependen del lenguaje fuente, sino solo del lenguaje intermedio. En la
etapa final, se encuentran aspectos de la fase de optimización de código, además de la generación
de código, junto con el manejo de errores necesario y las operaciones con la tabla de símbolos.
CLASIFICACIONES DE UN COMPILADOR
UNA SOLA PASADA: examina el código fuente una vez, generando el código o programa
objeto.
COMPILADOR CRUZADO: se genera código en lenguaje objeto para una máquina diferente
de la que se está utilizando para compilar. Es perfectamente normal construir un
compilador de Pascal que genere código para MS-DOS y que el compilador funcione en
Linux y se haya escrito en C++.
COMPILADOR JIT (Just In Time): forman parte de un intérprete y compilan partes del
código según se necesitan.
PARTES DE UN COMPILADOR
Normalmente los compiladores están divididos en dos partes:
a) Front End: es la parte que analiza el código fuente, comprueba su validez, genera el árbol
de derivación y rellena los valores de la tabla de símbolos. Esta parte suele ser
independiente de la plataforma o sistema para el cual se vaya a compilar.
b) Back End: es la parte que genera el código máquina, específico de una plataforma, a partir
de los resultados de la fase de análisis, realizada por el Front End.
Esta división permite que el mismo Back End se utilice para generar el código máquina de varios
lenguajes de programación distintos y que el mismo Front End que sirve para analizar el código
fuente de un lenguaje de programación concreto sirva para generar código máquina en varias
plataformas distintas.
El código que genera el Back End normalmente no se puede ejecutar directamente, sino que
necesita ser enlazado por un programa enlazador (linker).