Este documento presenta una introducción a los compiladores. Explica brevemente qué es un compilador, los tipos de compiladores, la estructura general de un compilador, que incluye las fases de análisis léxico, sintáctico, semántico y generación de código. También describe el contexto de un compilador y la función de la tabla de símbolos.
1. 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
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
¿Qué es un compilador?
Traductor Lenguaje
Lenguaje Traductor objeto
fuente
Alto Nivel Traductor
Lenguaje
objeto
Bajo Nivel Compilador
Un compilador es un programa que lee un programa
Un compilador es un programa que lee un programa
escrito en lenguaje fuente lo traduce a un lenguaje
escrito en lenguaje fuente,,yylo traduce a un lenguaje
objetode bajo nivel. Además generará una lista de los
objeto de bajo nivel. Además generará una lista de los
posibles errores que tenga el programa fuente
posibles errores que tenga el programa fuente
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
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
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
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
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
Tipos de compiladores
Tipos de compiladores
Ensamblador
Compilador cruzado
Compilador con montador
Autocompilador
Metacompilador
Descompilador
6. 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álisis Léxico
Análisis Léxico
Independencia
física
Análisis Sintáctico
Análisis Sintáctico
Análisis Semántico
Análisis Semántico
Tabla de Generación de código
Generación de código Gestión de
símbolos intermedio
intermedio errores
Optimización de código
Optimización de código
intermedio
intermedio
Generación de código
Generación de código Dependencia
objeto
objeto física
7. Javier Vélez Reyes jvelez@lsi.uned.es
Análisis léxico I
Tipos de tokens El analizador léxico o scanner, transforma
El analizador léxico o scanner, transforma
el texto fuente en una secuencia a
el texto fuente en una secuencia a
Específicos ordenada de elemento léxicamente
ordenada de elemento 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 Tabla Símbolos
Tabla Símbolos Análisis Léxico (G3)
Análisis Léxico (G3)
Tipo
Lexema [RESERVEDWORD, WHILE]
Javier Vélez Reyes jvelez@lsi.uned.es
Análisis léxico II
Tipos de tokens El analizador léxico o scanner, transforma
El analizador léxico o scanner, transforma
el texto fuente en una secuencia a
el texto fuente en una secuencia a
Específicos ordenada de elemento léxicamente
ordenada de elemento léxicamente
Palabras reservadas válidos (tokens)
válidos (tokens)
Separadores
Operadores
No específicos e
Identificadores l
i
Constantes
G. Errores w
Etiquetas G. Errores Error 1
Estructura Tabla Símbolos
Tabla Símbolos Análisis Léxico (G3)
Análisis Léxico (G3)
Tipo
Lexema 1 Los errores léxicos son difíciles de
detectar y suelen delegarse en el análisis
sintáctico
8. Javier Vélez Reyes jvelez@lsi.uned.es
Análisis léxico III
Tipos de tokens El analizador léxico o scanner, transforma
El analizador léxico o scanner, transforma
el texto fuente en una secuencia a
el texto fuente en una secuencia a
Específicos ordenada de elemento léxicamente
ordenada de elemento léxicamente
Palabras reservadas válidos (tokens)
válidos (tokens)
Separadores
Operadores
No específicos d
Identificadores a
d
Constantes
G. Errores e
Etiquetas G. Errores
Estructura Tabla Símbolos
Tabla Símbolos
ID Análisis Léxico (G3)
Análisis Léxico (G3)
Tipo
Lexema [ID, “edad”]
Javier Vélez Reyes jvelez@lsi.uned.es
Análisis sintáctico I
Definición
El analizador sintáctico o parser recibe los tokens
El analizador sintáctico o parser recibe los tokens
yycomprueba su ordenación correcta. Genera un
comprueba su ordenación correcta. Genera un
árbol sintáctico
árbolsintáctico
Funciones A := B + C
Guiar la traducción
Gestión de errores
prelación de operadores Análisis Sintáctico (G2)
Análisis Sintáctico (G2)
A/B*C = A/(B*C)
A/B*C = (A/B) * C :=
A +
B C
9. Javier Vélez Reyes jvelez@lsi.uned.es
Análisis sintáctico II
Definición
El analizador sintáctico o parser recibe los tokens
El analizador sintáctico o parser recibe los tokens
yycomprueba su ordenación correcta. Genera un
comprueba su ordenación correcta. Genera un
árbol sintáctico
árbolsintá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álisis Sintáctico (G2)
Análisis Sintáctico (G2)
Javier Vélez Reyes jvelez@lsi.uned.es
Análisis semántico I
Definición El analizador semántico comprueba que el árbol
El analizador semántico comprueba que el árbol
sintáctico es semánticamente válido. Genera un
sintáctico es semánticamente válido. Genera 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álisis Sintáctico (G2 + Reglas)
Análisis Sintáctico (G2 + Reglas)
Tipo A, B, C? :=
Tabla Símbolos
Tabla Símbolos A +
Real
B C
integer Real
10. Javier Vélez Reyes jvelez@lsi.uned.es
Análisis semántico I
Definición El analizador semántico comprueba que el árbol
El analizador semántico comprueba que el árbol
sintáctico es semánticamente válido. Genera un
sintáctico es semánticamente válido. Genera 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álisis Sintáctico (G2 + Reglas)
Análisis Sintáctico (G2 + Reglas)
Tipo A, B, C? :=
Tabla Sí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
El generador de código intermedio transforma un árbol
El generador de código intermedio transforma un árbol
de semántico en una representación en un lenguaje
de semántico en una representación en un lenguaje
intermedio cercano al código objeto
intermedio cercano al código 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ón de
Generación de GOTO L3
código intermedio
códigointermedio L4: A := A + B
GOTO L1
L3: …
11. Javier Vélez Reyes jvelez@lsi.uned.es
Optimización de código I
Definición El optimizador de código realiza modificaciones
El optimizador de código realiza modificaciones
sobre el código intermedio para mejorar la
sobre el código intermedio para mejorar la
eficiencia en velocidad yytamaño.
eficiencia en velocidad 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 El optimizador de código realiza modificaciones
El optimizador de código realiza modificaciones
sobre el código intermedio para mejorar la
sobre el código intermedio para mejorar la
eficiencia en velocidad yytamaño.
eficiencia en velocidad 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
12. Javier Vélez Reyes jvelez@lsi.uned.es
Optimización de código III
Definición El optimizador de código realiza modificaciones
El optimizador de código realiza modificaciones
sobre el código intermedio para mejorar la
sobre el código intermedio para mejorar la
eficiencia en velocidad yytamaño.
eficiencia en velocidad 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 El generador de código objeto transforma el código
El generador de código objeto transforma el 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
Generador de código
Generador de código Generador de código
Generador de código
A := B + C intermedio objeto
intermedio objeto
13. 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
14. 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.