Optimización del código intermedio
ÆÆ
Generación de código
Generación de código
ÆÆ
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
9 C t ili
9 Componentes auxiliares
¾ Administrador de la tabla de símbolos
La tabla de símbolos contiene toda la información relacionada con
los identificadores del programa fuente:
Variables y constantes Variables y constantes
Funciones y procedimientos
P á
Parámetros
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
9 C t ili
9 Componentes auxiliares
¾ Administrador de la tabla de símbolos
Se crea durante el análisis léxico
Es completada y utilizada durante todas las fases del proceso de
compilación compilación
Se puede utilizar más de una tabla de símbolos para controlar las
reglas de ámbito del lenguaje de programación.g g j p g
Los depuradores pueden mostrar los valores de las variables al
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
9 C t ili
9 Componentes auxiliares
¾ Administrador de la tabla de símbolos
V.g.: dato = 3;
N b
N b
TiTi
V lV l
dato
dato
enteroentero
33
Nombre
Nombre
TipoTipo
ValorValor
…
…
…
…
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
9 C t ili
9 Componentes auxiliares
¾ Administrador de la tabla de símbolos
La información de las funciones o procedimientos es más completa: Número parámetros
Tipo y forma de paso de cada parámetro Tipo de resultados (en las funciones) Etc.
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
9 C t ili
9 Componentes auxiliares
¾ Administrador de la tabla de símbolos
Las operaciones sobre la tabla de símbolos son: Inserción
Consulta Modificación
Se puede mejora la eficiencia en el uso de la tabla de símbolos
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
9 C t ili
9 Componentes auxiliares
¾ Administrador de la tabla de símbolos ¾
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
P
f
t
ÆÆ
A áli i lé iA áli i lé i
Programa fuente
ÆÆ
Análisis léxicoAnálisis léxicoÆÆ
Análisis sintáctico
Análisis sintáctico
A áli i á ti
A áli i á ti
Análisis sintáctico
Análisis sintáctico
ÆÆ
Gestor de errores
Gestor de errores
Análisis semántico
Análisis semántico
ÆÆ
G
ió d ódi i t
di
G
ió d ódi i t
di
Administrador
Administrador
de la Tabla
de la Tabla
GG
ÆÆ
Generación de código intermedio
Generación de código intermedio
de símbolos
de símbolos
Optimización del código intermedio
Optimización del código intermedio
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
9 C t ili
9 Componentes auxiliares ¾ Gestor de errores
i d f d l
La gestión de errores es un proceso fundamental
Los errores pueden surgir en todas las fases del proceso de traducción
á f l d áli i
Los errores son más frecuentes en las etapas de análisis:
Errores léxicos: identificador con un carácter no permitido
i á i i d l l i
Errores sintácticos: sentencia de control mal escrita
Errores semánticos: uso de una variable en un contexto inadecuado L ió d d b
La gestión de errores debe: Informar sobre el error,
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
9 C t ili
9 Componentes auxiliares ¾ Gestor de errores
Las características de un buen gestor de errores:
Detección de errores: debe ser capaz de detectar los errores Tratamiento de los errores: al encontrar un error, intentará
subsanarlo si es posible. Siempre informará de los cambios realizados, para que la persona que programe tome la decisión , p q p q p g final.
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
9 C t ili
9 Componentes auxiliares ¾ Gestor de errores
Las características de un buen gestor de errores (continuación): Información de los errores: el mensaje de error debe tener las
siguientes características: siguientes características:
- Localización: se debe indicar la línea del código fuente en la
l
que aparece el error.
- Pertinencia: debe referirse al código del programa y no a detalles internos de la traducción.
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
9 F 9 Fases 9 Pasos
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
9 P 9 Pasos
¾ Número de veces que se procesa una representación del programa fuente. ¾
¾ Cada paso requiere:
Lectura del código fuente Procesamiento
Almacenamiento de la información generada ¾ El número de pasos debe ser mínimo.
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
9 P 9 Pasos
¾ Las pasadas se suelen agrupar. Ejemplo:
Primera pasada: análisis léxico, sintáctico, semántico y generación y
optimización de código intermedio
Segunda pasada: generación y optimización de código Segunda pasada: generación y optimización de código. ¾Algunas veces es imprescindible realizar dos o más pasos:
Al l 68 PL/I i ili l i bl d
Algol 68 y PL/I permiten utilizar las variables antes de ser
declaradas.
Si el lenguaje permite saltos incondicionales (v g : instrucción “goto”) Si el lenguaje permite saltos incondicionales (v.g.: instrucción goto )
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
TEMA I
INTRODUCCIÓN
TEMA I.-
INTRODUCCIÓN
•
TRADUCCIÓN E INTEPRETACIÓN
• TIPOS DE TRADUCTORES
T
U
Ó
• PROGRAMAS RELACIONADOS CON LA TRADUCCIÓN
• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORES
• COMBINACIÓN DE COMPILADORES “BOOTSTRAPPING”
• COMBINACIÓN DE COMPILADORES: BOOTSTRAPPING
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE
COMPILADORES
COMPILADORES
9 Algunas partes del proceso de traducción pueden ser generadas automáticamente 9 Tipos de herramientas de generación automática:
9 Tipos de herramientas de generación automática:
¾ Generadores automáticos de analizadores léxicos ¾ G d á i d li d i á i
¾ Generadores automáticos de analizadores sintácticos ¾ Generadores automáticos de código intermedio
¾ Generadores automáticos de código ¾ Máquinas de optimización de código
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE
COMPILADORES
COMPILADORES
9 Tipos de herramientas de generación automática: ¾ Generadores automáticos de analizadores léxicos ¾ Generadores automáticos de analizadores léxicos ¾ Generadores automáticos de analizadores sintácticos ¾ G d á i d ódi i di
¾ Generadores automáticos de código intermedio ¾ Generadores automáticos de código
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE
COMPILADORES
COMPILADORES
9 Tipos de herramientas de generación automática: ¾ Generadores automáticos de analizadores léxicos ¾ Generadores automáticos de analizadores léxicos
Las expresiones regulares pueden denotar a los componentes básicos
de los lenguajes de programación:g j p g
Identificadores NúmerosNúmeros
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE
COMPILADORES
COMPILADORES
9 Tipos de herramientas de generación automática: ¾ Generadores automáticos de analizadores léxicos ¾ Generadores automáticos de analizadores léxicos
Las expresiones regulares pueden denotar a los componentes básicos
de los lenguajes de programación.g j p g
Existen herramientas automáticas para generar analizadores léxicos a
partir de las expresiones regulares:
Lex Flex PCLex
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE
COMPILADORES
COMPILADORES
9 Tipos de herramientas de generación automática: ¾ Generadores automáticos de analizadores léxicos ¾ Generadores automáticos de analizadores léxicos
V.g.: Lex
Lex
Lex
nombre l
nombre l
ÆÆ
ÆÆ
lex yy clex yy cFichero con expresiones regulares
Lex
Lex
Analizador léxico escrito en lenguaje C nombre.lnombre.l
ÆÆ
ÆÆ
lex.yy.clex.yy.cEl fichero lex.yy.c contiene una función denominada “yylex()” que
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE
COMPILADORES
COMPILADORES
9 Tipos de herramientas de generación automática: ¾ Generadores automáticos de analizadores léxicos ¾ Generadores automáticos de analizadores léxicos ¾ Generadores automáticos de analizadores sintácticos ¾ G d á i d ódi i di
¾ Generadores automáticos de código intermedio ¾ Generadores automáticos de código
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE
COMPILADORES
COMPILADORES
9 Tipos de herramientas de generación automática:
¾ Generadores automáticos de analizadores sintácticos ¾ Generadores automáticos de analizadores sintácticos
Las gramáticas de contexto libre permiten generar “casi” todas las
estructuras sintácticas de los lenguajes de programación.g j p g
Existen herramientas automáticas para generar analizadores
sintácticos a partir de las gramáticas de contexto libre:
YACC o Bison LLGENG
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE
COMPILADORES
COMPILADORES
9 Tipos de herramientas de generación automática:
¾ Generadores automáticos de analizadores sintácticos ¾ Generadores automáticos de analizadores sintácticos
V.g.: YACC, Yet Another Compiler Compiler
Fichero con una gramática
YACC
YACC
nombre.y
nombre.y
ÆÆ
ÆÆ
y.tab.cy.tab.cA li d i tá ti Fichero con una gramática
de contexto libre Analizador sintáctico escrito en lenguaje C
El fichero y.tab.c contiene una función denominada “yyparse()” que
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE
COMPILADORES
COMPILADORES
9 Tipos de herramientas de generación automática: ¾ Generadores automáticos de analizadores léxicos ¾ Generadores automáticos de analizadores léxicos ¾ Generadores automáticos de analizadores sintácticos ¾ G d á i d ódi i di
¾ Generadores automáticos de código intermedio ¾ Generadores automáticos de código
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE
COMPILADORES
COMPILADORES
9 Tipos de herramientas de generación automática: ¾ Generadores automáticos de código intermedio ¾ Generadores automáticos de código intermedio
Suelen estar integrados en los analizadores sintácticos
H d i i i á i d ió
Hay dos versiones que incorporan acciones semánticas de generación
de código intermedio:
Definiciones basadas en la sintaxisDefiniciones basadas en la sintaxis
Esquemas de traducción
Al r ar l árb l i tá ti j ta la a i á ti a d
Al crear el árbol sintáctico, se ejecutan las acciones semánticas de
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE
COMPILADORES
COMPILADORES
9 Tipos de herramientas de generación automática: ¾ Generadores automáticos de analizadores léxicos ¾ Generadores automáticos de analizadores léxicos ¾ Generadores automáticos de analizadores sintácticos ¾ G d á i d ódi i di
¾ Generadores automáticos de código intermedio ¾ Generadores automáticos de código
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE
COMPILADORES
COMPILADORES
9 Tipos de herramientas de generación automática: ¾ Generadores automáticos de código
¾ Generadores automáticos de código
Se utilizan transformaciones basadas en reglas que tienen en cuenta:
L í i d l i i d l ódi
Las características de las sentencias y operaciones del código
intermedio
Las características de la máquina donde se va a ejecutar el código Las características de la máquina donde se va a ejecutar el código objeto:
- Acceso a las variables: almacenamiento en registros de máquina en memoria estática en la pila o el montón máquina, en memoria estática, en la pila o el montón - Operaciones básicas disponibles
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE
COMPILADORES
COMPILADORES
9 Tipos de herramientas de generación automática: ¾ Generadores automáticos de analizadores léxicos ¾ Generadores automáticos de analizadores léxicos ¾ Generadores automáticos de analizadores sintácticos ¾ G d á i d ódi i di
¾ Generadores automáticos de código intermedio ¾ Generadores automáticos de código
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
HERRAMIENTAS PARA LA CONSTRUCCIÓN DE
COMPILADORES
COMPILADORES
9 Tipos de herramientas de generación automática: ¾ Máquinas de optimización de código
¾ Máquinas de optimización de código
Se utilizan dispositivos para el análisis del flujo de datos.
S i f ió b l f l l i
Se recoge información sobre la forma en que los valores se transmiten
de una parte a otra del programa
Ejemplos: Ejemplos:
Análisis de “uso siguiente” o de “vida”: se comprueba en qué
lugares se usa una variable y, especialmente, cuándo no se va a utilizar más
utilizar más.
Si una variable es utilizada frecuentemente entonces es preferible
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
TEMA I
INTRODUCCIÓN
TEMA I.-
INTRODUCCIÓN
•
TRADUCCIÓN E INTEPRETACIÓN
• TIPOS DE TRADUCTORES
T
U
Ó
• PROGRAMAS RELACIONADOS CON LA TRADUCCIÓN
• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 La técnica de “bootstrapping” permite combinar compiladores ya creados para 9 La técnica de bootstrapping permite combinar compiladores ya creados para
construir nuevos compiladores
9 Los lenguajes que aparecen en el proceso de compilación son:g j q p p p
¾ Lenguaje fuente (F)
¾ Lenguaje de implementación (I): lenguaje en el que está escrito el compiladorg j p ( ) g j q p
¾ Lenguaje objeto (O)
9 El compilador se pueden representar en forma de Tf
F
F
OO
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 Ej l il d
9 Ejemplo: compilador gcc
¾ Lenguaje fuente: Lenguaje C ¾
¾ Lenguaje de implementación: Lenguaje máquina de Unix (U) ¾ Lenguaje objeto: Lenguaje máquina de Unix (U)
CC
UU
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 Si F I t l il d d i “ t il d ”
9 Si F = I entonces el compilador se denomina “autocompilador” 9 Ejemplo:
¾
¾ Lenguaje fuente: Lenguaje C
¾ Lenguaje de implementación: Lenguaje máquina de Unix (U) ¾ Lenguaje objeto: Lenguaje C
CC
UU
CC
CC
U
U
CC
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 Si I ≠ O t l il d d i “ il d d ”
9 Si I ≠ O entonces el compilador se denomina “compilador cruzado”, porque se
genera código para una máquina diferente a la que se ha compilado
9 Ejemplo:Ejemplo:
¾ Lenguaje fuente: Lenguaje C
¾ Lenguaje de implementación: Lenguaje máquina de Unix (U) ¾ Lenguaje de implementación: Lenguaje máquina de Unix (U) ¾ Lenguaje objeto: Lenguaje máquina de Linux (L)
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 A li ió d l té i d “b t t i ”
9 Aplicación de la técnica de “bootstrapping”:
¾ Ejemplo 1: se pretende construir el siguiente compilador
Lenguaje fuente: Lenguaje L de alto nivel
Lenguaje de implementación: Lenguaje máquina (M) Lenguaje objeto: Lenguaje máquina (M)
L
L
MM
L
L
M
M
M
M
M
M
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 A li ió d l té i d “b t t i ”
9 Aplicación de la técnica de “bootstrapping”: ¾ Ejemplo 1
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 A li ió d l té i d “b t t i ”
9 Aplicación de la técnica de “bootstrapping”: ¾ Ejemplo 1
Paso 1: se construyen dos compiladores auxiliares Primer compilador
Lenguaje fuente: Lenguaje S, que es más simple que el lenguaje L de alto nivel (V.g: un subconjunto de L o ensamblador).
L j d i l ió L j á i (M)
SS
MM
Lenguaje de implementación: Lenguaje máquina (M) Lenguaje objeto: Lenguaje máquina (M)
M
M
Observación: este compilador se puede construir con más facilidad porque S es más simple que L.
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 Aplicación de la técnica de “bootstrapping”: 9 Aplicación de la técnica de bootstrapping :
¾ Ejemplo 1
Paso 1: se construyen dos compiladores auxiliares Paso 1: se construyen dos compiladores auxiliares
Segundo compilador
Lenguaje fuente: Lenguaje L de alto nivel Lenguaje fuente: Lenguaje L de alto nivel
Lenguaje de implementación: Lenguaje S (que es más simple que el lenguaje L de alto nivel)
L
L
MM
Lenguaje objeto: lenguaje máquina (M)
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 Aplicación de la técnica de “bootstrapping”: 9 Aplicación de la técnica de bootstrapping :
¾ Ejemplo 1
Paso 2: se compila el compilador 2 con el compilador 1, creándose el Paso 2: se compila el compilado 2 con el compilado 1, c eándose el compilador final
L
L
MM
LL
MM
SS
MM
SS
MM
22
MM
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 A li ió d l té i d “b t t i ”
9 Aplicación de la técnica de “bootstrapping”: ¾ Forma general: A I B + I M N = A N B
A
A
BB
AA
BB
II
NN
A
A
II
B
B
AA
N
N
II
NN
II
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 A li ió d l té i d “b t t i ”
9 Aplicación de la técnica de “bootstrapping”: ¾ Forma general: A I B + I M N = A N B
A
A
BB
AA
BB
II
NN
A
A
II
B
B
AA
N
N
II
M
M
N
N
II
M
M
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 A li ió d l té i d “b t t i ”
9 Aplicación de la técnica de “bootstrapping”:
¾ Si se desea construir un compilador escrito en un lenguaje máquina M para
un lenguaje de alto nivel L entonces se utilizan subconjuntos del lenguaje un lenguaje de alto nivel L, entonces se utilizan subconjuntos del lenguaje inicial.
L
L
MM
M
M
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 Aplicación de la técnica de “bootstrapping”: 9 Aplicación de la técnica de bootstrapping :
¾ Ejemplo 2
Sean tres lenguajes de programación: L1 ⊆ L2 ⊆ L3 Sean tres lenguajes de programación: L1 ⊆ L2 ⊆ L3 Se pretende construir el siguiente compilador
Lenguaje fuente: Lenguaje L3 de alto nivelg j f g j
Lenguaje de implementación: Lenguaje máquina (M) Lenguaje objeto: Lenguaje máquina (M)
L3
L3
MM
M
M
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 A li ió d l té i d “b t t i ”
9 Aplicación de la técnica de “bootstrapping”: ¾ Ejemplo 2:
Paso 1:
Se construyen los siguientes tres compiladores
L1
L1
MM
L2L2
MM
L3L3
MM
M
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 A li ió d l té i d “b t t i ”
9 Aplicación de la técnica de “bootstrapping”: ¾ Ejemplo 2
Paso 2:
Se compila el compilador 2 con el compilador 1: se crea un compilador 4
L2
L2
MM
L2L2
MM
L1
L1
MM
L1
L1
MM
M
M
22
44
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 A li ió d l té i d “b t t i ”
9 Aplicación de la técnica de “bootstrapping”: ¾ Ejemplo2
Paso 3:
Se compila el compilador 3 con el compilador 4: se crea el compilador
final final
L3
L3
MM
L3L3
MM
L2
L2
MM
L2
L2
MM
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 A li ió d l té i d “b t t i ”
9 Aplicación de la técnica de “bootstrapping”: ¾Ejemplo 3:
Existe el compilador de un lenguaje L para una máquina M y se quiere
construir otro compilador para otra máquina N
Compilador original: L M Compilador original: L M M Objetivo: L N N
L
L
NN
L
L
MM
N
N
M
M
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 A li ió d l té i d “b t t i ”
9 Aplicación de la técnica de “bootstrapping”: ¾ Ejemplo 3
Paso 1:
Se construye el auto compilador L L N
Este compilador es más fácil de construir que el compilador L N N
L
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 Aplicación de la técnica de “bootstrapping”: 9 Aplicación de la técnica de bootstrapping :
¾ Ejemplo 3 Paso 2: Paso 2:
Se compila el compilador obtenido en el paso 1 con el compilador
original, creándose el compilador cruzado L M N
L
L
NN
LL
NN
L
L
L
L
MM
MM
M
M
11
22
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 Aplicación de la técnica de “bootstrapping”: 9 Aplicación de la técnica de bootstrapping :
¾ Ejemplo 3 Paso 3: Paso 3:
Se compila el compilador obtenido en el paso 1 con el compilador
obtenido en el paso 2, creándose el compilador final
L
L
NN
LL
NN
L
L
L
L
NN
NN
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 Aplicación de la técnica de “bootstrapping”:Aplicación de la técnica de bootstrapping :
¾Resumen del ejemplo 3:
El compilador original y el compilador 1 se construyen directamentep g y p y
El compilador 2 se construye a partir del original y el compilador 1 El compilador final se construye a partir de los compiladores 1 y 2
L
L
NN
L
L
NN
11
L
L
NN
L
L
N
N
N
N
L
L
NN
L
L
L
L
L
L
N
N
M
M
MM
11
Compilador final
Compilador finalpp
ff
Procesadores de Lenguajes
Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
•
COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
9 Aplicación de la técnica de “bootstrapping”: 9 Aplicación de la técnica de bootstrapping :
¾Resumen del ejemplo 3:
L
L
NN
L
L
NN
11
L
L
NN
L
L
N
N
N
N
L
L
NN
L
L
L
L
L
L
N
N
M
M
MM
11
Compilador final
Compilador finalpp
ff
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR
Á Á É
DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO