You are on page 1of 14

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA

Escuela Técnica Superior de Ingeniería Informática


Procesadores de Lenguajes

Tema 1
Introducción

Javier Vélez Reyes


jvelez@lsi.uned.es

Javier Vélez Reyes jvelez@lsi.uned.es

Objetivos del Tema


„ Aprender qué es un compilador
„ Conocer los tipos de compiladores que existen
„ Conocer la diferencia entre compilador e interprete
„ Familiarizarse con el contexto de un compilador
„ Aprender la estructura y fases de un compilador

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

Javier Vélez Reyes jvelez@lsi.uned.es

¿Qué es un compilador?

Traductor Lenguaje
Lenguaje Traductor objeto
fuente

Alto Nivel Traductor

Lenguaje
objeto

Bajo Nivel Compilador

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

Javier Vélez Reyes jvelez@lsi.uned.es

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

Javier Vélez Reyes jvelez@lsi.uned.es

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

Javier Vélez Reyes jvelez@lsi.uned.es

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

Javier Vélez Reyes jvelez@lsi.uned.es

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]

Javier Vélez Reyes jvelez@lsi.uned.es

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

detectar y suelen delegarse en el análisis


sintáctico

7
Javier Vélez Reyes jvelez@lsi.uned.es

Análisis léxico III


„ 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 d
„ Identificadores a
d
„ Constantes
G.Errores
Errores e
„ Etiquetas G.
„ Estructura TablaSímbolos
Tabla Símbolos
ID AnálisisLéxico
Análisis Léxico(G3)
(G3)
„ Tipo
„ Lexema [ID, “edad”]

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)

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á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

Javier Vélez Reyes jvelez@lsi.uned.es

Generación de código intermedio


„ Definición
ElElgenerador
generadorde
decódigo
códigointermedio
intermediotransforma
transformaun
unárbol
árbol
desemántico
de semánticoen
enuna
unarepresentación
representaciónenenun
unlenguaje
lenguaje
intermediocercano
intermedio cercanoalalcódigo
códigoobjeto
objeto

„ 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: …

Javier Vélez Reyes jvelez@lsi.uned.es

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

Optimización de código III


„ 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
„ Extracción de invariantes

REPEAT B := 1
B := 1 Optimizador
Optimizador REPEAT
A := A – B A := A – B
UNTIL A = 0 UNTIL A = 0

Javier Vélez Reyes jvelez@lsi.uned.es

Generación de código objeto


„ Definición
ElElgenerador
generadorde
decódigo
códigoobjeto
objetotransforma
transformaelelcódigo
código
intermedio optimizado en código objeto de bajo
intermedio optimizado en código objeto de bajo
nivel
nivel

„ Lenguaje objeto LD AX, B


LD BX, C
„ Ensamblador ADD AX, BX
„ Código máquina ST AX, A

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

Javier Vélez Reyes jvelez@lsi.uned.es

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

[AJO] AHO, SETHI, ULLMAN: Compiladores: Principios,


técnicas y herramientas,: Addison-Wesley
Iberoamericana, 1990

[GARRIDO] A. Garrido, J. Iñesta, F. Moreno y J. Pérez.


2002. Diseño de compiladores. Universidad de
Alicante.

14

You might also like