You are on page 1of 188

UNIVERSIDAD DE CRDOBA

ESCUELA POLITCNICA SUPERIOR


DEPARTAMENTO DE INFORMTICA

Y ANLISIS

NUMRICO

PROCESADORES
R C A R DE LENGUAJES
G AJ
INGENIERA INFORMTICA
PRIMER
R M R CURSO
C RS DE SSEGUNDO
G N
C
CICLO
C
SEGUNDO CUATRIMESTRE

Ingeniera Informtica

Procesadores de Lenguajes

PROGRAMA
TEMA I.- INTRODUCCIN
TEMA II.- ANLISIS LEXICOGRFICO
TEMA III.III - FUNDAMENTOS TERICOS
DEL ANLISIS SINTCTICO
TEMA IV.- ANLISIS

SINTCTICO

DESCENDENTE
TEMA V.
V - ANLISIS SINTCTICO ASCENDENTE
TEMA VI.- TRADUCCIN BASADA EN LA SINTAXIS
Universidad de Crdoba

Escuela Politcnica Superior

Procesadores de Lenguajes

Tema I.I.- Introduccin

TEMA I.I INTRODUCCIN


TRADUCCIN E INTEPRETACIN
TIPOS DE TRADUCTORES
PROGRAMAS RELACIONADOS CON LA TRADUCCIN
T
U
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
HERRAMIENTAS PARA LA CONSTRUCCIN DE COMPILADORES
COMBINACIN DE COMPILADORES:
COMPILADORES BOOTSTRAPPING
BOOTSTRAPPING

Procesadores de Lenguajes

Tema I.I.- Introduccin

TEMA I.I INTRODUCCIN


TRADUCCIN E INTEPRETACIN
TIPOS DE TRADUCTORES
PROGRAMAS RELACIONADOS CON LA TRADUCCIN
T
U
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
HERRAMIENTAS PARA LA CONSTRUCCIN DE COMPILADORES
COMBINACIN DE COMPILADORES:
COMPILADORES BOOTSTRAPPING
BOOTSTRAPPING

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9L algoritmos
9Los
l it
permiten
it resolver
l
l problemas
los
bl
d computacin
de
t i

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9L algoritmos
9Los
l it
permiten
it resolver
l
l problemas
los
bl
d computacin
de
t i
9 Programa fuente: algoritmo escrito en un lenguaje de programacin

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9L algoritmos
9Los
l it
permiten
it resolver
l
l problemas
los
bl
d computacin
de
t i
9 Programa fuente: algoritmo escrito en un lenguaje de programacin
9 Los programas fuentes no pueden ser ejecutados directamente por los ordenadores

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9L algoritmos
9Los
l it
permiten
it resolver
l
l problemas
los
bl
d computacin
de
t i
9 Programa fuente: algoritmo escrito en un lenguaje de programacin
9 Los programas fuentes no pueden ser ejecutados directamente por los ordenadores
9 Los ordenadores slo ejecutan cdigo escrito en lenguaje mquina

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9L algoritmos
9Los
l it
permiten
it resolver
l
l problemas
los
bl
d computacin
de
t i
9 Programa fuente: algoritmo escrito en un lenguaje de programacin
9 Los programas fuentes no pueden ser ejecutados directamente por los ordenadores
9 Los ordenadores slo ejecutan cdigo escrito en lenguaje mquina
9 Problema: transformar el programa fuente en cdigo ejecutable

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9L algoritmos
9Los
l it
permiten
it resolver
l
l problemas
los
bl
d computacin.
de
t i
9 Programa fuente: algoritmo escrito en un lenguaje de programacin.
9 Los programas fuentes no pueden ser ejecutados directamente por los ordenadores.
9 Los ordenadores slo ejecutan cdigo escrito en lenguaje mquina.
9 Problema: transformar el programa fuente en cdigo ejecutable.

f
Programa
g
fuente
f
Transformador
g ejecutable
j
Cdigo

10

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Existen
E i t dos
d tipos
ti de
d transformacin:
t
f
i

11

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Existen
E i t dos
d tipos
ti de
d transformacin:
t
f
i
Traduccin
Interpretacin

12

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Existen
E i t dos
d tipos
ti de
d transformacin:
t
f
i
Traduccin
Un programa fuente (alto nivel) es convertido en cdigo ejecutable
(bajo nivel) que puede ser ejecutado independientemente.

13

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Traduccin
T d i

Programa fuente

Traductor

14

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Traduccin
T d i

Programa fuente

Traductor

Errores de traduccin

15

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Traduccin
T d i

Programa fuente

Traductor

Cdigo ejecutable

16

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Traduccin
T d i

Datos de entrada

Programa fuente

Traductor

Cdigo ejecutable

17

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Traduccin
T d i

Datos de entrada

Programa fuente

Traductor

Cdigo ejecutable

Errores de ejecucin Resultados

18

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Traduccin
T d i

Datos de entrada

Programa fuente

Traductor

Cdigo ejecutable

Resultados

19

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Existen
E i t dos
d tipos
ti de
d transformaciones
t
f
i
Traduccin
Interpretacin o simulacin: consta de tres fases que se repiten
sucesivamente

20

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Existen
E i t dos
d tipos
ti de
d transformaciones
t
f
i
Traduccin
Interpretacin o simulacin: consta de tres fases que se repiten
sucesivamente
1 Anlisis del cdigo fuente para determinar la siguiente sentencia a
1.
ejecutar.

21

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Existen
E i t dos
d tipos
ti de
d transformaciones
t
f
i
Traduccin
Interpretacin o simulacin: consta de tres fases que se repiten
sucesivamente
1 Anlisis del cdigo fuente para determinar la siguiente sentencia a
1.
ejecutar.
2. G
Generacin del cdigo
g que
q se ha de ejecutar.
j

22

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Existen
E i t dos
d tipos
ti de
d transformaciones
t
f
i
Traduccin
Interpretacin o simulacin: consta de tres fases que se repiten
sucesivamente
1 Anlisis del cdigo fuente para determinar la siguiente sentencia a
1.
ejecutar.
2. G
Generacin del cdigo
g que
q se ha de ejecutar.
j
3. Ejecucin del cdigo generado.

23

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Interpretacin
I t
t i

Programa fuente

Intrprete

24

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Interpretacin
I t
t i

Dat dde entrada


Datos
trada

Programa fuente

Intrprete

25

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Interpretacin
I t
t i

Dat dde entrada


Datos
trada
Errores de interpretacin
Programa fuente

Intrprete

26

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Interpretacin
I t
t i

Dat dde entrada


Datos
trada

Programa fuente

Intrprete

Resultados

Errores de ejecucin

27

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Interpretacin
I t
t i

Dat dde entrada


Datos
trada

Programa fuente

Intrprete

Resultados
28

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN
E INTEPRETACIN

9 Diferencias fundamentales entre traduccin e interpretacin:

29

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN
E INTEPRETACIN

9 Diferencias fundamentales entre traduccin e interpretacin:

Traduccin
Independencia:
El cdigo generado se puede
ejecutar independientemente del
programa fuente y del traductor.
Se traduce una vez y se ejecuta
muchas
h veces.

Interpretacin
Dependencia:
El cdigo generado slo se
ppuede ejecutar
j
con el
intrprete y el programa
fuente.
l
Se interpreta y ejecuta a la
vez.

30

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN
E INTEPRETACIN

9 Diferencias fundamentales entre traduccin e interpretacin:

Traduccin

Interpretacin

Independencia

Dependencia

Necesidades de memoria:

No tiene necesidad de memoria:

El cdigo generado se ha de
almacenar en memoria.

El cdigo
di generado
d no se
almacena en memoria.

31

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN
E INTEPRETACIN

9 Diferencias fundamentales entre traduccin e interpretacin:

Traduccin

Interpretacin

Independencia

Dependencia

Necesidades de memoria

No tiene necesidad de memoria

Eficiencia

Menos
M
eficiencia
fi i i

Una vez generado el cdigo, ste


se ejecuta
j
con rapidez.
p

El cdigo se ha de volver a
generar para volver a ser
ejecutado.

32

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN
E INTEPRETACIN

9 Diferencias fundamentales entre traduccin e interpretacin:

Traduccin

Interpretacin

Independencia

Dependencia

Necesidades de memoria

No tiene necesidad de memoria

Eficiencia

Menos
M
eficiencia
fi i i

Global

Local

P
Posee una visin
i i completa
l del
dl
programa pudiendo generar
mensajes de error ms detallados.

Posee una visin parciall del


dl
programa, ya que interpreta el
cdigo sentencia a sentencia.

33

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN
E INTEPRETACIN

9 Diferencias fundamentales entre traduccin e interpretacin:

Traduccin

Interpretacin

Independencia

Dependencia

Necesidades de memoria

No tiene necesidad de memoria

Eficiencia

Menos
M
eficiencia
fi i i

Global

Local

No
N iinteractividad
i id d

Interactividad
d d

No permite la interaccin con el


programa fuente

Permite una interaccin con el


programa durante su
desarrollo.

34

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN
E INTEPRETACIN

9 Diferencias fundamentales entre traduccin e interpretacin:

Traduccin

Interpretacin

Independencia

Dependencia

Necesidades de memoria

No tiene necesidad de memoria

Eficiencia

Menos
M
eficiencia
fi i i

Global

Local

No
N iinteractividad
i id d

Interactividad
d d

No inclusin de cdigo durante la


ejecucin

Inclusion de cdigo durante la


ejecucin
v.g.: intrpretes de Smalltalk,
Lispp y Prolog.
g
35

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Combinacin
C bi i de
d la
l traduccin
t d i e interpretacin:
i t
t i son procesos complementarios
l
t i

36

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Combinacin
C bi i de
d la
l traduccin
t d i e interpretacin:
i t
t i
Interpretacin + traduccin:
Se facilita la depuracin del cdigo: la interpretacin permite la
interaccin con el programa durante su desarrollo.
El cdigo depurado permite generar cdigo ejecutable ms eficiente.
eficiente

37

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Combinacin
C bi i de
d la
l traduccin
t d i e interpretacin:
i t
t i
Interpretacin + traduccin:
Se facilita la depuracin: la interpretacin permite la interaccin
con el programa durante su desarrollo.
El cdigo depurado permite generar cdigo ejecutable ms eficiente.
eficiente
Traduccin + interpretacin:
El programa ffuente se traduce
d a cdigo
di intermedio.
i
di
El cdigo intermedio puede ser interpretado en diferentes entornos
de ejecucin.
ejecucin
V.g.: Java, C#,

38

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Tipos de lenguajes

39

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Tipos de lenguajes
Lenguajes interpretados:
Utilizan un intrprete
p ppara ejecutar
j
sus pprogramas.
g
V.g.: APL, Lisp, Scheme, Prolog, Java, Smalltalk, etc.

40

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Tipos de lenguajes
Lenguajes interpretados:
Utilizan un intrprete
p ppara ejecutar
j
sus pprogramas.
g
Lenguajes compilados:
Utilizan un traductor denominado compilador
compilador para generar el
programa ejecutable.
V.g.: Fortran, Pascal, Ada, C, C++

41

Procesadores de Lenguajes

Tema I.I.- Introduccin

TRADUCCIN E INTEPRETACIN
9 Tipos de lenguajes
Lenguajes interpretados:
Utilizan un intrprete
p ppara ejecutar
j
sus pprogramas.
g
Lenguajes compilados:
Utilizan un traductor denominado compilador
compilador para generar el
programa ejecutable.
No es una clasificacin excluyente: existen lenguajes que poseen intrpretes
y compiladores:
Intrprete: utilizado para el desarrollo, depuracin y puesta a punto.
Compilador: genera el programa ejecutable.
V. g.: Visual Basic, Builder C++, etc.
42

Procesadores de Lenguajes

Tema I.I.- Introduccin

TEMA I.I INTRODUCCIN


TRADUCCIN E INTEPRETACIN
TIPOS DE TRADUCTORES
PROGRAMAS RELACIONADOS CON LA TRADUCCIN
T
U
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
HERRAMIENTAS PARA LA CONSTRUCCIN DE COMPILADORES
COMBINACIN DE COMPILADORES: BOOTSTRAPPING

43

Procesadores de Lenguajes

Tema I.I.- Introduccin

TIPOS DE TRADUCTORES
9 Preprocesador
P
d
9 Compilador
9 Ensamblador
9 Enlazador (linker)
9 Cargador (loader)

44

Procesadores de Lenguajes

Tema I.I.- Introduccin

TIPOS DE TRADUCTORES
9 Preprocesador
P
d
Programa inicial escrito en un lenguaje de alto nivel extendido
Programa final escrito en un lenguaje de alto nivel estndar
V.g.: cpp es un preprocesador del lenguaje C que realiza las siguientes
acciones:
Expandir macros: #define PI 3.141592
Incluir
I l i ficheros:
fi h
#i l d <stdio.h>
#include
di h
Eliminar comentarios: /* Men principal */
Etc.
Nota: tambin existen preprocesadores para embellecer el programa fuente.
45

Procesadores de Lenguajes

Tema I.I.- Introduccin

TIPOS DE TRADUCTORES
9 Preprocesador
P
d
9 Compilador
Programa inicial escrito en un lenguaje de alto nivel
Programa final escrito en un lenguaje de bajo nivel (mquina o ensamblador).

46

Procesadores de Lenguajes

Tema I.I.- Introduccin

TIPOS DE TRADUCTORES
9 Preprocesador
P
d
9 Compilador
9 Ensamblador
Programa inicial escrito en lenguaje ensamblador
Programa final escrito en cdigo mquina
Nota: el ensamblador es un caso particular de compilador.

47

Procesadores de Lenguajes

Tema I.I.- Introduccin

TIPOS DE TRADUCTORES
9 Preprocesador
P
d
9 Compilador
9 Ensamblador
9 Enlazador (linker)
Programa inicial escrito en cdigo reubicable (posiciones de memoria relativas)
Programa final escrito en cdigo mquina absoluto o ejecutable
Notas:
Adems incluye el cdigo de las funciones de las bibliotecas utilizadas por
el programa fuente.
Algunas veces genera cdigo reubicable.
48

Procesadores de Lenguajes

Tema I.I.- Introduccin

TIPOS DE TRADUCTORES
9 Preprocesador
P
d
9 Compilador
9 Ensamblador
9 Enlazador
9 Cargador (loader):
Programa inicial escrito en cdigo reubicable
Programa final escrito en cdigo mquina ejecutable
Nota: no suele ser un programa independiente.

49

Procesadores de Lenguajes

Tema I.I.- Introduccin

TIPOS DE TRADUCTORES
9 Combinacin
C bi i de
d los
l ti
tipos de
d traductores
t d t

Programa fuente extendido


Preprocesador

50

Procesadores de Lenguajes

Tema I.I.- Introduccin

TIPOS DE TRADUCTORES
9 Combinacin
C bi i de
d los
l ti
tipos de
d traductores
t d t

Programa fuente extendido


Preprocesador

Programa fuente estndar

51

Procesadores de Lenguajes

Tema I.I.- Introduccin

TIPOS DE TRADUCTORES
9 Combinacin
C bi i de
d los
l ti
tipos de
d traductores
t d t

Programa fuente extendido


Preprocesador

Programa fuente estndar


Compilador

52

Procesadores de Lenguajes

Tema I.I.- Introduccin

TIPOS DE TRADUCTORES
9 Combinacin
C bi i de
d los
l ti
tipos de
d traductores
t d t

Programa fuente extendido


Preprocesador

Programa fuente estndar


Compilador

Programa objeto (ensamblador)


53

Procesadores de Lenguajes

Tema I.I.- Introduccin

TIPOS DE TRADUCTORES
9 Combinacin
C bi i de
d los
l ti
tipos de
d traductores
t d t

Programa fuente extendido


Preprocesador

Ensamblador

Programa fuente estndar


Compilador

Programa objeto (ensamblador)


54

Procesadores de Lenguajes

Tema I.I.- Introduccin

TIPOS DE TRADUCTORES
9 Combinacin
C bi i de
d los
l ti
tipos de
d traductores
t d t

Programa fuente extendido


Preprocesador

Programa fuente estndar

Ensamblador
Cdigo mquina reubicable

Compilador

Programa objeto (ensamblador)


55

Procesadores de Lenguajes

Tema I.I.- Introduccin

TIPOS DE TRADUCTORES
9 Combinacin
C bi i de
d los
l ti
tipos de
d traductores
t d t

Programa fuente extendido

Programa objeto (ensamblador)

Cdigo mquina reubicable

Compilador

Programa fuente estndar

Ensamblador

Enlazador

Preprocesador

Biblioteca
de
funciones
(cdigo
reubicable)
56

Procesadores de Lenguajes

Tema I.I.- Introduccin

TIPOS DE TRADUCTORES
9 Combinacin
C bi i de
d los
l ti
tipos de
d traductores
t d t

Programa fuente extendido

Enlazador

Programa objeto (ensamblador)

Cdigo mquina reubicable

Compilador

Programa fuente estndar

Ensamblador

Preprocesador

Cdigo mquina ejecutable

Biblioteca
de
funciones
(cdigo
reubicable)
57

Procesadores de Lenguajes

Tema I.I.- Introduccin

TEMA I.I INTRODUCCIN


TRADUCCIN E INTEPRETACIN
TIPOS DE TRADUCTORES
PROGRAMAS RELACIONADOS CON LA TRADUCCIN
T
U
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
HERRAMIENTAS PARA LA CONSTRUCCIN DE COMPILADORES
COMBINACIN DE COMPILADORES:
COMPILADORES BOOTSTRAPPING
BOOTSTRAPPING

58

Procesadores de Lenguajes

Tema I.I.- Introduccin

PROGRAMAS RELACIONADOS CON LA TRADUCCIN


9 Editor
Edit basado
b d en la
l estructura
t t sintctica
i t ti del
d l lenguaje
l
j de
d programacin
i
9 Depurador
9 Generador del programa ejecutable
9 Perfilador
9 Entorno de desarrollo integrado

59

Procesadores de Lenguajes

Tema I.I.- Introduccin

PROGRAMAS RELACIONADOS CON LA TRADUCCIN


9 Editor
Edit basado
b d en la
l estructura
t t sintctica
i t ti del
d l lenguaje
l
j de
d programacin
i
Facilita la edicin de los programas al mostrar las estructuras de las
sentencias de un lenguaje de programacin.
Evita la aparicin de errores lxicos y, sobre todo, sintcticos.

60

Procesadores de Lenguajes

Tema I.I.- Introduccin

PROGRAMAS RELACIONADOS CON LA TRADUCCIN


9 Editor
Edit basado
b d en la
l estructura
t t sintctica
i t ti del
d l lenguaje
l
j de
d programacin
i
9 Depurador
En realidad es un intrprete que permite ejecutar el programa de forma
supervisada.
Permite la ejecucin paso a paso del programa.
programa
Permite comprobar los valores de las variables, establecer puntos de
pparada,, etc.
V.g.: algunos depuradores de C son gdb, ddd, dbx, dbxtool.

61

Procesadores de Lenguajes

Tema I.I.- Introduccin

PROGRAMAS RELACIONADOS CON LA TRADUCCIN


9 Editor
Edit basado
b d en la
l estructura
t t sintctica
i t ti del
d l lenguaje
l
j de
d programacin
i
9 Depurador
9 Generador del programa ejecutable
Analiza las dependencias del cdigo las bibliotecas de funciones para crear
el cdigo ejecutable.
ejecutable
V.g.: Install Shield, Setup Factory, etc.

62

Procesadores de Lenguajes

Tema I.I.- Introduccin

PROGRAMAS RELACIONADOS CON LA TRADUCCIN


9 Editor
Edit basado
b d en la
l estructura
t t sintctica
i t ti del
d l lenguaje
l
j de
d programacin
i
9 Depurador
9 Generador del programa ejecutable
9 Perfilador
Herramienta muy til para la optimizacin de los programas.
Permite conocer el perfil de ejecucin de un programa.
Genera estadsticas sobre la ejecucin del programa relativas a uso de
funciones, accesos a memoria, tiempos de ejecucin, etc.
Se pueden descubrir los cuellos de botella, es decir, dnde se requiere ms
tiempo de ejecucin.

63

Procesadores de Lenguajes

Tema I.I.- Introduccin

PROGRAMAS RELACIONADOS CON LA TRADUCCIN


9 Editor
Edit basado
b d en la
l estructura
t t sintctica
i t ti del
d l lenguaje
l
j de
d programacin
i
9 Depurador
9 Generador del programa ejecutable
9 Perfilador
9 Entorno de desarrollo integrado: incluye
un editor,
un compilador,
un enlazador,
un depurador,
etc.
64

Procesadores de Lenguajes

Tema I.I.- Introduccin

TEMA I.I INTRODUCCIN


TRADUCCIN E INTEPRETACIN
TIPOS DE TRADUCTORES
PROGRAMAS RELACIONADOS CON LA TRADUCCIN
T
U
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
HERRAMIENTAS PARA LA CONSTRUCCIN DE COMPILADORES
COMBINACIN DE COMPILADORES:
COMPILADORES BOOTSTRAPPING
BOOTSTRAPPING

65

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
9 Pasos

66

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
Anlisis: se encarga de comprobar que el programa fuente est bien escrito
Sntesis: se ocupa de la generacin del cdigo ejecutable
Componentes auxiliares:
Administrador de la tabla de smbolos
Gestor de errores

67

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
Anlisis
Anlisis lxico
Sntesis

68

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
Anlisis
Anlisis lxico
Anlisis sintctico
Sntesis

69

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
Anlisis
Anlisis lxico
Anlisis sintctico
Anlisis semntico
Sntesis

70

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
Anlisis
Anlisis lxico
Anlisis sintctico
Anlisis semntico
Sntesis
Generacin de cdigo intermedio

71

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
Anlisis
Anlisis lxico
Anlisis sintctico
Anlisis semntico
Sntesis
Generacin de cdigo intermedio
Optimizacin de cdigo intermedio

72

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
Anlisis
Anlisis lxico
Anlisis sintctico
Anlisis semntico
Sntesis
Generacin de cdigo intermedio
Optimizacin de cdigo intermedio
Generacin de cdigo

73

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
Anlisis
Anlisis lxico
Anlisis sintctico
Anlisis semntico
Sntesis
Generacin de cdigo intermedio
Optimizacin de cdigo intermedio
Generacin de cdigo
Optimizacin
p
de cdigo
g
74

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
Componentes auxiliares
Administrador de la tabla de smbolos
Gestor de errores

75

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Componentes lxicos

Administrador
de la tabla

Gestor de errores
G

de smbolos

76

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Anlisis sintctico

Administrador
de la Tabla

rbol sintctico
Gestor de errores
G

de smbolos

77

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Anlisis sintctico

Administrador

de smbolos

de la Tabla

Anlisis semntico
Gestor de errores
G

rbol sintctico anotado

78

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Anlisis
l sintctico

Administrador

de smbolos

de la Tabla

Anlisis semntico
Generacin de cdigo intermedio

Gestor de errores

Cdigo intermedio

79

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Anlisis
l sintctico

Administrador

de smbolos

de la Tabla

Anlisis semntico
Generacin de cdigo intermedio

Gestor de errores

Optimizacin del cdigo intermedio

Cdigo intermedio optimizado


80

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Anlisis
l sintctico

Administrador

de smbolos

de la Tabla

Anlisis semntico
Generacin de cdigo intermedio

Gestor de errores

Optimizacin del cdigo intermedio

Generacin de cdigo

Cdigo objeto

81

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Anlisis sintctico

de la Tabla

G
Generacin
i de
d cdigo
di intermedio
i
di

Gestor de errores
G

de smbolos

A li i semntico
Anlisis
ti

Administrador

Optimizacin del cdigo intermedio

Generacin de cdigo

Optimizacin de cdigo

Programa objeto

82

Procesadores de Lenguajes

Tema I.I.- Introduccin

Necesidad de agrupar las fases de la compilacin


4 Lenguajes
g j de pprogramacin
g
4 Sistemas operativos
p
= 16 compiladores
p
C

Unix

Pascal
Linux
Fortran
Windows
Ada

Mac OS
83

Procesadores de Lenguajes

Tema I.I.- Introduccin

Anlisis lxico

Anlisis sintctico

Parte frontal

(Front end)

Anlisis semntico

Generacin de
d cdigo
d intermedio
d

O ti i i del
Optimizacin
d l cdigo
di intermedio
i t
di

Generacin
i de
d cdigo
di

Parte trasera
(Back end)

Optimizacin de cdigo
84

Procesadores de Lenguajes

Tema I.I.- Introduccin

4 Partes frontales + 4 Partes traseras = 8 Partes


4 Partes ffrontales 4 Partes traseras = 16 Compiladores
p
C

Parte frontal
de
d C

Parte frontal
Pascal de Pascal
Fortran
Parte frontal
de Fortran
Ada Parte frontal
d Ada
de
Ad

D
I
G
O

I
N
T
E
R
M
E
D
I
O

Parte trasera
de Unix
Parte trasera
de Linux

Unix

Linux

Parte trasera
de Windows

Windows

Parte trasera
de M
Mac OSS

Mac OS
85

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
Anlisis
Se encarga de comprobar que el programa fuente est bien escrito.

86

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
Anlisis
Anlisis lxico
Anlisis sintctico
Anlisis semntico

87

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Anlisis
A li i
Anlisis lxico
Anlisis sintctico
Anlisis semntico

88

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Componentes lxicos

Administrador
de la tabla

Gestor de errores
G

de smbolos

89

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Anlisis
A li i
Anlisis lxico
Tambin denominado anlisis lexicogrfico, anlisis lineal,
explorador o scanner.

90

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Anlisis
A li i
Anlisis lxico
Tambin denominado anlisis lexicogrfico, anlisis lineal,
explorador o scanner.
nica fase que tiene contacto con el cdigo del programa fuente:
favorece la modularidad y la interactividad.

91

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Anlisis
A li i
Anlisis lxico
Tambin denominado anlisis lexicogrfico, anlisis lineal,
explorador o scanner.
nica fase que tiene contacto con el cdigo del programa fuente:
favorece la modularidad y la interactividad.
Objetivo:
j
Leer el programa fuente carcter a carcter y obtener los
componentes lxicos o tokens

92

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Anlisis
A li i
Anlisis lxico
Tambin denominado anlisis lexicogrfico, anlisis lineal,
explorador o scanner.
nica fase que tiene contacto con el cdigo del programa fuente:
favorece la modularidad y la interactividad.
Objetivo:
j
Leer el programa fuente carcter a carcter y obtener los
componentes lxicos o tokens

Programa fuente

Analizador lxico

Componentes lxicos
93

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Anlisis
A li i
Anlisis lxico
Componente lxico o token: agrupacin de caracteres con
significado propio.
Palabras reservadas: if,
if else
else, while,
while
Identificadores: dato, mayor, bandera,
Operadores
O
d
aritmticos:
i i
+, -, *,
* /,
/ div,
di mod,
d
Operadores relacionales: <, <=, >, >=,
Signos de puntuacin: {, }, (, ), ;,
Etc.
94

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Anlisis
A li i
Anlisis lxico
V.g.: if (divisor != 0.0) dividendo = divisor * cociente + resto ;

Componentes lxicos enviados al anlisis sintctico:


Palabra clave IF: if

Id tifi d r dividendo
Identificador:
di id d

Los espacios en blanco son suprimidos

Smbolo de asignacin: =

Parntesis izquierdo: (

Identificador: divisor

Identificador: divisor

Operador aritmtico de multiplicacin: *

Operador
d relacional
l i l de
d DISTINTO:
D T NT !=
!

Identificador: cociente

Nmero: 0.0

Operador aritmtico de adicin: +

Parntesis
P t i derecho:
d h )

Identificador:
f
resto
Delimitador de fin de sentencia: ;

95

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Tabla
T bl de
d smbolos
bl

Nombre
cociente
dividendo

Atributo 1

Atributo 2

divisor
resto

96

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Anlisis
A li i
Anlisis lxico
Componentes lxicos eliminados durante el anlisis lxico
Los espacios en blanco, tabuladores y saltos de lnea.
Los comentarios.
La eliminacin de estos componentes lxicos es til porque
Favorecen la lectura y comprensin de los programas.
Pero no son necesarios para generar el cdigo ejecutable.
Generalmente, el anlisis lxico es una subrutina o procedimiento
auxiliar del anlisis sintctico.
97

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Anlisis
A li i
Anlisis lxico
Anlisis sintctico
Anlisis semntico

98

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Anlisis
l sintctico

Administrador
de la Tabla

rbol
sintctico
Gestor de errores
G

de smbolos

99

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Anlisis
A li i
Anlisis sintctico
Tambin denominado anlisis jerrquico o gramatical o parser.

Objetivos:
Comprobar la sintaxis del cdigo fuente: utiliza las reglas
gramaticales del lenguaje fuente y los componentes lxicos.
Generar
G
una representacin
i jerrquica
j i (figurada):
(fi
d ) rbol
b l
sintctico.

100

Procesadores de Lenguajes

Tema I.I.- Introduccin


<sentencia condicional simple>

IF

if

<condicin>

<sentencia>

101

Procesadores de Lenguajes

Tema I.I.- Introduccin


<sentencia condicional simple>

IF

if

<condicin>

<sentencia>

P. IZQUIERDO <expresin> DISTINTO <expresin> P. DERECHO

!=

)
<sentencia de asignacin>
g
FIN DE SENTENCIA

102

Procesadores de Lenguajes

Tema I.I.- Introduccin


<sentencia condicional simple>

IF

if

<condicin>

<sentencia>

P. IZQUIERDO <expresin> DISTINTO <expresin> P. DERECHO

!=
IDENTIFICADOR
divisor

NMERO
0.0

<sentencia de asignacin>
g
FIN DE SENTENCIA

103

Procesadores de Lenguajes

Tema I.I.- Introduccin


<sentencia condicional simple>

IF

if

<condicin>

<sentencia>

P. IZQUIERDO <expresin> DISTINTO <expresin> P. DERECHO

!=
IDENTIFICADOR
divisor

NMERO
0.0

<sentencia de asignacin>
g
FIN DE SENTENCIA

IDENTIFICADOR
dividendo

;
ASIGNACIN
=

<expresin>

104

Procesadores de Lenguajes

Tema I.I.- Introduccin


<sentencia condicional simple>

IF

if

<condicin>

<sentencia>

P. IZQUIERDO <expresin> DISTINTO <expresin> P. DERECHO

!=
IDENTIFICADOR
divisor

NMERO
0.0

<sentencia de asignacin>
g
FIN DE SENTENCIA

IDENTIFICADOR
dividendo

;
ASIGNACIN
=

<expresin>

<expresin> ADICIN <expresin>


+

105

Procesadores de Lenguajes

Tema I.I.- Introduccin


<sentencia condicional simple>

IF

if

<condicin>

<sentencia>

P. IZQUIERDO <expresin> DISTINTO <expresin> P. DERECHO

!=
IDENTIFICADOR
divisor

<sentencia de asignacin>
g
FIN DE SENTENCIA

NMERO
0.0

IDENTIFICADOR
dividendo

ASIGNACIN
=

<expresin>

<expresin> ADICIN <expresin>


+
<expresin>

MULTIPLICACIN

<expresin>

IDENTIFICADOR
resto
t

106

Procesadores de Lenguajes

Tema I.I.- Introduccin


<sentencia condicional simple>

IF

if

<condicin>

<sentencia>

P. IZQUIERDO <expresin> DISTINTO <expresin> P. DERECHO

!=
IDENTIFICADOR

<sentencia de asignacin>
g
FIN DE SENTENCIA

NMERO
0.0

divisor

IDENTIFICADOR
dividendo

ASIGNACIN
=

<expresin>

<expresin> ADICIN <expresin>


+
<expresin>

MULTIPLICACIN

<expresin>

IDENTIFICADOR
resto
t

IDENTIFICADOR

IDENTIFICADOR

divisor

cociente
107

Procesadores de Lenguajes

Tema I.I.- Introduccin


<sentencia condicional simple>

IF

<condicin>

<sentencia>

P. IZQUIERDO <expresin> DISTINTO <expresin> P. DERECHO


IDENTIFICADOR

NMERO

<sentencia de asignacin>
g
FIN DE SENTENCIA

IDENTIFICADOR

ASIGNACIN

<expresin>

<expresin> ADICIN <expresin>


<expresin>

IDENTIFICADOR

MULTIPLICACIN

<expresin>

IDENTIFICADOR

IDENTIFICADOR

108

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Anlisis
A li i
Anlisis lxico
Anlisis sintctico
Anlisis semntico

109

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Anlisis
l sintctico

Administrador

Anlisis
l semntico

de la Tabla

de smbolos

rbol
sintctico anotado

Gestor de errores
G

110

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Anlisis
A li i
Anlisis semntico
Comprueba si el significado de las sentencias es correcto.
Utiliza el rbol sintctico y la tabla de smbolos.
Algunos de los errores semnticos que pueden detectar son:
Operandos y operadores incompatibles.
Diferencia de tipos entre los argumentos reales y los argumentos
formales.
Etc.
El anlisis semntico suele estar integrado en el anlisis sintctico.
111

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
Anlisis
Sntesis
Se encarga de transformar la representacin obtenida durante el
anlisis en el cdigo objeto o ejecutable

112

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Generacin de cdigo intermedio
Optimizacin del cdigo intermedio
Generacin de cdigo
Optimizacin del cdigo

113

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Generacin de cdigo intermedio
Optimizacin del cdigo intermedio
Generacin de cdigo
Optimizacin del cdigo

114

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Anlisis sintctico

de la Tabla

Generacin de cdigo intermedio

Gestor de errores
G

de smbolos

A li i semntico
Anlisis
ti

Administrador

Cdi intermedio
Cdigo
i
di

115

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Generacin de cdigo intermedio
Genera una representacin intermedia del cdigo fuente que ha de tener
las siguientes caractersticas
Ha de ser fcil de generar a partir del cdigo fuente.
fuente
Ha de ser fcil de traducir al cdigo objeto o ejecutable

Cdigo fuente

Cdigo intermedio Cdigo objeto o ejecutable

116

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Generacin de cdigo intermedio
Genera un representacin intermedia del cdigo fuente
Es una fase opcional, pero muy recomendable.
Redestinacin : al intergrarse en la parte frontal del compilador,
favorece la generacin de cdigo objeto para distintos entornos de
ejecucin.
j
Optimizacin: se puede aplicar a la representacin intermedia una
optimizacin de cdigo que sea independiente de la mquina en la que
se ejecutara.

117

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Generacin de cdigo intermedio
Este proceso se realiza mediante definiciones dirigidas por la sintaxis o
esquemas de traduccin que se incorporan al anlisis sintctico.
Tipos de representaciones intermedias:
Notacin postfija
rboles
b l sintcticos
i i
Grafos dirigidos acclicos
Cdigo de tres direcciones: cudruplas, triples y triples indirectos.

118

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9

S t i
Sntesis

Generacin de cdigo intermedio

V.g.: if (divisor != 0.0) dividendo = divisor * cociente + resto ;

Representacin intermedia en cdigo de tres direcciones:


100. if divisor = 0 goto 104
101. t1 ::= divisor * cociente
102. t2 := t1 + resto
103 dividendo := t2
103.
104.
119

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Generacin de cdigo intermedio
Optimizacin del cdigo intermedio
Generacin de cdigo
Optimizacin del cdigo

120

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Anlisis sintctico

Administrador

de smbolos

de la Tabla

Anlisis semntico
Generacin de cdigo intermedio

Gestor de errores

Optimizacin del cdigo intermedio

Cdigo intermedio optimizado


121

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Optimizacin del cdigo intermedio
Esta fase es opcional, pero tambin es recomendable
Objetivo:
Realizar una optimizacin del cdigo intermedio que sea
independiente de la mquina en la que se ejecute el cdigo objeto.
La
L optimizacin
i i i es un problema
bl
NP-Completo
NP C l

122

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Optimizacin del cdigo intermedio
V.g.: if (divisor != 0.0) dividendo = divisor * cociente + resto ;
Optimizacin de la representacin intermedia en cdigo de tres
direcciones:

100. if divisor = 0 goto 104

100. if divisor = 0 goto 103

101. t1 := divisor
di i * cociente
i

101 t1 := divi
101.
divisorr * cociente
iente

102. t2 := t1 + resto

102. dividendo := t1 + resto

103. dividendo := t2

103.

104.
123

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Generacin de cdigo intermedio
Optimizacin del cdigo intermedio
Generacin de cdigo
Optimizacin del cdigo

124

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Anlisis sintctico

Administrador

de smbolos

de la Tabla

Anlisis semntico
Generacin de cdigo intermedio

Gestor de errores

Optimizacin del cdigo intermedio

Generacin de cdigo

Cdigo objeto

125

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Generacin de cdigo
Objetivo
Traducir la representacin intermedia a cdigo objeto o ejecutable
(cdigo mquina).
mquina)
Ejemplo:
Se
S va a generar cdigo
di objeto
bj en ensamblador
bl d
Las operaciones aritmtico lgicas se han de realizar sobre
registros de mquina: R1
R1, R2,
R2
Las proposiciones condicionales son generadas mediante
comparaciones
p
(CMP)
(
) y saltos condicionales (JE,
( JLE, ).)
126

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Generacin de cdigo
100 MOV divisor,
100.
divisor R1
if (divisor != 0.0)
dividendo = divisor * cociente + resto ;

101. CMP #0, R1


102 JE 108
102.
103. MOV cociente, R2
104. MUL
U R2, R1
105. MOV resto, R3
106. SUM R3, R1
107. MOV R1, dividendo
108.
127

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Generacin de cdigo intermedio
Optimizacin del cdigo intermedio
Generacin de cdigo
Optimizacin del cdigo

128

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Anlisis sintctico

de la Tabla

G
Generacin
i de
d cdigo
di intermedio
i t
di

Gestor de errores
G

de smbolos

A li i semntico
Anlisis
ti

Administrador

Optimizacin del cdigo intermedio

Generacin de cdigo

Optimizacin de cdigo

Programa objeto

129

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Optimizacin del cdigo
Generar un cdigo ms eficiente:
Ejecucin ms rpida
Ocupar menos espacio de memoria.
La optimizacin es un problema NP-Completo
Optimizar las necesidades de tiempo y memoria de forma conjunta suele
ser bastante complicado o, incluso, imposible.
Tiempo y memoria son dos factores contrapuestos.
La optimizacin absoluta no siempre se puede alcanzar: slo se
producen mejoras,
mejoras pero no se tiene garanta de que sean ptimas
ptimas.
130

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Optimizacin del cdigo
Las mejores transformaciones son las que obtienen el mayor beneficio
con el menor esfuerzo
Criterios:
Se ha de preservar el significado del programa
Debe
D b acelerar
l
l programas de
los
d forma
f
apreciable
i bl
Tiene que merecer la pena

131

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Optimizacin del cdigo
Posibles mejoras del cdigo:
No evaluacin repetida de expresiones comunes
Evitar la propagacin de copias
Supresin de cdigo inactivo o muerto: anlisis de control de
fl j
flujo.
Optimizacin de bucles: no evaluacin de expresiones constantes
dentro de los bucles
Reutilizacin de registros de mquina.
Etc.
Etc
132

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Sntesis
S t i
Optimizacin del cdigo
100. MOV divisor, R1

100. MOV divisor, R1

101. CMP #0, R1

101. CMP #0, R1

102. JE 108

102. JE 108

103. MOV cociente, R2

103. MOV cociente, R2

104. MUL R2, R1

104. MUL R2, R1

105. MOV resto, R3

105. MOV resto, R2

106. SUM R3, R1

106. SUM R2, R1

107. MOV R1, dividendo

107.
7 M
MOV
V R1,
R , ddividendo
vd d

108.

108.

133

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
Componentes auxiliares
Administrador de la tabla de smbolos
Gestor de errores

134

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9C
9Componentes
t auxiliares
ili
Administrador de la tabla de smbolos
Gestor de errores

135

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Anlisis sintctico

de la Tabla

G
Generacin
i de
d cdigo
di intermedio
i t
di

Gestor de errores
G

de smbolos

A li i semntico
Anlisis
ti

Administrador

Optimizacin del cdigo intermedio

Generacin de cdigo

Optimizacin de cdigo

Programa objeto

136

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Componentes
C
t auxiliares
ili
Administrador de la tabla de smbolos
La tabla de smbolos contiene toda la informacin relacionada con
los identificadores del programa fuente:
Variables y constantes
Funciones y procedimientos
Parmetros
P
Tipos de datos definidos
Etiquetas
Etc.
137

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Componentes
C
t auxiliares
ili
Administrador de la tabla de smbolos
Se crea durante el anlisis lxico
Es completada y utilizada durante todas las fases del proceso de
compilacin
Se puede utilizar ms de una tabla de smbolos para controlar las
reglas
g de mbito del lenguaje
g j de programacin.
p g
Los depuradores pueden mostrar los valores de las variables al
consultar la tabla de smbolos.

138

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Componentes
C
t auxiliares
ili
Administrador de la tabla de smbolos
V.g.: dato = 3;

N b
Nombre
dato

Tipo
Ti
entero

Valor
V
l
3

139

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Componentes
C
t auxiliares
ili
Administrador de la tabla de smbolos
La informacin de las funciones o procedimientos es ms completa:
Nmero parmetros
Tipo y forma de paso de cada parmetro
Tipo de resultados (en las funciones)
Etc.

140

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Componentes
C
t auxiliares
ili
Administrador de la tabla de smbolos
Las operaciones sobre la tabla de smbolos son:
Insercin
Consulta
Modificacin
Se puede mejora la eficiencia en el uso de la tabla de smbolos
mediante:
Una buena organizacin de la tabla (v.g.: rbol binario de
bsqueda)
La codificacin de las funciones de acceso en lenguajes de bajo
nivel (v.g.: ensamblador).

141

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Componentes
C
t auxiliares
ili
Administrador de la tabla de smbolos
Gestor de errores

142

Procesadores de Lenguajes

P
Programa
fuente
f t

Tema I.I.- Introduccin

A li i lxico
Anlisis
l i

Anlisis sintctico

de la Tabla

G
Generacin
i de
d cdigo
di intermedio
i t
di

Gestor de errores
G

de smbolos

A li i semntico
Anlisis
ti

Administrador

Optimizacin del cdigo intermedio

Generacin de cdigo

Optimizacin de cdigo

Programa objeto

143

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Componentes
C
t auxiliares
ili
Gestor de errores
gestin
La
i de
d errores es un proceso fundamental
f d
l
Los errores pueden surgir en todas las fases del proceso de traduccin
Los errores son ms
frecuentes
f
en las
l etapas de
d anlisis:
li i
Errores lxicos: identificador con un carcter no permitido
Errores sintcticos:
i i
sentencia
i de
d controll mall escrita
i
Errores semnticos: uso de una variable en un contexto inadecuado
L gestin
La
i de
d errores debe:
db
Informar sobre el error,
y permitir,
i i sii es posible,
ibl que contine
i la
l traduccin
d i para detectar
d
ms

errores (recuperacin del error).


144

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Componentes
C
t auxiliares
ili
Gestor de errores
Las caractersticas de un buen gestor de errores:
Deteccin 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,, ppara qque la ppersona que
q programe
p g
tome la decisin
final.
Recuperacin del error: debe permitir que la traduccin contine,
sobre todo si no se desarrolla en un proceso interactivo.
Evitar la cascada de errores: debe informar de un error slo una
vez aunque aparezca varias veces,
vez,
veces y no generar otros errores.
errores
145

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Componentes
C
t auxiliares
ili
Gestor de errores
Las caractersticas de un buen gestor de errores (continuacin):
Informacin de los errores: el mensaje de error debe tener las
siguientes caractersticas:
- Localizacin: se debe indicar la lnea del cdigo fuente en la
que aparece ell error.
- Pertinencia: debe referirse al cdigo del programa y no a
detalles internos de la traduccin.
- Comprensin: debe ser claro y sencillo
146

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Fases
F
9 Pasos

147

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Pasos
P
Nmero de veces que se procesa una representacin del programa fuente.
Cada paso requiere:
Lectura del cdigo fuente
Procesamiento
Almacenamiento de la informacin generada
El nmero de pasos debe ser mnimo.

148

Procesadores de Lenguajes

Tema I.I.- Introduccin

ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS


9 Pasos
P
Las pasadas se suelen agrupar. Ejemplo:
Primera pasada: anlisis lxico, sintctico, semntico y generacin y
optimizacin de cdigo intermedio
Segunda pasada: generacin y optimizacin de cdigo.
cdigo
Algunas veces es imprescindible realizar dos o ms pasos:
Algol
Al l 68 y PL/I permiten
i utilizar
ili las
l variables
i bl antes de
d ser
declaradas.
Si el lenguaje permite saltos incondicionales (v.g.:
(v g : instruccin goto)
goto )
La tcnica de backpatching o relleno de retroceso permite
combinar dos ppasadas en una sola. Se requiere
q
una tabla de
saltos.
149

Procesadores de Lenguajes

Tema I.I.- Introduccin

TEMA I.I INTRODUCCIN


TRADUCCIN E INTEPRETACIN
TIPOS DE TRADUCTORES
PROGRAMAS RELACIONADOS CON LA TRADUCCIN
T
U
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
HERRAMIENTAS PARA LA CONSTRUCCIN DE COMPILADORES
COMBINACIN DE COMPILADORES:
COMPILADORES BOOTSTRAPPING
BOOTSTRAPPING

150

Procesadores de Lenguajes

Tema I.I.- Introduccin

HERRAMIENTAS PARA LA CONSTRUCCIN DE

COMPILADORES
9 Algunas partes del proceso de traduccin pueden ser generadas automticamente
9 Tipos de herramientas de generacin automtica:
Generadores automticos de analizadores lxicos
Generadores
G
d
automticos
i de
d analizadores
li d
sintcticos
i i
Generadores automticos de cdigo intermedio
Generadores automticos de cdigo
Mquinas de optimizacin de cdigo

151

Procesadores de Lenguajes

Tema I.I.- Introduccin

HERRAMIENTAS PARA LA CONSTRUCCIN DE

COMPILADORES
9 Tipos de herramientas de generacin automtica:
Generadores automticos de analizadores lxicos
Generadores automticos de analizadores sintcticos
Generadores
G
d
automticos
i de
d cdigo
di intermedio
i
di
Generadores automticos de cdigo
Mquinas de optimizacin de cdigo

152

Procesadores de Lenguajes

Tema I.I.- Introduccin

HERRAMIENTAS PARA LA CONSTRUCCIN DE

COMPILADORES
9 Tipos de herramientas de generacin automtica:
Generadores automticos de analizadores lxicos
Las expresiones regulares pueden denotar a los componentes bsicos
de los lenguajes
g j de pprogramacin:
g
Identificadores
Nmeros
Operadores aritmticos, lgicos y relacionales
Smbolos
S b l de
d puntuacin
t a i
Comentarios
Etc.
153

Procesadores de Lenguajes

Tema I.I.- Introduccin

HERRAMIENTAS PARA LA CONSTRUCCIN DE

COMPILADORES
9 Tipos de herramientas de generacin automtica:
Generadores automticos de analizadores lxicos
Las expresiones regulares pueden denotar a los componentes bsicos
de los lenguajes
g j de pprogramacin.
g
Existen herramientas automticas para generar analizadores lxicos a
partir de las expresiones regulares:
Lex
Flex
PCLex
ANTLR
Etc.

154

Procesadores de Lenguajes

Tema I.I.- Introduccin

HERRAMIENTAS PARA LA CONSTRUCCIN DE

COMPILADORES
9 Tipos de herramientas de generacin automtica:
Generadores automticos de analizadores lxicos
V.g.: Lex
nombre.l
nombre l
Fichero con
expresiones
p
regulares
g

Lex

lex yy c
lex.yy.c
Analizador lxico
escrito en lenguaje C

El fichero lex.yy.c contiene una funcin denominada yylex() que


r aliza la
realiza
las funciones
f i
del
d l analizador
a alizad r lxico.
lxi
La funcin yylex() simula el funcionamiento de un autmata finito
determinista (AFD).
155

Procesadores de Lenguajes

Tema I.I.- Introduccin

HERRAMIENTAS PARA LA CONSTRUCCIN DE

COMPILADORES
9 Tipos de herramientas de generacin automtica:
Generadores automticos de analizadores lxicos
Generadores automticos de analizadores sintcticos
Generadores
G
d
automticos
i de
d cdigo
di intermedio
i
di
Generadores automticos de cdigo
Mquinas de optimizacin de cdigo

156

Procesadores de Lenguajes

Tema I.I.- Introduccin

HERRAMIENTAS PARA LA CONSTRUCCIN DE

COMPILADORES
9 Tipos de herramientas de generacin automtica:
Generadores automticos de analizadores sintcticos
Las gramticas de contexto libre permiten generar casi todas las
estructuras sintcticas de los lenguajes
g j de pprogramacin.
g
Existen herramientas automticas para generar analizadores
sintcticos a partir de las gramticas de contexto libre:
YACC o Bison
LLGEN
G
CUP
ANTLR
Etc.

157

Procesadores de Lenguajes

Tema I.I.- Introduccin

HERRAMIENTAS PARA LA CONSTRUCCIN DE

COMPILADORES
9 Tipos de herramientas de generacin automtica:
Generadores automticos de analizadores sintcticos
V.g.: YACC, Yet Another Compiler Compiler
nombre.y
Fichero con una gramtica
de contexto libre

YACC

y.tab.c
Analizador
A
li d sintctico
i t ti
escrito en lenguaje C

El fichero y.tab.c contiene una funcin denominada yyparse() que


realiza las funciones de analizador sinttico.
La funcin
f
yyparse()() simula
l ell funcionamiento
f
de
d un autmata con
pila.

158

Procesadores de Lenguajes

Tema I.I.- Introduccin

HERRAMIENTAS PARA LA CONSTRUCCIN DE

COMPILADORES
9 Tipos de herramientas de generacin automtica:
Generadores automticos de analizadores lxicos
Generadores automticos de analizadores sintcticos
Generadores
G
d
automticos
i de
d cdigo
di intermedio
i
di
Generadores automticos de cdigo
Mquinas de optimizacin de cdigo

159

Procesadores de Lenguajes

Tema I.I.- Introduccin

HERRAMIENTAS PARA LA CONSTRUCCIN DE

COMPILADORES
9 Tipos de herramientas de generacin automtica:
Generadores automticos de cdigo intermedio
Suelen estar integrados en los analizadores sintcticos
Hay
H ddos versiones
i
que incorporan
i
acciones
i
semnticas
i de
d generacin
i
de cdigo intermedio:
Definiciones basadas en la sintaxis
Esquemas de traduccin
Al crear
r ar ell rbol
rb l sintctico,
i t ti se ejecutan
j ta las
la acciones
a i
semnticas
ti a de
d
generacin de cdigo intermedio

160

Procesadores de Lenguajes

Tema I.I.- Introduccin

HERRAMIENTAS PARA LA CONSTRUCCIN DE

COMPILADORES
9 Tipos de herramientas de generacin automtica:
Generadores automticos de analizadores lxicos
Generadores automticos de analizadores sintcticos
Generadores
G
d
automticos
i de
d cdigo
di intermedio
i
di
Generadores automticos de cdigo
Mquinas de optimizacin de cdigo

161

Procesadores de Lenguajes

Tema I.I.- Introduccin

HERRAMIENTAS PARA LA CONSTRUCCIN DE

COMPILADORES
9 Tipos de herramientas de generacin automtica:
Generadores automticos de cdigo
Se utilizan transformaciones basadas en reglas que tienen en cuenta:
Las
L caractersticas
i de
d las
l sentencias
i y operaciones
i
d l cdigo
del
di
intermedio
Las caractersticas de la mquina donde se va a ejecutar el cdigo
objeto:
- Acceso a las variables: almacenamiento en registros de
mquina en memoria esttica,
mquina,
esttica en la pila o el montn
- Operaciones bsicas disponibles
Etc.
- E
Las reglas utilizan plantillas de conversin.

162

Procesadores de Lenguajes

Tema I.I.- Introduccin

HERRAMIENTAS PARA LA CONSTRUCCIN DE

COMPILADORES
9 Tipos de herramientas de generacin automtica:
Generadores automticos de analizadores lxicos
Generadores automticos de analizadores sintcticos
Generadores
G
d
automticos
i de
d cdigo
di intermedio
i
di
Generadores automticos de cdigo
Mquinas de optimizacin de cdigo

163

Procesadores de Lenguajes

Tema I.I.- Introduccin

HERRAMIENTAS PARA LA CONSTRUCCIN DE

COMPILADORES
9 Tipos de herramientas de generacin automtica:
Mquinas de optimizacin de cdigo
Se utilizan dispositivos para el anlisis del flujo de datos.
Se
S recoge informacin
i f
i sobre
b la
l forma
f
en que los
l valores
l
se transmiten
i
de una parte a otra del programa
Ejemplos:
Anlisis de uso siguiente o de vida: se comprueba en qu
lugares se usa una variable y, especialmente, cundo no se va a
utilizar ms.
ms
Si una variable es utilizada frecuentemente entonces es preferible
almacenarla en un registro de mquina.
Etc.
164

Procesadores de Lenguajes

Tema I.I.- Introduccin

TEMA I.I INTRODUCCIN


TRADUCCIN E INTEPRETACIN
TIPOS DE TRADUCTORES
PROGRAMAS RELACIONADOS CON LA TRADUCCIN
T
U
ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
HERRAMIENTAS PARA LA CONSTRUCCIN DE COMPILADORES
COMBINACIN DE COMPILADORES:
COMPILADORES BOOTSTRAPPING
BOOTSTRAPPING

165

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 La tcnica de bootstrapping
bootstrapping permite combinar compiladores ya creados para
construir nuevos compiladores
g j que
q aparecen
p
en el proceso
p
de compilacin
p
son:
9 Los lenguajes
Lenguaje fuente (F)
g j de implementacin
p
((I):) lenguaje
g j en el qque est escrito el compilador
p
Lenguaje
Lenguaje objeto (O)
9 El compilador se pueden representar en fforma de T

O
I

9Nota: si el lenguaje es ejecutable, se indicar con color rojo

166

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Ejemplo:
Ej l compilador
il d gcc
Lenguaje fuente: Lenguaje C
Lenguaje de implementacin: Lenguaje mquina de Unix (U)
Lenguaje objeto: Lenguaje mquina de Unix (U)

U
U
167

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Si F = I entonces
t
ell compilador
il d se denomina
d
i autocompilador
t
il d
9 Ejemplo:
Lenguaje fuente: Lenguaje C
Lenguaje de implementacin: Lenguaje mquina de Unix (U)
Lenguaje objeto: Lenguaje C

U
C

Nota: habra que compilar


compilar este compilador para que se pueda ejecutar,
porque el lenguaje de implementacin no es ejecutable.

168

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Si I O entonces
t
ell compilador
il d se denomina
d
i compilador

il d cruzado,
d porque se
genera cdigo para una mquina diferente a la que se ha compilado
9 Ejemplo:
Lenguaje fuente: Lenguaje C
Lenguaje de implementacin: Lenguaje mquina de Unix (U)
Lenguaje objeto: Lenguaje mquina de Linux (L)

L
U
169

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin
A li i de
d la
l tcnica
t i de
d bootstrapping:
b t t
i
Ejemplo 1: se pretende construir el siguiente compilador
Lenguaje fuente: Lenguaje L de alto nivel
Lenguaje de implementacin: Lenguaje mquina (M)
Lenguaje objeto: Lenguaje mquina (M)

M
M

Dificultad:
f
es muyy difcil
f escribir un programa
p g
(compilador)
( p
) directamente en
cdigo mquina
170

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin
A li i de
d la
l tcnica
t i de
d bootstrapping:
b t t
i
Ejemplo 1
Paso 1: se construyen dos compiladores auxiliares

171

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin
A li i de
d la
l tcnica
t i de
d bootstrapping:
b t t
i
Ejemplo 1
Paso 1: se construyen dos compiladores auxiliares
Primer compilador

Lenguaje fuente: Lenguaje S, que es ms simple que el lenguaje L de


alto nivel (V.g: un subconjunto de L o ensamblador).
L
Lenguaje
j dde iimplementacin:
l
i Lenguaje
L
j mquina
i (M)

M
1

Lenguaje objeto: Lenguaje mquina (M)


Observacin: este compilador se puede construir con ms facilidad
porque S es ms simple que L.

172

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin de la tcnica de bootstrapping:
bootstrapping :
Ejemplo 1
Paso 1: se construyen dos compiladores auxiliares
Segundo compilador
Lenguaje fuente: Lenguaje L de alto nivel

M
S

Lenguaje de implementacin: Lenguaje S (que es ms simple que el


lenguaje L de alto nivel)
Lenguaje objeto: lenguaje mquina (M)

2
173

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin de la tcnica de bootstrapping:
bootstrapping :
Ejemplo 1
Paso 2: se compila el compilado
compilador 2 con el compilado
compilador 1, crendose
c endose el
compilador final

M
S
2

M
M

M
M

Compilador final

1
174

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin
A li i de
d la
l tcnica
t i de
d bootstrapping:
b t t
i
Forma general: A I B + I M N = A N B

B
I

B
N

M
175

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin
A li i de
d la
l tcnica
t i de
d bootstrapping:
b t t
i
Forma general: A I B + I M N = A N B

B
I

B
N

M
176

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin
A li i de
d la
l tcnica
t i de
d bootstrapping:
b t t
i
Si se desea construir un compilador escrito en un lenguaje mquina M para
un lenguaje de alto nivel L,
L entonces se utilizan subconjuntos del lenguaje
inicial.

M
M

177

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin de la tcnica de bootstrapping:
bootstrapping :
Ejemplo 2
Sean tres lenguajes de programacin: L1 L2 L3
Se pretende construir el siguiente compilador
Lenguaje
g j ffuente: Lenguaje
g j L3 de alto nivel
Lenguaje de implementacin: Lenguaje mquina (M)
Lenguaje objeto: Lenguaje mquina (M)

L3

M
M

Compilador final

178

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin
A li i de
d la
l tcnica
t i de
d bootstrapping:
b t t
i
Ejemplo 2:
Paso 1:
Se construyen los siguientes tres compiladores

L1

L2

L3

L1

L2

3
179

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin
A li i de
d la
l tcnica
t i de
d bootstrapping:
b t t
i
Ejemplo 2
Paso 2:
Se compila el compilador 2 con el compilador 1: se crea un compilador 4

L2

L2

M
L1
2

L1

M
M
1

M
M
4
180

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin
A li i de
d la
l tcnica
t i de
d bootstrapping:
b t t
i
Ejemplo2
Paso 3:
Se compila el compilador 3 con el compilador 4: se crea el compilador
final

L3

L3

M
L2
3

L2

M
M
4

M
Compilador final
181

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin
A li i de
d la
l tcnica
t i de
d bootstrapping:
b t t
i
Ejemplo 3:
Existe el compilador de un lenguaje L para una mquina M y se quiere
construir otro compilador para otra mquina N
Compilador original: L M M
Objetivo: L N N

Compilador original

Compilador final

182

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin
A li i de
d la
l tcnica
t i de
d bootstrapping:
b t t
i
Ejemplo 3
Paso 1:
Se construye el auto compilador L L N
Este compilador es ms fcil de construir que el compilador L N N

N
L
1

183

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin de la tcnica de bootstrapping:
bootstrapping :
Ejemplo 3
Paso 2:
Se compila el compilador obtenido en el paso 1 con el compilador
original, crendose el compilador cruzado L M N

N
L
1

L
M

Compilador original

N
M
2
184

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin de la tcnica de bootstrapping:
bootstrapping :
Ejemplo 3
Paso 3:
Se compila el compilador obtenido en el paso 1 con el compilador
obtenido en el paso 2, crendose el compilador final

N
L
1

L
M
2

N
N

Compilador final
185

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin de la tcnica de bootstrapping:
bootstrapping :
Resumen del ejemplo 3:
p
original
g
y el compilador
p
1 se construyen
y directamente
El compilador
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

1
L
1

L
N

Compilador original

N
L

L
M

L
M

N
M
2

N
N

Compilador
p
final
f
186

Procesadores de Lenguajes

Tema I.I.- Introduccin

COMBINACIN DE COMPILADORES: BOOTSTRAPPING


9 Aplicacin de la tcnica de bootstrapping:
bootstrapping :
Resumen del ejemplo 3:

1
L
1

L
N

N
L

L
M

L
M

Compilador original

N
M

N
N

Compilador
p
final
f

2
187

UNIVERSIDAD DE CRDOBA
ESCUELA POLITCNICA SUPERIOR
DEPARTAMENTO DE INFORMTICA

Y ANLISIS

NUMRICO

PROCESADORES
R C A R DE LENGUAJES
G AJ
INGENIERA INFORMTICA
PRIMER
R M R CURSO
C RS DE SSEGUNDO
G N
C
CICLO
C
SEGUNDO CUATRIMESTRE

You might also like