Site hosted by Angelfire.com: Build your free website today!

COMPILADORES

- Son programas que leen un programa escrito en un

lenguaje de programación (lenguaje fuente), y lo

traduce a otro lenguaje (lenguaje destino).

- El lenguaje destino puede ser lenguaje máquina, o

algún otro lenguaje de programación, como lenguaje

ensamblador.

- Se pueden clasificar según la forma en que han sido

construidos, o en la función que deben cumplir.

- Además de los compiladores  a veces se necesita de

otros programas para generar el código destino, como

el preprocesador, el cual se encarga de adjuntar los

archivos que pueden formar un programa, para que

esté completo antes de la compilación.

 

MODELO DE COMPILACIÓN

DE ANÁLISIS-SÍNTESIS

La compilación se divide en dos fases.

ANÁLISIS

- Divide el programa fuente en las partes que lo

constituyen y crea una representación intermedia del

programa. Se determinan las operaciones del programa y

se registran en una estructura de árbol.

SÍNTESIS

- Construye el programa destino con las partes de la

representación intermedia.

 

ANÁLISIS DEL PROGRAMA FUENTE

El análisis consiste en tres fases:

- Análisis léxico (lineal): se leen los caracteres de

izquierda a derecha y se agrupan en componentes léxicos

(secuencias de caracteres con significado

collectivo).

- Análisis sintáctico (jerárquico): los componentes léxicos son agrupados

jerárquicamente en colecciones anidadas

con significado colectivo. Junta las palabras de la

fase anterior en frases gramaticales, representadas

con un árbol de análisis sintáctico.

- Análisis semántico: se realizan chequeos para

asegurar que los componentes del programa encajan

significativamente, como por ejemplo chequeo de

tipos.

 

FASES DEL COMPILADOR

 

FASES DEL BACK-END

- Generación de código intermedio: Luego del análisis

sintáctico y el semántico, se genera una representación del código intermedia.

- Optimización del código: intenta mejorar el código

intermedio, de modo que el código objeto se ejecute

más rápido, como por ejemplo eliminando instrucciones innecesarias o redundantes.

- Generación del código: se genera el código objeto,

para cada variable del programa se elige una

dirección de memoria y se sustituyen las

instrucciones del lenguaje intermedio en sus

correspondientes instrucciones en lenguaje máquina.

 

MANEJO DE TABLA DE SÍMBOLOS

- En cada una de las fases de la compilación, el

compilador lleva una tabla de símbolos en la que

se guardan los identificadores del programa fuente

e información de los atributos de esos

identificadores. Esta tabla nos permite encontrar

rápidamente el valor de una variable por ejemplo,

para ser usada en una instrucción.

- Cuando el analizador léxico detecta un identificador, lo introduce en la tabla, sin embargo los atributos no se pueden determinar durante el análisis léxico por lo que las fases restantes introducen tal información.

 

DETECCIÓN E INFORMACIÓN DE ERRORES

- En cada fase, se lleva a cabo detección y reporte de errores para que después puedan ser corregidos.

- Las fases de análisis sintáctico y semántico manejan una gran porción de los errores detectables por el compilador.

- En el análisis léxico se pueden detectar errores donde los caracteres restantes de la entrada no forman ningún componente léxico del lenguaje.

- En el análisis sintáctico se detectan los errores donde la cadena de componentes léxicos violan las reglas de estructura del lenguaje (sintaxis).

- En el análisis semántico se detectan construcciones que tienen la sintaxis correcta, pero que no tienen significado para la operación implicada, como sumar un entero y un string.

 

TRADUCCIÓN DE UNA PROPOSICIÓN