Professional Documents
Culture Documents
Tema 1
Introducción
1
Javier Vélez Reyes jvelez@lsi.uned.es
Índice General
¿Qué es un compilador?
Compiladores e interpretes
Contexto de un compilador
Tipos de compiladores
Estructura de un compilador
¿Qué es un compilador?
Traductor Lenguaje
Lenguaje Traductor objeto
fuente
Lenguaje
objeto
Uncompilador
Un compiladores esun
unprograma
programaque quelee
leeun
unprograma
programa
escrito en lenguaje fuente , y lo traduce a un lenguaje
escrito en lenguaje fuente, y lo traduce a un lenguaje
objeto de bajo nivel. Además generará una
objeto de bajo nivel. Además generará una lista delista delos
los
posibles errores que tenga el programa
posibles errores que tenga el programa fuentefuente
2
Javier Vélez Reyes jvelez@lsi.uned.es
Índice General
¿Qué es un compilador?
Compiladores e interpretes
Contexto de un compilador
Tipos de compiladores
Estructura de un compilador
Compiladores e interpretes
Compiladores
Una única compilación
Mayor velocidad ejecución
Mayor detalle de errores
Mayor consumo de memoria
Interpretes
Interpretación en ejecución
Menor velocidad ejecución
Menor detalle de errores
Menor consumo de memoria
3
Javier Vélez Reyes jvelez@lsi.uned.es
Índice General
¿Qué es un compilador?
Compiladores e interpretes
Contexto de un compilador
Tipos de compiladores
Estructura de un compilador
Contexto de un compilador
.C .H
Contexto .C .H
Precompilador Precompilador
Precompilador
Compilador
Enlazador (montador) .C
.C .ASM
.ASM
Depurador
Ensamblador Compilador
Compilador Ensamblador
Ensamblador
.DLL .OBJ
.OBJ .OBJ
.OBJ .OBJ
.OBJ
.DLL
WIN.EXE .LIB
.LIB Enlazador
Enlazador
WIN.EXE
.EXE
.EXE Ensamblador
Ensamblador .ASM
.ASM .EXE
.EXE
4
Javier Vélez Reyes jvelez@lsi.uned.es
Índice General
¿Qué es un compilador?
Compiladores e interpretes
Contexto de un compilador
Tipos de compiladores
Estructura de un compilador
Tipos de compiladores
Tipos de compiladores
Ensamblador
Compilador cruzado
Compilador con montador
Autocompilador
Metacompilador
Descompilador
5
Javier Vélez Reyes jvelez@lsi.uned.es
Índice General
¿Qué es un compilador?
Compiladores e interpretes
Contexto de un compilador
Tipos de compiladores
Estructura de un compilador
Estructura de un compilador
AnálisisLéxico
Análisis Léxico
Independencia
física
AnálisisSintáctico
Análisis Sintáctico
AnálisisSemántico
Análisis Semántico
Tabla de Generaciónde
Generación decódigo
código Gestión de
símbolos intermedio
intermedio errores
Optimizaciónde
Optimización decódigo
código
intermedio
intermedio
Generaciónde
Generación decódigo
código Dependencia
objeto
objeto física
6
Javier Vélez Reyes jvelez@lsi.uned.es
Análisis léxico I
Tipos de tokens ElElanalizador
analizadorléxico
léxicoooscanner,
scanner,transforma
transforma
Específicos el texto fuente en una secuencia aa
el texto fuente en una secuencia
ordenadade
ordenada deelemento
elementoléxicamente
léxicamente
Palabras reservadas válidos (tokens)
válidos (tokens)
Separadores
Operadores e
No específicos l
Identificadores i
h
Constantes w
Etiquetas G.Errores
G. Errores
Estructura TablaSímbolos
Tabla Símbolos AnálisisLéxico
Análisis Léxico(G3)
(G3)
Tipo
Lexema [RESERVEDWORD, WHILE]
Análisis léxico II
Tipos de tokens ElElanalizador
analizadorléxico
léxicoooscanner,
scanner,transforma
transforma
Específicos el texto fuente en una secuencia aa
el texto fuente en una secuencia
ordenadade
ordenada deelemento
elementoléxicamente
léxicamente
Palabras reservadas válidos (tokens)
válidos (tokens)
Separadores
Operadores
No específicos e
Identificadores l
i
Constantes
G.Errores
Errores w
Etiquetas G. Error 1
Estructura TablaSímbolos
Tabla Símbolos AnálisisLéxico
Análisis Léxico(G3)
(G3)
Tipo
Lexema 1 Los errores léxicos son difíciles de
7
Javier Vélez Reyes jvelez@lsi.uned.es
Análisis sintáctico I
Definición
ElElanalizador
analizadorsintáctico
sintácticoooparser
parserrecibe
recibelos
lostokens
tokens
yycomprueba
compruebasu suordenación
ordenacióncorrecta.
correcta.Genera
Generaunun
árbolsintáctico
árbol sintáctico
Funciones A := B + C
Guiar la traducción
Gestión de errores
prelación de operadores AnálisisSintáctico
Análisis Sintáctico(G2)
(G2)
A/B*C = A/(B*C)
A/B*C = (A/B) * C :=
9
A +
B C
8
Javier Vélez Reyes jvelez@lsi.uned.es
Análisis sintáctico II
Definición
ElElanalizador
analizadorsintáctico
sintácticoooparser
parserrecibe
recibelos
lostokens
tokens
y comprueba su ordenación correcta. Genera
y comprueba su ordenación correcta. Genera un un
árbol sintáctico
árbol sintáctico
Funciones
Guiar la traducción
Gestión de errores
prelación de operadores
A/B*C = A/(B*C)
A B := + C
A/B*C = (A/B) * C
G.Errores
G. Errores AnálisisSintáctico
Análisis Sintáctico(G2)
(G2)
Análisis semántico I
Definición ElElanalizador
analizadorsemántico
semánticocomprueba
compruebaque
queelelárbol
árbol
sintácticoes
sintáctico es semánticamente
semánticamenteválido.
válido.Genera
Generaun un
árbolsemántico
árbol semánticoooetiquetado
etiquetado
:=
Validación
A +
Tipo de resultados intermedios
Conversiones implícitas de tipos B C
Sobrecarga de operadores
AnálisisSintáctico
Análisis Sintáctico(G2
(G2++Reglas)
Reglas)
Tipo A, B, C? :=
9
TablaSímbolos
Tabla Símbolos A +
Real
B C
integer Real
9
Javier Vélez Reyes jvelez@lsi.uned.es
Análisis semántico I
Definición ElElanalizador
analizadorsemántico
semánticocomprueba
compruebaque
queelelárbol
árbol
sintáctico es semánticamente válido. Genera
sintáctico es semánticamente válido. Genera un un
árbol semántico o etiquetado
árbol semántico o etiquetado
:=
Validación
A +
Tipo de resultados intermedios
Conversiones implícitas de tipos B C
Sobrecarga de operadores
AnálisisSintáctico
Análisis Sintáctico(G2
(G2++Reglas)
Reglas)
Tipo A, B, C? :=
8
TablaSímbolos
Tabla Símbolos A +
Real
Error (B is Char) B C
G.Errores
G. Errores
Char integer
Lenguajes sencillos
Tercetos
Cuartetos
L1: IF A>B GOTO L2
WHILE (A>B) AND (A<2*B-5) DO GOTO L3
A:=A+B L2: T1 := 2*B
T2 := T1 – 5
IF A< T2 GOTO L4
Generaciónde
Generación de GOTO L3
códigointermedio
código intermedio L4: A := A + B
GOTO L1
L3: …
10
Javier Vélez Reyes jvelez@lsi.uned.es
Optimización de código I
Definición ElEloptimizador
optimizadordedecódigo
códigorealiza
realizamodificaciones
modificaciones
sobre el código intermedio para mejorar lala
sobre el código intermedio para mejorar
eficienciaen
eficiencia envelocidad
velocidadyytamaño.
tamaño.
Fases
Independiente de la máquina
Dependiente de la máquina
Eliminación de saltos consecutivos
L1: IF A>B GOTO L2 L1: IF A<=B GOTO L2
GOTO L3 T1 := 2*B
L2: T1 := 2*B T2 := T1 – 5
T2 := T1 – 5 IF A>= T2 GOTO L2
IF A< T2 GOTO L4 Optimizador
Optimizador A := A + B
GOTO L3 GOTO L1
L4: A := A + B L2: …
GOTO L1
L3: …
Optimización de código II
Definición ElEloptimizador
optimizadorde
decódigo
códigorealiza
realizamodificaciones
modificaciones
sobreelelcódigo
sobre códigointermedio
intermediopara
paramejorar
mejorarlala
eficienciaen
eficiencia envelocidad
velocidadyytamaño.
tamaño.
Fases
Independiente de la máquina
Dependiente de la máquina
Factorización de expresiones comunes
T1 := B + C
A := B + C + D
Optimizador
Optimizador A := T1 + D
E := B + C + F
E := T1 + F
11
Javier Vélez Reyes jvelez@lsi.uned.es
REPEAT B := 1
B := 1 Optimizador
Optimizador REPEAT
A := A – B A := A – B
UNTIL A = 0 UNTIL A = 0
Generadorde
Generador decódigo
código Generadorde
Generador decódigo
código
A := B + C intermedio objeto
intermedio objeto
12
Javier Vélez Reyes jvelez@lsi.uned.es
La tabla de símbolos
Almacena estructuras de datos
Variables
Constantes
Etiquetas
Tipos
Valores
Signatura de funciones
Operaciones
Insertar símbolo
Consultar símbolo
Borrar símbolo
Gestión de errores
Detección de errores
Léxicos (se delegan al sintáctico)
Sintácticos
Semánticos
Recuperación de errores
Parar al primer error
Recuperar volviendo a un contexto fiable
13
Javier Vélez Reyes jvelez@lsi.uned.es
Bibliografía
14