compiladores:...
TRANSCRIPT
Compiladores:
Introducción
Pontificia Universidad Javeriana Cali
Ingeniería de Sistemas y Computación
Prof. Gloria Inés Alvarez V. ([email protected])
Basado en [Aho, 2007, chp. 1]
Qué es un COMPILADOR?
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
COMPILADOR
ProgramaLenguaje Fuente
Programa LenguajeDestino
Mensajes de Error
Qué vamos a aprender en este curso?
Técnicas sistemáticas para manejar las principales tareas que ocurren durante el proceso de compilación.
El desarrollo del primer compilador de Fortran (1950´s) tomó 18 años hombre.
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Contexto de un Compilador
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Preprocessor
Compiler
Assembler
Linker
Loader
Leng. Fuente Leng.
Fuente
Leng. Destino
Cod. Maq.Relocalizable
Cod.Maq Absoluto
Cod.Maq Reloc.
Diferencia entre Compilador e Interprete
Interprete: no realiza la traducción, desarrolla las operaciones que se especifican en el programa fuente. Procesa el programa y la entrada simultáneamente.
Compilador. Tiempo de Compilación Tiempo de Ejecución
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Compilador
Compilación EjecuciónProg. Fuente
Resultados
Datos
CódigoObjeto
Tiempo de Compilación Tiempo de Ejecución
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Interprete
InterpreteProg. Fuente
Resultados
Datos
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Tarea del Compilador
int a,b;
main ()
{
a = 5;
b = a*a+1;
}
COMPILADOR
STORE #5,0
LOAD 0,R0
MUL 0,R0
ADD #1,R0
STORE R0,4
Como lo hace?
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Compilar se parece a traducir
Reconocer los símbolos (letras, dígitos, signos de puntuación).
Agrupar los símbolos en palabras. Asociar a cada palabra significado y atributos. Verificar que la estructura de la oración sea
correcta. Juntar los significados parciales y asegurarse que la
idea resultante tiene sentido.
Compilar se parece a traducir Una vez se ha entendido el significado de una
oración bien construida, se procede a realizar la acción indicada en ella. Para esto se generan instrucciones en el lenguaje que entiende el computador.
El nuevo conjunto de instrucciones se revisa por si puede ser mejorado.
Finalmente se ejecutan las instrucciones.
Modelo de Compilación
Análisis
ProgramaFuente
Programa Destino
Mensajes de Error
Síntesis
Represen-tación
intermedia
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Modelo de Compilación
Análisis: divide el programa fuente en las partes que lo forman y crea una representación intermedia
Síntesis: construye el programa destino a partir de la representación intermedia
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Fases de Análisis
Análisis Lineal (Análisis Léxico ó Scanning)
Análisis Jerárquico (Análisis Sintáctico ó Parsing)
Análisis Semántico
Leng. Fuente(Cadena de Caracteres)
Cadena de Tokens
Arbol de Parse decorado
Arbol de Análisis Sintáctico (Parse Tree)
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Fases de Síntesis
Optimización de Código
Generación de Código Final
Leng. Destino
Generación de Código Intermedio
CódigoIntermedio
Arbol de Parse decorado
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Además
Durante todas las fases se usa una Tabla de Símbolos
Durante las fases de análisis se hace Detección, Reporte y Recuperación de Errores.
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Análisis Léxico (Scanner)
Número flotante (12.5)EspacioOperador de multiplicación EspacioParéntesis abiertoNúmero entero (5)Operador de sumaIdentificador (valor)Punto y comaSalto de línea
5 * ( 5. + v a l o r .......... 21 ) ; \n
Análisis Sintáctico (Parser)
Num_flt ‘*’ ‘(‘ num_int ‘+’ id ‘)’ ‘;’
expresión
expresión ‘*’ expresión
num_flt ‘(‘ expresión ‘)’
expresión ‘+’ expresión
num_int id
Análisis Semántico
Num_flt ‘*’ ‘(‘ num_int ‘+’ id ‘)’
expresión (float)
(float) expresión ‘*’ expresión (int)
num_flt ‘(‘ expresión ‘)’ (int)
(int) expresión ‘+’ expresión (int)
num_int id
Generación de código intermendio
Código de una máquina virtual. Código de tres direcciones.
Cada instrucción consta de sólo tres operandos Sólo hay un operador además de la asignación
Debe ser un código fácil de generar y fácil de convertir en instrucciones para el procesador.
Optimización de código Busca mejorar el código intermedio para:
Hacerlo más rápido Lograr que consuma la menor cantidad de
memoria posible. La optimización puede ser desde trivial hasta
muy sofisticada. Puede tomar una porción significativa del
tiempo total de compilación.
Generación de código
Se genera código de máquina relocalizable. El código generado realiza la misma tarea que
el código de entrada. Un aspecto clave es la asignación de
variables a registros.
Contexto de la compilación Preprocesamiento
Resuelve macros Incluye archivos Puede extender el lenguaje con nuevas estructuras
de control o de datos Ensamble
Recibe código en lenguaje ensamblador y genera código listo para ejecutarse.
Se puede ensamblar en dos pasadas: primero se construye una tabla de símbolos, luego se genera el código de máquina relocalizable.
Contexto de la compilación Normalmente el mismo programa realiza
carga y encadenamiento. Carga:
Transforma código relocalizable en código absoluto.
Encadenamiento: Construye un sólo programa a partir de código que
está en varios archivos. Resuelve referencias externas.
Front-End
Análisis Léxico
Análisis Sintáctico
Análisis Semántico
Generación de Código Intermedio
Leng. Fuente
CódigoIntermedio
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Back-End
Optimización de Código
Generación de Código Final
Leng. Destino
CódigoIntermedio
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Pasadas
1 Pasada = leer una vez un archivo
Se realizan varias fases con una pasada
Si se tienen pocas pasadas: Ventaja: Mayor velocidad de respuesta Desventaja: Mayor uso de memoria
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Ejemplo: Un Compilador de 4 Pasadas
1a. Pasada: Preprocesador 2a. Pasada: Front-End 3a. Pasada: Back-End (genera código
assembler) 4a. Pasada: Ensamblador
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón