You are on page 1of 4

Fases de un compilador:

Un compilador est formado por dos procesos anlisis y sntesis.


1. Anlisis: El cual se trata de la escritura correcta del cdigo fuente. Esta a
su vez comprende varias fases:

Anlisis lxico: esta fase es la encargada de leer el cdigo fuente y


separarlo en lotes para poder ser ledo por el anlisis sintctico.
Anlisis sintctico: esta fase evala los lotes de cdigo con el fin de que
este cumpla con los requerimientos definidos por el compilador.
Anlisis semntico: en esta fase se busca establecer que el cdigo
fuente cumpla con la semntica solicitada por el compilador, es decir
que el cdigo este correctamente escrito para poder ser interpretado.

2. Sntesis: Despus del proceso de anlisis se procede a generar grupos de


los componentes que conforman el programa, para generar una salida.

Generacin de cdigo intermedio: este cdigo se genera con el fin de


mejorar el uso de la memoria con el fin de optimizar cdigo fuente.
Optimizacin de cdigo: el objeto de esta fase es mejorar el cdigo para
que sea ms rpido ejecutarlo.
Generacin de cdigo: Aqu se crea el cdigo final de salida que va a ser
interpretado por la mquina.

Etapas del proceso


El proceso de traduccin se compone internamente de varias etapas o fases,
que realizan distintas operaciones lgicas. 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 prctica a menudo se
integren juntas.

Fase de anlisis
Anlisis lxico
El anlisis lxico constituye la primera fase, aqu se lee el programa fuente de
izquierda a derecha y se agrupa en componentes lxicos (tokens), que son
secuencias de caracteres que tienen un significado. Adems, todos los espacios
en blanco, lneas en blanco, comentarios y dems informacin innecesaria se
elimina del programa fuente. Tambin se comprueba que los smbolos del
lenguaje (palabras clave, operadores, etc.) se han escrito correctamente.

Como la tarea que realiza el analizador lxico es un caso especial de


coincidencia de patrones, se necesitan los mtodos de especificacin y
reconocimiento de patrones, se usan principalmente los autmatas finitos que
acepten expresiones regulares. Sin embargo, un analizador lxico tambin es la
parte del traductor que maneja la entrada del cdigo fuente, y puesto que esta
entrada a menudo involucra un importante gasto de tiempo, el analizador
lxico debe funcionar de manera tan eficiente como sea posible.
Anlisis sintctico
En esta fase los caracteres o componentes lxicos se agrupan jerrquicamente
en frases gramaticales que el compilador utiliza para sintetizar la salida. Se
comprueba si lo obtenido de la fase anterior es sintcticamente correcto
(obedece a la gramtica del lenguaje). Por lo general, las frases gramaticales
del programa fuente se representan mediante un rbol de anlisis sintctico.
La estructura jerrquica de un programa normalmente se expresa utilizando
reglas recursivas. Por ejemplo, se pueden dar las siguientes reglas como parte
de la definicin de expresiones:
1. Cualquier identificador es una expresin.
2. Cualquier nmero es una expresin.
3. Si expresin1 y expresin2 son expresiones, entonces tambin lo son:
Expresin1 + Expresin2
Expresin1 * Expresin2
(Expresin1 )
Las reglas 1 y 2 son reglas bsicas (no recursivas), en tanto que la regla 3
define expresiones en funcin de operadores aplicados a otras expresiones.
La divisin entre anlisis lxico y anlisis sintctico es algo arbitraria. Un factor
para determinar la divisin es si una construccin del lenguaje fuente es
inherentemente recursiva o no. Las construcciones lxicas no requieren
recursin, mientras que las construcciones sintcticas suelen requerirla. No se
requiere recursin para reconocer los identificadores, que suelen ser cadenas
de letras y dgitos que comienzan con una letra. Normalmente, se reconocen
los identificadores por el simple examen del flujo de entrada, esperando hasta
encontrar un carcter que no sea ni letra ni dgito, y agrupando despus todas
las letras y dgitos encontrados hasta ese punto en un componente lxico
llamado identificador. Por otra parte, esta clase de anlisis no es
suficientemente poderoso para analizar expresiones o proposiciones. Por
ejemplo, no podemos emparejar de manera apropiada los parntesis de las
expresiones, o las palabras begin y end en proposiciones sin imponer alguna
clase de estructura jerrquica o de anidamiento a la entrada.
Anlisis semntico
La fase de anlisis semntico revisa el programa fuente para tratar de
encontrar errores semnticos y rene la informacin sobre los tipos para la fase
posterior de generacin de cdigo. En ella se utiliza la estructura jerrquica

determinada por la fase de anlisis sintctico para identificar los operadores y


operandos de expresiones y proposiciones.
Un componente importante del anlisis semntico es la verificacin de tipos.
Aqu, el compilador verifica si cada operador tiene operandos permitidos por la
especificacin del lenguaje fuente. Por ejemplo, las definiciones de muchos
lenguajes de programacin requieren que el compilador indique un error cada
vez que se use un nmero real como ndice de una matriz. Sin embargo, la
especificacin del lenguaje puede imponer restricciones a los operandos, por
ejemplo, cuando un operador aritmtico binario se aplica a un nmero entero y
a un nmero real.2 Revisa que los arreglos tengan definido el tamao correcto.
Fase de sntesis
Consiste en generar el cdigo objeto equivalente al programa fuente. Slo se
genera cdigo objeto cuando el programa fuente est libre de errores de
anlisis, 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 cdigo objeto es cdigo de mquina relocalizable o
cdigo ensamblador. Las posiciones de memoria se seleccionan para cada una
de las variables usadas por el programa. Despus, cada una de las
instrucciones intermedias se traduce a una secuencia de instrucciones de
mquina que ejecuta la misma tarea. Un aspecto decisivo es la asignacin de
variables a registros.
Generacin de cdigo intermedio
Despus de los anlisis sintctico y semntico, algunos compiladores generan
una representacin intermedia explcita del programa fuente. Se puede
considerar esta representacin intermedia como un programa para una
mquina abstracta. Esta representacin intermedia debe tener dos
propiedades importantes; debe ser fcil de producir y fcil de traducir al
programa objeto.
La representacin intermedia puede tener diversas formas. Existe una forma
intermedia llamada cdigo de tres direcciones que es como el lenguaje
ensamblador de una mquina en la que cada posicin de memoria puede
actuar como un registro. El cdigo de tres direcciones consiste en una
secuencia de instrucciones, cada una de las cuales tiene como mximo tres
operandos. Esta representacin intermedia tiene varias propiedades:

Primera.- Cada instruccin de tres direcciones tiene a lo sumo un


operador, adems de la asignacin, por tanto, cuando se generan estas
instrucciones, el traductor tiene que decidir el orden en que deben
efectuarse las operaciones.
Segunda.- El traductor debe generar un nombre temporal para guardar
los valores calculados por cada instruccin.

Tercera.- Algunas instrucciones de tres direcciones tienen menos de


tres operandos, por ejemplo, la asignacin.

Optimizacin de cdigo
La fase de optimizacin de cdigo consiste en mejorar el cdigo intermedio, de
modo que resulte un cdigo mquina ms rpido de ejecutar. Esta fase de la
etapa de sntesis es posible sobre todo si el traductor es un compilador
(difcilmente un intrprete puede optimizar el cdigo objeto). Hay mucha
variacin en la cantidad de optimizacin de cdigo que ejecutan los distintos
compiladores. En los que hacen mucha optimizacin, llamados compiladores
optimizadores, una parte significativa del tiempo del compilador se ocupa en
esta fase. Sin embargo, hay optimizaciones sencillas que mejoran
sensiblemente el tiempo de ejecucin del programa objeto sin retardar
demasiado la compilacin.