Académique Documents
Professionnel Documents
Culture Documents
Informacin general
Docente
Pablo Garbusi
Diseo de compiladores Correo electrnico
pgarbusi@fing.edu.uy
Introduccin y organizacin del curso Pagina web del curso
http://www.fing.edu.uy/inco/curso/compil
Todo el material del curso ser colocado en esta
pagina y/o en el EVA
1
22/03/2015
Obligatorio Obligatorio
El objetivo ser desarrollar un interprete o un Herramientas que se pueden utilizar
compilador de un [subconjunto de un] lenguaje JFlex: Analizador lxico
interesante
Cup: Analizador sintctico
Algunos ejemplos usados en ediciones Java: Programacin del cdigo de soporte
anteriores del curso
IDE de desarrollo
JavaScript
Cualquiera que resulte cmoda y productiva
Ruby
Eclipse / Netbeans / IntelliJ
C / C++
Java
2
22/03/2015
3
22/03/2015
Compilador Compilador
El encargado de llenar el hueco entre el Es bsicamente un Programa origen
lenguaje origen y el destino, es el compilador procesador de
lenguajes
Un compilador es un programa que toma Un rol importante
que cumple, es el Compilador
como entrada un programa escrito en un
lenguaje, denominado fuente, y lo traduce en de reportar errores
un programa funcionalmente equivalente durante el proceso
escrito en otro lenguaje, denominado destino de traduccin
Programa destino
Compilador Interprete
Si el programa destino es ejecutable, puede Es otro tipo de procesador de lenguajes
ser invocado por el usuario para recibir En vez de producir un programa destino,
entradas y generar salidas aparenta ejecutar las instrucciones del
programa origen, sobre la entrada del usuario
Programa Cdigo
Entrada Salida
destino Fuente
Interprete Salida
Entrada
4
22/03/2015
Preprocesadores
El cdigo fuente puede encontrarse dividido
en varios archivos
La tarea de recolectar los programas, es
responsabilidad del preprocesador
Este a su vez puede expandir macros en
construcciones del lenguaje
El cdigo fuente modificado es alimentado al
compilador
Preprocesador en C Ensambladores
El compilador puede producir cdigo
ensamblador como lenguaje destino, debido a
que es mas fcil de generar y de depurar
5
22/03/2015
Linker / Loader
Los programas grandes por lo general se
compilan en partes, en lo que se conoce como
cdigo de maquina relocalizable
Un programa llamado Linker junta todas estas
partes, formando el cdigo que efectivamente
corre en la maquina destino
El Loader carga el programa resultado del
Linker en memoria, para su ejecucin
Cdigo fuente
Un sistema de
Descripcin Implementacin
Preprocesador procesamiento de Anlisis lxico
lenguajes Identificar piezas lgicas del lenguaje (tokens)
Cdigo fuente
modificado
Anlisis sintctico
Identificar como las piezas se relacionan entre si
Compilador
Cdigo maquina Anlisis semntico
ejecutable
Cdigo ensamblador
Identificar el significado de las relaciones
anteriores
Cdigo
Ensamblador relocalizable
Linker/Loader
6
22/03/2015
FRONTEND
fuente fuente
BACKEND
Optimizacin de IR Optimizacin de IR
Generacin de cdigo Generacin de cdigo
Cdigo Cdigo
Optimizacin destino
Optimizacin destino
Generacin de IR Generacin de IR
Optimizacin de IR Optimizacin de IR
Optimizacin Optimizacin
7
22/03/2015
Anlisis lxico
bloque
void Anlisis lxico
lbl:
Anlisis sintctico int
y < z
int Anlisis sintctico
x = a + b
Anlisis semntico Anlisis semntico
y = x + y
declaracin
asignacin _t1 = y < z
Generacin de IR int Generacin de IR
void
y
if _t1 goto lbl
Optimizacin de IR expresin Optimizacin de IR
INT int int
x expresin
Generacin de cdigo int
Generacin de cdigo
int y + x
Optimizacin a + b int int Optimizacin
int int
Anlisis lxico
x = a + b Anlisis lxico
add $1, $2, $3
Anlisis sintctico
lbl: Anlisis sintctico
lbl: add $4, $1, $4
Anlisis semntico
y = x + y Anlisis semntico
slt $6, $1, $5
_t1 = y < z beq $6, lbl
Generacin de IR Generacin de IR
if _t1 goto lbl
Optimizacin de IR Optimizacin de IR
Optimizacin Optimizacin
while (y < z) {
int x = a + b;
y += x;
}
Anlisis lxico
add $1, $2, $3
Anlisis sintctico
lbl: add $4, $1, $4
Anlisis semntico
blt $1, $5, lbl
Generacin de IR
Optimizacin de IR
Generacin de cdigo
Optimizacin
8
22/03/2015