Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Compilador PDF
Compilador PDF
Introduccin
Compilador: DEFINICIN
Proceso de traduccin que convierte un
programa fuente escrito en un lenguaje
de alto nivel a un programa objeto en
cdigo mquina y listo por tanto para
ejecutarse en el ordenador, con poca o
ninguna preparacin adicional
Programa
Fuente
Compilador
Programa
Objeto
Mensajes
de Error
Compiladores, Introduccin
Cdigo
Mquina
Ensamblador
Cdigo
Mquina
Lenguaje
Ensamblador
Ensamblador
Compilador
Cdigo
Lenguaje
Lenguaje
Mquina
Ensamblador
de alto Nivel
Compiladores
Compiladores
Conceptos Relacionados
Arquitectura
de Ordenadores
Teora de
Lenguajes
Lenguajes de
Programacin
Compiladores
Teora de
Algoritmos
Ingeniera
del Software
Motivacin (I)
Para ser buen programador
Motivacin (II)
La teora es imprescindible
Compilador; Definiciones I
Ensamblador:
Compilador sencillo, el lenguaje fuente tiene
una estructura simple que permite una
traduccin de una sentencia fuente a una
instruccin en cdigo mquina
Compilador cruzado:
Compilador que traduce un lenguaje fuente a
objeto, el objeto es para un ordenador distinto
del que compila
Compilador; Definiciones II
Autocompilador
Compilador escrito en el propio lenguaje que
compila
Facilitar la portabilidad
Compilador; Definiciones IV
Metacompilador
Programa que recibe un lenguaje y genera un
compilador para ese lenguaje
Decompilador
Programa que recibe como entrada cdigo
mquina y lo traduce a un lenguaje de alto
nivel
Esquema de Compilacin
Ejecucin
Compilacin
Fuente
Compilador
Corregir
Errores del
Fuente
Listado
Diagnsticos
Objeto
No
Bien
Si
Programa
Objeto
Resultados
Datos
Compilador, Esquema
Estructura de
Programa Fuente
Cdigo Mquina
Absoluto
Biblioteca de
Archivos Objeto
Relocalizables
Preprocesador
Compilador
Programa
Fuente
Ensamblador
Programa
Objeto
Ensamblador
Editor de
Carga
Cdigo Mquina
Relocalizable
Fases de un Compilador
Tabla de
Smbolos
Generacin
Anlisis
Analizador
Lxico
Analizador
Sintctico
Analizador
Semntico
Entrada
Salida
Generador
de Cdigo
Intermedio
Optimizador
Generador
de Cdigo
Tratamiento
de errores
Front End
Backend
x:=a+b*c;
y:=3+b*c;
Analizador
Lxico
(id,x) (op,:=)
(id,a)
(op,+) (id,b)
(op,*)
(id,c) (punt,;)
(id,y) (op,:=)
(num,3)
(op,+) (id,b)
(op,*)
(id,c) (punt,;)
Analizador Sintctico
Anlisis Jerrquico
Agrupa los componentes lxicos en frases
gramaticales que el compilador utiliza
TOKENS
(id,x) (op,:=)
(id,a)
(op,+) (id,b)
(op,*)
Analizador
Sintctico
(id,c) (punt,;)
(id,y) (op,:=)
(num,3)
(op,+) (id,b)
(op,*)
(id,c) (punt,;)
Sentencias
Sentencia
Sentencias
Asignacin
X
a
Variable
:=
Variable
Variable
b
Sentencia
Expresin
Asignacin
Expresin
Variable
Expresin
Variable
3
c
:=
Constante
Variable
Expresin
+
Expresin
Expresin
Variable
c
Compilador; Gramtica
Sentencias ::= Sentencia ; Sentencias | Sentencia
Sentencia ::= Asignacin | Condicional | Iterativa
Asignacin ::= Variable := Expresin
Condicional ::= if Condicin then Sentencias else
Sentencias
Iterativa ::= while Condicin do Sentencias
Expresin ::= Variable-Nmero + Expresin |
Variable-Nmero * Expresin |
Variable-Nmero - Expresin |
Variable-Nmero / Expresin |
Variable-Nmero
Variable ::= [A-Za-z] [A-Za-z0-9]*
Variable-Nmero ::= Variable | Nmero
Nmero ::= [0-9]+
Analizador Semntico
:=
x
:=
+
y
*
+
3
*
b
10
Optimizacin
:=
x
:=
+
*
b
+
3
Generador de Cdigo
:=
x
:=
+
y
*
+
3
Push a
apila
Push b
bpila
Load (c), R1
cR1
Mult (S), R1
b*cR1
Store R1, R2
R1R2
Add (S), R1
a+b*cR1
Store R1,(x)
R1x
Add #3, R2
3+b*cR2
11
Generacin de cdigo
El uso de cdigo intermedio reduce la
complejidad del desarrollo de
compiladores
1
CI
2
Front Ends
2
n
Backends
Fases de un Compilador
Agrupacin lgica de un compilador
Etapa Inicial
Fases, o parte de fases que dependen del
lenguaje fuente y que son independientes de la
mquina
Etapa Final
Fases que depende de la mquina, depende del
lenguaje intermedio
12
Aplicaciones
Desarrollo de interfaces de texto
Tratamiento de ficheros de texto estructurados
Procesadores de texto
vi,emacs
Diagramas de Tombstone
Conjunto de piezas de puzzle tiles
para razonar acerca de los
procesadores de lenguaje y los
programas
13
Diagramas de Tombstone
Diagrama para Programas
P
L
Programa P
expresado en
el lenguaje L
HolaMundo
x86
sort
JAVA
Mquina M
capaz de ejecutar
programas en el
lenguaje M
x86
SPARC
Diagramas de Tombstone
Ejecucin de un programa en una
mquina
A
La mquina y el
lenguaje deben
coincidir
B
HolaMundo
HolaMundo
x86
x86
x86
SPARC
14
Diagramas de Tombstone
Diagrama para Traductores/Compiladores
Lenguaje
Objeto
Ada x86
C
Lenguaje
de Implementacin
Ada x86
x86
Lenguaje
Fuente
Lenguaje
Fuente
Perl
Sparc
Lenguaje
de Implementacin
Diagramas de Tombstone
Ejemplo de compilacin
tetris
C
C x86
x86
tetris
tetris
x86
x86
x86
x86
Compilacin cruzada
tetris
tetris
tetris
PPC
PPC
C PPC
x86
x86
PCC
15
Diagramas de Tombstone
Intrprete
tetris
Basic
Basic
x86
x86
Mquinas abstractas
Doom
tetris
Atari
Emulador
Atari
C
Atari
x86
C x86
x86
Atari
x86
Doom
C Atari
x86
x86
Atari
x86
x86
x86
x86
Atari
Diagramas de Tombstone
Compilar un compilador
Java x86
C
Java x86
C x86
x86
x86
x86
C PPC
C PPC
C PPC
C x86
x86
x86
x86
PPC
x86
16
Bootstrapping
Compilar un compilador (una versin
antigua) consigo mismo
Ada-s x86
Ada-s x86
Ada-s x86
C x86
x86
Ada-s x86
Ada-s Ada-s x86 x86
x86
x86
x86
x86
Ada x86
Ya no dependemos
de C!!!
Ada-s x86
x86
x86
x86
Ada x86s
Ada x86s
Ada
x86s
Hacemos:
Ada x86f
Ada x86f
Ada
Ada
Ada x86f
Ada x86s
x86s
Ada x86f
Ada
Ada x86f
Ada x86f
x86s
x86s
x86
x86
x86f
17