Compiladores: Introducción - Pontificia Universidad Javeriana, Cali

Anuncio
Compiladores:
Introducción
Pontificia Universidad Javeriana Cali
Ingeniería de Sistemas y Computación
Prof. Gloria Inés Alvarez V.
(galvarez@puj.edu.co)
Basado en [Aho, 2007, chp. 1]
Qué es un COMPILADOR?
Programa
Lenguaje
Destino
Programa
Lenguaje
Fuente
COMPILADOR
Mensajes de Error
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
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
Leng.
Fuente
Preprocessor
Leng.
Fuente
Leng.
Destino
Compiler
Assembler
Linker
Loader
Cod. Maq.
Relocalizable
Cod.Maq
Reloc.
Cod.Maq
Absoluto
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
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
Datos
Prog.
Fuente
Compilación
Código
Objeto
Ejecución
Resultados
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
Datos
Prog.
Fuente
Interprete
Resultados
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
Programa
Fuente
Representación
intermedia
Análisis
Síntesis
Mensajes de Error
Programa
Destino
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
Leng. Fuente
(Cadena de Caracteres)
Análisis Lineal
(Análisis Léxico ó Scanning)
Cadena de Tokens
Análisis Jerárquico
(Análisis Sintáctico ó Parsing)
Arbol de Análisis Sintáctico (Parse Tree)
Análisis
Semántico
Arbol de Parse decorado
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Fases de Síntesis
Arbol de Parse decorado
Generación de
Código Intermedio
Código
Intermedio
Optimización de
Código
Generación de
Código Final
Leng. Destino
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)
..... 1
2
.
5
*
(
5
+
v
a
Número flotante (12.5)
Espacio
Operador de multiplicación
Espacio
Paréntesis abierto
Número entero (5)
Operador de suma
Identificador (valor)
Punto y coma
Salto de línea
l
o
r
)
;
\n
.....
Análisis Sintáctico (Parser)
Num_flt ‘*’ ‘(‘ num_int ‘+’ id ‘)’ ‘;’
expresión
expresión
num_flt
‘*’
expresión
‘(‘ expresión
expresión
num_int
‘+’
‘)’
expresión
id
Análisis Semántico
Num_flt ‘*’ ‘(‘ num_int ‘+’ id ‘)’
expresión (float)
(float)
expresión
num_flt
(int)
‘*’
expresión (int)
‘(‘ expresión
expresión
‘+’
‘)’ (int)
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
Leng.
Fuente
Análisis Léxico
Análisis Sintáctico
Análisis Semántico
Generación de
Código Intermedio
Código
Intermedio
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Back-End
Código
Intermedio
Optimización de
Código
Generación de
Código Final
Leng. Destino
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
Herramientas útiles





Generador de analizadores sintácticos.
Generador de analizadores léxicos.
Motor de traducción dirigida por sintaxis.
Generador automático de código.
Motor de flujo de datos.
Descargar