Vous êtes sur la page 1sur 9

22/03/2015

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

Informacin general Organizacin del curso


Salones y horarios: Primer parte
Lunes, saln 303, 08:30 10:00 Terico
Mircoles, saln 501, 08:30 10:00 Individual
Material de clase Evaluacin: Parcial, eliminatorio
Todo lo requerido para el curso, esta en la pagina, Segunda parte
o esta referenciado desde la misma Construccin de un interprete/compilador
Cupo, pasaje de lista, etc. Grupal (mx. 3 personas)
El curso no tiene cupo, no se pasa lista, etc. Evaluacin: Tiene que funcionar

Libro tiles para el curso Libro tiles para el curso

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

Copias en el obligatorio Por que estudiar compiladores?


Aplica el reglamente general de la Facultad Ver la teora en funcionamiento
Se permite el libre intercambio de ideas Comprender como funcionan los lenguajes de
Pero NO SE PERMITE EL INTERCAMBIO DE programacin
CODIGO NI LAS COPIAS Comprender cuales son los trade-offs en el
En caso de detectar una copia, TODOS LOS diseo de un lenguaje
INVOLUCRADOS tendrn las sanciones Aprender como construir lenguajes de
administrativas correspondientes programacin
Domain Specific Languages (DSLs)

Historia de los compiladores Historia de los compiladores


Al comienzo, no haba nada Posteriormente, alguien tuvo la idea de
Luego, apareci el cdigo maquina mejorar la anterior, dndole nombres a los
Era un forma tediosa de escribir programas comando de cdigo maquina
La tarea mas simple llevaba mucho tiempo Surge el assembler
Por ejemplo, para cargar el valor 1 en una Ahora, en vez de lo anterior, hacemos:
variable, haba que hacer: LDA 01
A9 01 STA INDEX
8D 00 0C

2
22/03/2015

Historia de los compiladores Historia de los compiladores


Los ensambladores fueron mejorando, Con el paso del tiempo se eleva el nivel de
agregando mas expresividad y mas abstraccin
capacidades Los lenguajes se alejan cada vez mas de la
if optimized mquina en la que ejecutan
index = AX If (Persona.Edad > 18) Then
else Print(Es mayor de edad);
index = @address Else
mov index,1 Print(No es mayor de edad);

Clasificacin de lenguajes Clasificacin de lenguajes


Hoy da existen cientos de lenguajes de 1era Generacin
programacin Lenguajes de mquina
Existen diferentes clasificaciones y 2da Generacin
organizaciones Lenguajes ensamblador
Una de ellas es la generacin 3ra Generacin
Tenemos cinco generaciones hoy da Lenguajes de alto nivel
Fortran, Cobol, Lisp, C, C++, C#, Java

Clasificacin de lenguajes Clasificacin de lenguajes


4ta Generacin Otra clasificacin utiliza el termino imperativo
Lenguajes diseados para aplicaciones especificas para lenguajes en los que se dice COMO
realizar una computacin
SQL para acceso a bases de datos relaciones
C, C++, Java, C#
Postscript para formateo de textos
Existe la nocin de estado de programa y
5ta Generacin sentencias que cambian ese estado
Lenguajes lgicos o basados en restricciones El termino declarativo se utiliza para lenguajes
Prolog y OPS5 son ejemplos de ellos en los que se dice lo QUE se debe hacer
Prolog, Haskell, LISP

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

Compilacin + Interpretacin Compilacin + Interpretacin


Los procesadores del lenguaje Java, combinan Cdigo fuente
compilacin e interpretacin
Un cdigo fuente java se compila primero en
una forma intermedia, llamada bytecode Traductor
.class
Luego, los bytecodes son interpretados por
una maquina virtual
Entre otras ventajas, tenemos la portabilidad Cdigo Destino
Maquina Virtual Salida
entre plataformas Entrada

4
22/03/2015

Esquematizacin de la plataforma .NET


Compilacin + Interpretacin
Es un enfoque muy utilizado hoy da
Java Virtual Machine
Common Language Runtime (MS CLR .NET)
Dalvik Virtual Machine (Android)
IRB (Interactive Ruby Shell)
Zend Engine (PHP)
Permite controlar en tiempo real las
caractersticas del programa que esta ejecutando
Ejemplo: ArrayIndexOutOfBoundsException

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

Esquematizacin de la plataforma Java

Preprocesador en C Ensambladores
El compilador puede producir cdigo
ensamblador como lenguaje destino, debido a
que es mas fcil de generar y de depurar

El cdigo ensamblador es procesado luego por


un programa llamado ensamblador, el cual
produce cdigo de maquina relocalizable
como salida

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

Descripcin Implementacin Un compilador moderno


Representacin intermedia Cdigo
Anlisis lxico
Estructura auxiliar para manipular el programa fuente

ledo Anlisis sintctico


Optimizacin de RI Anlisis semntico
Simplificar la estructura auxiliar Generacin de IR
Generacin de cdigo Optimizacin de IR
Construir la estructura final
Generacin de cdigo
Optimizacin final
Cdigo
Optimizacin
Mejorar la estructura final del programa destino

6
22/03/2015

Un compilador moderno Un compilador moderno


Cdigo Cdigo
Anlisis lxico Anlisis lxico

FRONTEND
fuente fuente

Anlisis sintctico Anlisis sintctico


Anlisis semntico Anlisis semntico
Generacin de IR Generacin de IR

BACKEND
Optimizacin de IR Optimizacin de IR
Generacin de cdigo Generacin de cdigo
Cdigo Cdigo
Optimizacin destino
Optimizacin destino

while (y < z) { while (y < z) {


int x = a + b; En realidad es una secuencia de caracteres
int x = a + b;
y += x; y += x;
} }
while (y < z) {\n\tint x = a + b;\n\ty += x;\n}

Anlisis lxico Anlisis lxico

Anlisis sintctico Anlisis sintctico

Anlisis semntico Anlisis semntico

Generacin de IR Generacin de IR

Optimizacin de IR Optimizacin de IR

Generacin de cdigo Generacin de cdigo

Optimizacin Optimizacin

while (y < z) { TOKENS while (y < z) { while


int x = a + b; int x = a + b;
y += x; T_While y += x;
} T_LeftParen }
T_Identifier y expresin
T_Less
T_Identifier z bloque
Anlisis lxico T_RightParen Anlisis lxico
T_OpenBrace y < z
Anlisis sintctico T_Int Anlisis sintctico
T_Identifier x
Anlisis semntico T_Assign Anlisis semntico
T_Identifier a declaracin asignacin
Generacin de IR T_Plus Generacin de IR
T_Identifier b
Optimizacin de IR T_Semicolon Optimizacin de IR INT
expresin y expresin
T_Identifier y x
Generacin de cdigo T_PlusAssign Generacin de cdigo
T_Identifier x b y + x
a +
Optimizacin T_Semicolon Optimizacin
T_CloseBrace

7
22/03/2015

while (y < z) { while while (y < z) {


int x = a + b; void int x = a + b;
y += x; y += x; Cdigo de tres direcciones
} }
expresin
bool

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

while (y < z) { while (y < z) {


int x = a + b; int x = a + b;
y += x; y += x;
} }

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

Generacin de cdigo Generacin de cdigo

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

Vous aimerez peut-être aussi