Anda di halaman 1dari 5

Compiladores

A grandes rasgos, un compilador es un programa que lee un programa escrito en un


lenguaje, el lenguaje fuente (regularmente escrito en lenguaje de alto nivel), y lo traduce a
un programa equivalente en otro lenguaje, el lenguaje objeto. Como parte importante de
este proceso de traduccin, el compilador informa a su usuario de la presencia de errores en
el programa fuente.
Programa
fuente

Compilador

Programa
objeto

Mensajes de error

En la compilacin hay dos partes: anlisis y sntesis. La parte del anlisis divide al
programa fuente en sus elementos componentes y crea una representacin intermedia del
programa fuente. La parte de la sntesis construye el programa objeto deseado a partir de la
representacin intermedia.
Durante el anlisis, se determinan las operaciones que implica el programa fuente y
se registran en una estructura jerrquica llamada rbol. A menudo se usa una clase especial
de rbol llamada rbol sintctico, donde cada nodo representa una operacin y los hijos de
un nodo son los argumentos de la operacin.
Anlisis del programa fuente.
El anlisis consta de 3 fases:
1. A nlisis lineal, en el que la cadena de caracteres que constituye el programa fuente,
se lee de izquierda a derecha y se agrupa en componentes lxicos, que son
secuencias de caracteres que tienen un significado colectivo.
2. A nlisis jerrquico (tambin llamado sintctico). En el que los caracteres o los
componentes lxicos se agrupan jerrquicamente en colecciones anidadas con un
significado colectivo.
3. A nlisis semntico. En el que realizan ciertas revisiones para asegurar que los
componentes de un programa se ajustan de un modo significativo.

Fases de un compilador.
Conceptualmente un compilador opera en fases, cada una de las cuales transforma al
programa fuente de una representacin en otra.
Programa fuente
Analizador
lxico

Analizador
sintctico

Administrador de
la tabla de
smbolos

Analizador
semntico

Manejador de
errores

Generador de
cdigo
intermedio

Optimador de
cdigo

Generador de
cdigo

Programa objeto

Anlisis lxico
El anlisis lineal se llama anlisis lxico o exploracin. El modelo matemtico de un
analizador de este tipo recibe el nombre de autmata finito; un autmata de este tipo es una
funcin matemtica que puede reconocer grupos de caracteres que constituyen un
componente sintctico.

Por ejemplo, en el anlisis lxico los caracteres de la proposicin de asignacin


posicin:= inicial + velocidad * 60

se agruparan en los componentes lxicos siguientes:


1. El identificador posicin.
2. El Smbolo de asignacin (:=)
3. El identificador inicial
4. El Smbolo de suma (+)
5. El identificador velocidad
6. El Smbolo de multiplicacin (*)
7. El Numero 60

Anlisis sintctico.
El anlisis jerrquico, se denomina anlisis sintctico. Este implica agrupar los
componentes lxicos del programa fuente en frases gramaticales que el compilador que
utiliza para sintetizar la salida. Por lo general, las frases gramaticales del programa fuente
se representa mediante un rbol de anlisis sintctico.

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.

Administracin de la tabla de smbolos.


Una funcin esencial de un compilador es registrar los identificadores utilizados en el
programa fuente y reunir informacin sobre los distintos atributos de cada identificador.
Una tabla de smbolos es una estructura de datos que contiene un registro por cada
identificador, con los campos para los atributos del identificador. La estructura de datos
permite encontrar rpidamente el registro de cada identificador y almacenar o consultar
rpidamente datos de ese registro.

Deteccin e informacin de errores.


Cada fase puede encontrar errores. Sin embargo, despus de detectar un error, cada fase
debe tratar de alguna forma ese error, para poder continuar la compilacin permitiendo la
deteccin de ms errores en el programa fuente.
Las fases de anlisis sintctico y semntico por lo general manejan una gran porcin de
errores detectables por el compilador. La fase lxica puede detectar errores donde los
caracteres restantes de la entrada no forman ningn componente lxico del lenguaje. Los
errores donde las cadenas de componentes lxicos violan las reglas de estructura (sintaxis)
del lenguaje, son determinados por la fase de anlisis sintctico.
Durante el anlisis semntico el compilador intenta detectar construcciones que tengan la
estructura sintctica correcta, pero que no tenga significado para la operacin implicada.

Generacin de cdigo intermedio.


Despus de los anlisis sintctico y semntico, algunos compiladores generan una
representacin intermedia explcita del programa fuente.
Esta representacin intermedia debe tener dos propiedades importantes: debe ser fcil de
producir y fcil de traducir al programa objeto.

Optimacin de cdigo
La fase de optimacin de cdigo trata de mejorar el cdigo intermedio, de modo que resulte
un cdigo de mquina ms rpido de ejecutar.

Generacin de cdigo.
La fase final de un compilador es la generacin de cdigo objeto, que por lo general
consiste en 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.

Generador de cdigo intermedio.


Temp1 := entareal(60)
Temp2 := id3 * temp1
Temp3 := id2 + temp2
id1 := temp3

Optimador de cdigo
Temp1 := id3 * 60.0
id1 := id2 + temp1

Generador de cdigo
Mov F id3, R2
Mult F #60.0, R2
Mov F id2, R1
Ada F R2, R!
Mov F R1, id1

Anda mungkin juga menyukai