188
UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR Á Á É DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO PROCESADORES DE LENGUAJES PROCESADORES DE LENGUAJES INGENIERÍA INFORMÁTICA PRIMER CURSO DE SEGUNDO CICLO SEGUNDO CUATRIMESTRE

PROCESADORES DE LENGUAJES

  • Upload
    marlon

  • View
    244

  • Download
    3

Embed Size (px)

Citation preview

Page 1: PROCESADORES DE LENGUAJES

UNIVERSIDAD DE CÓRDOBA

ESCUELA POLITÉCNICA SUPERIOR

Á Á ÉDEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO

PROCESADORES DE LENGUAJESPROCESADORES DE LENGUAJESR C A R G AJR C A R G AJINGENIERÍA INFORMÁTICA

PRIMER CURSO DE SEGUNDO CICLOR M R C RS S G N C C

SEGUNDO CUATRIMESTRE

Page 2: PROCESADORES DE LENGUAJES

Ingeniería InformáticaIngeniería Informática Procesadores de LenguajesProcesadores de Lenguajes

PROGRAMA

TEMA I.- INTRODUCCIÓN

TEMA II.- ANÁLISIS LEXICOGRÁFICO

TEMA III - FUNDAMENTOS TEÓRICOS TEMA III.- FUNDAMENTOS TEÓRICOS DEL ANÁLISIS SINTÁCTICO

Á ÁTEMA IV.- ANÁLISIS SINTÁCTICO DESCENDENTE

TEMA V - ANÁLISIS SINTÁCTICO ASCENDENTETEMA V. ANÁLISIS SINTÁCTICO ASCENDENTE

TEMA VI.- TRADUCCIÓN BASADA EN LA SINTAXIS

2Universidad de CórdobaUniversidad de Córdoba Escuela Politécnica SuperiorEscuela Politécnica Superior

Page 3: PROCESADORES DE LENGUAJES

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

3

Page 4: PROCESADORES DE LENGUAJES

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

4

Page 5: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

L l it it l l bl d t ióLos algoritmos permiten resolver los problemas de computación

5

Page 6: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

L l it it l l bl d t ióLos algoritmos permiten resolver los problemas de computación

Programa fuente: algoritmo escrito en un lenguaje de programación

6

Page 7: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

L l it it l l bl d t ióLos algoritmos permiten resolver los problemas de computación

Programa fuente: algoritmo escrito en un lenguaje de programación

Los programas fuentes no pueden ser ejecutados directamente por los ordenadores

7

Page 8: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

L l it it l l bl d t ióLos algoritmos permiten resolver los problemas de computación

Programa fuente: algoritmo escrito en un lenguaje de programación

Los programas fuentes no pueden ser ejecutados directamente por los ordenadores

Los ordenadores sólo ejecutan código escrito en lenguaje máquina

8

Page 9: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

L l it it l l bl d t ióLos algoritmos permiten resolver los problemas de computación

Programa fuente: algoritmo escrito en un lenguaje de programación

Los programas fuentes no pueden ser ejecutados directamente por los ordenadores

Los ordenadores sólo ejecutan código escrito en lenguaje máquina

Problema: transformar el programa fuente en código ejecutable

9

Page 10: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

L l it it l l bl d t ióLos algoritmos permiten resolver los problemas de computación.

Programa fuente: algoritmo escrito en un lenguaje de programación.

Los programas fuentes no pueden ser ejecutados directamente por los ordenadores.

Los ordenadores sólo ejecutan código escrito en lenguaje máquina.

Problema: transformar el programa fuente en código ejecutable.

Programa fuentePrograma fuente TransformadorTransformador Código ejecutableCódigo ejecutableg fg f ff g jg j

10

Page 11: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

E i t d ti d t f ióExisten dos tipos de transformación:

11

Page 12: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

E i t d ti d t f ióExisten dos tipos de transformación:

Traducción

Interpretación

12

Page 13: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

E i t d ti d t f ióExisten dos tipos de transformación:

Traducción

Un programa fuente (alto nivel) es convertido en código ejecutable(bajo nivel) que puede ser ejecutado independientemente.

13

Page 14: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

T d ióTraducción

Programa fuentePrograma fuente TraductorTraductorPrograma fuentePrograma fuente TraductorTraductor

14

Page 15: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

T d ióTraducción

Programa fuentePrograma fuente TraductorTraductorPrograma fuentePrograma fuente TraductorTraductor

Errores de traducciónErrores de traducción

15

Page 16: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

T d ióTraducción

Programa fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutablePrograma fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutable

16

Page 17: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

T d ióTraducciónDatos de entradaDatos de entrada

Programa fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutablePrograma fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutable

17

Page 18: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

T d ióTraducciónDatos de entradaDatos de entrada

Programa fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutablePrograma fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutable

ResultadosResultadosErrores de ejecuciónErrores de ejecución

18

Page 19: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

T d ióTraducciónDatos de entradaDatos de entrada

Programa fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutablePrograma fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutable

ResultadosResultados

19

Page 20: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

E i t d ti d t f iExisten dos tipos de transformaciones

Traducción

Interpretación o simulación: consta de tres fases que se repiten sucesivamente

20

Page 21: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

E i t d ti d t f iExisten dos tipos de transformaciones

Traducción

Interpretación o simulación: consta de tres fases que se repiten sucesivamente

1 Análisis del código fuente para determinar la siguiente sentencia a 1. Análisis del código fuente para determinar la siguiente sentencia a ejecutar.

21

Page 22: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

E i t d ti d t f iExisten dos tipos de transformaciones

Traducción

Interpretación o simulación: consta de tres fases que se repiten sucesivamente

1 Análisis del código fuente para determinar la siguiente sentencia a 1. Análisis del código fuente para determinar la siguiente sentencia a ejecutar.

2. Generación del código que se ha de ejecutar.G g q j

22

Page 23: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

E i t d ti d t f iExisten dos tipos de transformaciones

Traducción

Interpretación o simulación: consta de tres fases que se repiten sucesivamente

1 Análisis del código fuente para determinar la siguiente sentencia a 1. Análisis del código fuente para determinar la siguiente sentencia a ejecutar.

2. Generación del código que se ha de ejecutar.G g q j

3. Ejecución del código generado.

23

Page 24: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

I t t ióInterpretación

Programa fuentePrograma fuente IntérpreteIntérprete

24

Page 25: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

I t t ióInterpretación

Dat d tradaDat d tradaDatos de entradaDatos de entrada

Programa fuentePrograma fuente IntérpreteIntérprete

25

Page 26: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

I t t ióInterpretación

Dat d tradaDat d tradaDatos de entradaDatos de entradaErrores de interpretaciónErrores de interpretación

Programa fuentePrograma fuente IntérpreteIntérprete

26

Page 27: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

I t t ióInterpretación

Dat d tradaDat d tradaDatos de entradaDatos de entrada

Programa fuentePrograma fuente IntérpreteIntérprete

ResultadosResultadosErrores de ejecuciónErrores de ejecución

ResultadosResultados

27

Page 28: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

I t t ióInterpretación

Dat d tradaDat d tradaDatos de entradaDatos de entrada

Programa fuente Programa fuente IntérpreteIntérprete

ResultadosResultadosResultadosResultados

28

Page 29: PROCESADORES DE LENGUAJES

Ó Ó

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

Diferencias fundamentales entre traducción e interpretación:

29

Page 30: PROCESADORES DE LENGUAJES

Ó Ó

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

Diferencias fundamentales entre traducción e interpretación:

Traducción

Independencia:

Interpretación

Dependencia:Independencia:

El código generado se puede ejecutar independientemente del

Dependencia:

El código generado sólo se puede ejecutar con el

programa fuente y del traductor.

Se traduce una vez y se ejecuta h

p jintérprete y el programa fuente.

lmuchas veces. Se interpreta y ejecuta a la vez.

30

Page 31: PROCESADORES DE LENGUAJES

Ó Ó

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

Diferencias fundamentales entre traducción e interpretación:

Traducción

Independencia

Interpretación

DependenciaIndependencia

Necesidades de memoria:

El código generado se ha de

Dependencia

No tiene necesidad de memoria:

El ódi d El código generado se ha de almacenar en memoria.

El código generado no se almacena en memoria.

31

Page 32: PROCESADORES DE LENGUAJES

Ó Ó

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

Diferencias fundamentales entre traducción e interpretación:

Traducción

Independencia

Interpretación

DependenciaIndependencia

Necesidades de memoria

Eficiencia

Dependencia

No tiene necesidad de memoria

M fi i iEficiencia

Una vez generado el código, éste se ejecuta con rapidez.

Menos eficiencia

El código se ha de volver a generar para volver a ser j p generar para volver a ser ejecutado.

32

Page 33: PROCESADORES DE LENGUAJES

Ó Ó

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

Diferencias fundamentales entre traducción e interpretación:

Traducción

Independencia

Interpretación

DependenciaIndependencia

Necesidades de memoria

Eficiencia

Dependencia

No tiene necesidad de memoria

M fi i iEficiencia

Global

P i ió l d l

Menos eficiencia

Local

l d lPosee una visión completa del programa pudiendo generar mensajes de error más detallados.

Posee una visión parcial del programa, ya que interpreta el código sentencia a sentencia.

33

Page 34: PROCESADORES DE LENGUAJES

Ó Ó

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

Diferencias fundamentales entre traducción e interpretación:

Traducción

Independencia

Interpretación

DependenciaIndependencia

Necesidades de memoria

Eficiencia

Dependencia

No tiene necesidad de memoria

M fi i iEficiencia

Global

N i i id d

Menos eficiencia

Local

d dNo interactividad

No permite la interacción con el programa fuente

Interactividad

Permite una interacción con el programa durante su programa fuente programa durante su desarrollo.

34

Page 35: PROCESADORES DE LENGUAJES

Ó Ó

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

Diferencias fundamentales entre traducción e interpretación:

Traducción

Independencia

Interpretación

DependenciaIndependencia

Necesidades de memoria

Eficiencia

Dependencia

No tiene necesidad de memoria

M fi i iEficiencia

Global

N i i id d

Menos eficiencia

Local

d dNo interactividad

No inclusión de código durante la ejecución

Interactividad

Inclusion de código durante la ejecuciónejecución ejecución

v.g.: intérpretes de Smalltalk, Lisp y Prolog.

35

p y g

Page 36: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

C bi ió d l t d ió i t t ió l t iCombinación de la traducción e interpretación: son procesos complementarios

36

Page 37: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

C bi ió d l t d ió i t t ióCombinación de la traducción e interpretación:

Interpretación + traducción:

Se facilita la depuración del código: la interpretación permite la interacción con el programa durante su desarrollo.

El código depurado permite generar código ejecutable más eficienteEl código depurado permite generar código ejecutable más eficiente.

37

Page 38: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

C bi ió d l t d ió i t t ióCombinación de la traducción e interpretación:

Interpretación + traducción:

Se facilita la depuración: la interpretación permite la interacción con el programa durante su desarrollo.

El código depurado permite generar código ejecutable más eficienteEl código depurado permite generar código ejecutable más eficiente.

Traducción + interpretación:

El f d ódi i diEl programa fuente se traduce a código intermedio.

El código intermedio puede ser interpretado en diferentes entornos de ejecuciónde ejecución.

V.g.: Java, C#, …

38

Page 39: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

Tipos de lenguajes

39

Page 40: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

Tipos de lenguajes

Lenguajes interpretados:

Utilizan un intérprete para ejecutar sus programas.p p j p g

V.g.: APL, Lisp, Scheme, Prolog, Java, Smalltalk, etc.

40

Page 41: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

Tipos de lenguajes

Lenguajes interpretados:

Utilizan un intérprete para ejecutar sus programas.p p j p g

Lenguajes compilados:

Utilizan un traductor denominado “compilador” para generar el Utilizan un traductor denominado compilador para generar el programa ejecutable.

V.g.: Fortran, Pascal, Ada, C, C++

41

Page 42: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TRADUCCIÓN E INTEPRETACIÓN

Tipos de lenguajes

Lenguajes interpretados:

Utilizan un intérprete para ejecutar sus programas.p p j p g

Lenguajes compilados:

Utilizan un traductor denominado “compilador” para generar el Utilizan un traductor denominado compilador para generar el programa ejecutable.

No es una clasificación excluyente: existen lenguajes que poseen intérpretes y compiladores:

Intérprete: utilizado para el desarrollo, depuración y puesta a punto.

Compilador: genera el programa ejecutable.

V. g.: Visual Basic, Builder C++, etc.

42

Page 43: PROCESADORES DE LENGUAJES

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”

43

Page 44: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TIPOS DE TRADUCTORES

P dPreprocesador

Compilador

Ensamblador

Enlazador (“linker”)

Cargador (“loader”)

44

Page 45: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TIPOS DE TRADUCTORES

P dPreprocesador

Programa inicial escrito en un lenguaje de alto nivel extendido

Programa final escrito en un lenguaje de alto nivel estándar

V.g.: “cpp” es un preprocesador del lenguaje C que realiza las siguientes acciones:acciones:

Expandir macros: #define PI 3.141592

I l i fi h #i l d di hIncluir ficheros: #include <stdio.h>

Eliminar comentarios: /* Menú principal */

Etc.

Nota: también existen preprocesadores para embellecer el programa fuente.

45

Page 46: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TIPOS DE TRADUCTORES

P dPreprocesador

Compilador

Programa inicial escrito en un lenguaje de alto nivel

Programa final escrito en un lenguaje de bajo nivel (máquina o ensamblador).

46

Page 47: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TIPOS DE TRADUCTORES

P dPreprocesador

Compilador

Ensamblador

Programa inicial escrito en lenguaje ensamblador

Programa final escrito en código máquina

Nota: el ensamblador es un caso particular de compilador.

47

Page 48: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TIPOS DE TRADUCTORES

P dPreprocesador

Compilador

Ensamblador

Enlazador (“linker”)

Programa inicial escrito en código reubicable (posiciones de memoria relativas)

Programa final escrito en código máquina absoluto o ejecutable

Notas:

Además incluye el código de las funciones de las bibliotecas utilizadas por el programa fuente.

Algunas veces genera código reubicable.

48

Page 49: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TIPOS DE TRADUCTORES

P dPreprocesador

Compilador

Ensamblador

Enlazador

Cargador (“loader”):

Programa inicial escrito en código reubicable

Programa final escrito en código máquina ejecutable

Nota: no suele ser un programa independiente.

49

Page 50: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TIPOS DE TRADUCTORES

C bi ió d l ti d t d t Combinación de los tipos de traductores

Programa fuente extendido

PreprocesadorPreprocesador

50

Page 51: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TIPOS DE TRADUCTORES

C bi ió d l ti d t d t Combinación de los tipos de traductores

Programa fuente extendido

PreprocesadorPreprocesador

Programa fuente estándar

51

Page 52: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TIPOS DE TRADUCTORES

C bi ió d l ti d t d t Combinación de los tipos de traductores

Programa fuente extendido

PreprocesadorPreprocesador

Programa fuente estándar

CompiladorCompilador

52

Page 53: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TIPOS DE TRADUCTORES

C bi ió d l ti d t d t Combinación de los tipos de traductores

Programa fuente extendido

PreprocesadorPreprocesador

Programa fuente estándar

CompiladorCompilador

Programa objeto (ensamblador)

53

Page 54: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TIPOS DE TRADUCTORES

C bi ió d l ti d t d t Combinación de los tipos de traductores

Programa fuente extendido

PreprocesadorPreprocesador EnsambladorEnsamblador

Programa fuente estándar

CompiladorCompilador

Programa objeto (ensamblador)

54

Page 55: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TIPOS DE TRADUCTORES

C bi ió d l ti d t d t Combinación de los tipos de traductores

Programa fuente extendido

PreprocesadorPreprocesador EnsambladorEnsamblador

Programa fuente estándar Código máquina reubicable

CompiladorCompilador

Programa objeto (ensamblador)

55

Page 56: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TIPOS DE TRADUCTORES

C bi ió d l ti d t d t Combinación de los tipos de traductores

Programa fuente extendido

PreprocesadorPreprocesador EnsambladorEnsamblador

Programa fuente estándar Código máquina reubicable Biblioteca Biblioteca de de

CompiladorCompilador funcionesfunciones

(código (código

EnlazadorEnlazador

Programa objeto (ensamblador)(código (código

reubicable)reubicable)

56

Page 57: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• TIPOS DE TRADUCTORES

C bi ió d l ti d t d t Combinación de los tipos de traductores

Programa fuente extendido

PreprocesadorPreprocesador EnsambladorEnsamblador

Programa fuente estándar Código máquina reubicable Biblioteca Biblioteca de de

CompiladorCompilador EnlazadorEnlazador funcionesfunciones

(código (código Programa objeto (ensamblador) Código máquina ejecutable

(código (código reubicable)reubicable)

57

Page 58: PROCESADORES DE LENGUAJES

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

58

Page 59: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• PROGRAMAS RELACIONADOS CON LA TRADUCCIÓN

Edit b d l t t i tá ti d l l j d ióEditor basado en la estructura sintáctica del lenguaje de programación

Depurador

Generador del programa ejecutable

Perfilador

Entorno de desarrollo integrado

59

Page 60: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• PROGRAMAS RELACIONADOS CON LA TRADUCCIÓN

Edit b d l t t i tá ti d l l j d ióEditor basado en la estructura sintáctica del lenguaje de programación

Facilita la edición de los programas al mostrar las estructuras de las sentencias de un lenguaje de programación.sentencias de un lenguaje de programación.

Evita la aparición de errores léxicos y, sobre todo, sintácticos.

60

Page 61: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• PROGRAMAS RELACIONADOS CON LA TRADUCCIÓN

Edit b d l t t i tá ti d l l j d ióEditor basado en la estructura sintáctica del lenguaje de programación

Depurador

En realidad es un intérprete que permite ejecutar el programa de forma supervisada.

Permite la ejecución paso a paso del programaPermite la ejecución paso a paso del programa.

Permite comprobar los valores de las variables, establecer puntos de parada, etc.p ,

V.g.: algunos depuradores de C son gdb, ddd, dbx, dbxtool.

61

Page 62: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• PROGRAMAS RELACIONADOS CON LA TRADUCCIÓN

Edit b d l t t i tá ti d l l j d ióEditor basado en la estructura sintáctica del lenguaje de programación

Depurador

Generador del programa ejecutable

Analiza las dependencias del código las bibliotecas de funciones para crear el código ejecutableel código ejecutable.

V.g.: Install Shield, Setup Factory, etc.

62

Page 63: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• PROGRAMAS RELACIONADOS CON LA TRADUCCIÓN

Edit b d l t t i tá ti d l l j d ióEditor basado en la estructura sintáctica del lenguaje de programación

Depurador

Generador del programa ejecutable

Perfilador

Herramienta muy útil para la optimización de los programas.

Permite conocer el perfil de ejecución de un programa.

Genera estadísticas sobre la ejecución del programa relativas a uso de funciones, accesos a memoria, tiempos de ejecución, etc.

Se pueden descubrir “los cuellos de botella”, es decir, dónde se requiere más tiempo de ejecución.

63

Page 64: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• PROGRAMAS RELACIONADOS CON LA TRADUCCIÓN

Edit b d l t t i tá ti d l l j d ióEditor basado en la estructura sintáctica del lenguaje de programación

Depurador

Generador del programa ejecutable

Perfilador

Entorno de desarrollo integrado: incluye

un editor,

un compilador,

un enlazador,

un depurador,

etc.

64

Page 65: PROCESADORES DE LENGUAJES

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

65

Page 66: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Pasos

66

Page 67: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Análisis: se encarga de comprobar que el programa fuente está bien escrito

Síntesis: se ocupa de la generación del código ejecutable

Componentes auxiliares:

Administrador de la tabla de símbolos

Gestor de errores

67

Page 68: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Análisis

Análisis léxico

Síntesis

68

Page 69: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Análisis

Análisis léxico

Análisis sintáctico

Síntesis

69

Page 70: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Análisis

Análisis léxico

Análisis sintáctico

Análisis semántico

Síntesis

70

Page 71: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Análisis

Análisis léxico

Análisis sintáctico

Análisis semántico

Síntesis

Generación de código intermedio

71

Page 72: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Análisis

Análisis léxico

Análisis sintáctico

Análisis semántico

Síntesis

Generación de código intermedio

Optimización de código intermedio

72

Page 73: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Análisis

Análisis léxico

Análisis sintáctico

Análisis semántico

Síntesis

Generación de código intermedio

Optimización de código intermedio

Generación de código

73

Page 74: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Análisis

Análisis léxico

Análisis sintáctico

Análisis semántico

Síntesis

Generación de código intermedio

Optimización de código intermedio

Generación de código

Optimización de código

74

p g

Page 75: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Componentes auxiliares

Administrador de la tabla de símbolos

Gestor de errores

75

Page 76: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

Componentes léxicos

Administrador Administrador

de la tabla de la tabla Gestor de erroresGestor de errores

de símbolosde símbolos

GG

76

Page 77: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

Análisis sintácticoAnálisis sintáctico

Administrador Administrador

de la Tabla de la Tabla Gestor de erroresGestor de errores

Árbol sintáctico

de símbolosde símbolos

GG

77

Page 78: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

Análisis sintácticoAnálisis sintáctico

Análisis semánticoAnálisis semánticoAdministrador Administrador

de la Tabla de la Tabla Gestor de erroresGestor de errores

de símbolosde símbolos

GGÁrbol sintáctico anotado

78

Page 79: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

llAnálisis sintácticoAnálisis sintáctico

Análisis semánticoAnálisis semánticoAdministrador Administrador

de la Tabla de la Tabla

Generación de código intermedioGeneración de código intermediode símbolosde símbolos Gestor de erroresGestor de errores

Código intermedio

79

Page 80: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

llAnálisis sintácticoAnálisis sintáctico

Análisis semánticoAnálisis semánticoAdministrador Administrador

de la Tabla de la Tabla Generación de código intermedioGeneración de código intermediode símbolosde símbolos

Gestor de erroresGestor de errores

Optimización del código intermedioOptimización del código intermedio

Código intermedio optimizado

80

Page 81: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

llAnálisis sintácticoAnálisis sintáctico

Análisis semánticoAnálisis semánticoAdministrador Administrador

de la Tabla de la Tabla Generación de código intermedioGeneración de código intermediode símbolosde símbolos

Gestor de erroresGestor de errores

Optimización del código intermedioOptimización del código intermedio

Generación de códigoGeneración de código

81Código objeto

Page 82: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

Análisis sintácticoAnálisis sintáctico

A áli i á tiA áli i á ti

Análisis sintácticoAnálisis sintáctico

Análisis semánticoAnálisis semántico

G ió d ódi i diG ió d ódi i di

Administrador Administrador

de la Tabla de la Tabla Gestor de erroresGestor de erroresGeneración de código intermedioGeneración de código intermediode símbolosde símbolos

GG

Optimización del código intermedioOptimización del código intermedio

Generación de códigoGeneración de código

82Optimización de códigoOptimización de código Programa objeto

Page 83: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

4 Lenguajes de programación × 4 Sistemas operativos = 16 compiladores

Necesidad de agrupar las fases de la compilación

C Unix

g j p g p p

Pascal

FortranLinux

Fortran

Windows

Ada Mac OS

83

Page 84: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

Análisis léxicoAnálisis léxico

Parte frontal

Análisis sintácticoAnálisis sintáctico

(Front end) Análisis semánticoAnálisis semántico

d d dd d dGeneración de código intermedioGeneración de código intermedio

O ti i ió d l ódi i t diO ti i ió d l ódi i t di

ió d ódiió d ódi

Optimización del código intermedioOptimización del código intermedio

Generación de códigoGeneración de código

Optimización de códigoOptimización de código

Parte trasera (Back end)

84

Optimización de códigoOptimización de código

Page 85: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

4 Partes frontales + 4 Partes traseras = 8 Partes

4 Partes frontales × 4 Partes traseras = 16 Compiladores

C Parte frontald UnixParte traseraI

f p

C

Parte trasera

de C

Parte frontal

Unixde UnixC

Ó

NT

Parte traserade LinuxPascal

Fortran

Parte frontalde Pascal Linux

ÓDI

ERMFortran

Parte frontalde Fortran Windows

Parte traserade Windows

GO

MED

Ada Parte frontald Ad

IO Mac OSParte trasera

de Mac OS

85

de Ada M S

Page 86: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Análisis

Se encarga de comprobar que el programa fuente está bien escrito.

86

Page 87: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Análisis

Análisis léxico

Análisis sintáctico

Análisis semántico

87

Page 88: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

A áli iAnálisis

Análisis léxico

Análisis sintáctico

Análisis semántico

88

Page 89: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

Componentes léxicos

Administrador Administrador

de la tabla de la tabla Gestor de erroresGestor de errores

de símbolosde símbolos

GG

89

Page 90: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

A áli iAnálisis

Análisis léxico

También denominado análisis lexicográfico, análisis lineal, explorador o “scanner”.

90

Page 91: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

A áli iAnálisis

Análisis léxico

También denominado análisis lexicográfico, análisis lineal, explorador o “scanner”.

Única fase que tiene contacto con el código del programa fuente: Única fase que tiene contacto con el código del programa fuente: favorece la modularidad y la interactividad.

91

Page 92: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

A áli iAnálisis

Análisis léxico

También denominado análisis lexicográfico, análisis lineal, explorador o “scanner”.

Única fase que tiene contacto con el código del programa fuente: Única fase que tiene contacto con el código del programa fuente: favorece la modularidad y la interactividad.

Objetivo:j

Leer el programa fuente carácter a carácter y obtener los componentes léxicos o “tokens”

92

Page 93: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

A áli iAnálisis

Análisis léxico

También denominado análisis lexicográfico, análisis lineal, explorador o “scanner”.

Única fase que tiene contacto con el código del programa fuente: Única fase que tiene contacto con el código del programa fuente: favorece la modularidad y la interactividad.

Objetivo:j

Leer el programa fuente carácter a carácter y obtener los componentes léxicos o “tokens”

Programa fuente Analizador léxicoAnalizador léxico Componentes léxicos

93

Page 94: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

A áli iAnálisis

Análisis léxico

Componente léxico o “token”: agrupación de caracteres con significado propio.

Palabras reservadas: if else while Palabras reservadas: if, else, while, …

Identificadores: dato, mayor, bandera, …

O d i é i * / di d Operadores aritméticos: +, -, *, /, div, mod, …

Operadores relacionales: <, <=, >, >=, …

Signos de puntuación: {, }, (, ), ;, …

Etc.

94

Page 95: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

A áli iAnálisis

Análisis léxico

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

Componentes léxicos enviados al análisis sintáctico:Id tifi d r di id dIdentificador: dividendo

Símbolo de asignación: =

Identificador: divisor

Palabra clave IF: if

Los espacios en blanco son suprimidosIdentificador: divisor

Operador aritmético de multiplicación: *

Identificador: cociente

Paréntesis izquierdo: (

Identificador: divisor

d l i l d D T NT ! Identificador: cociente

Operador aritmético de adición: +

Identificador: resto

Operador relacional de DISTINTO: !=

Número: 0.0

P é t i d h )

95

f

Delimitador de fin de sentencia: ;Paréntesis derecho: )

Page 96: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

T bl d í b lTabla de símbolos

NombreNombre AtributoAtributo 11 Atributo 2Atributo 2 ……cocientecociente

dividendodividendo…… …… ……

divisordivisor

dividendodividendo ……

……

……

……

……

……restoresto …… …… ……

…… …… …… ……

96

Page 97: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

A áli iAnálisis

Análisis léxico

Componentes léxicos eliminados durante el análisis léxico

Los espacios en blanco, tabuladores y saltos de línea.

Los comentarios.

La eliminación de estos componentes léxicos es útil porque

Favorecen la lectura y comprensión de los programas.

Pero no son necesarios para generar el código ejecutable.

Generalmente, el análisis léxico es una subrutina o procedimiento auxiliar del análisis sintáctico.

97

Page 98: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

A áli iAnálisis

Análisis léxico

Análisis sintáctico

Análisis semántico

98

Page 99: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

llAnálisis sintácticoAnálisis sintáctico

ÁAdministrador Administrador

de la Tabla de la Tabla Gestor de erroresGestor de errores

Árbol sintáctico

de símbolosde símbolos

GG

99

Page 100: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

A áli iAnálisis

Análisis sintáctico

También denominado análisis jerárquico o gramatical o “parser”.

Objetivos:

Comprobar la sintaxis del código fuente: utiliza las reglas gramaticales del lenguaje fuente y los componentes léxicos.

G ió j á i (fi d ) á b l Generar una representación jerárquica (figurada): árbol sintáctico.

100

Page 101: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

<sentencia condicional simple><sentencia condicional simple>

IF<condición> <sentencia>if

101

Page 102: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

<sentencia condicional simple><sentencia condicional simple>

IF<condición> <sentencia>if

<sentencia de asignación> FIN DE SENTENCIA

<expresión> DISTINTO <expresión>

!=

P. IZQUIERDO P. DERECHO( )

g FIN DE SENTENCIA;

102

Page 103: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

<sentencia condicional simple><sentencia condicional simple>

IF<condición> <sentencia>if

<sentencia de asignación> FIN DE SENTENCIA

<expresión> DISTINTO <expresión>

IDENTIFICADOR NÚMERO!=

P. IZQUIERDO P. DERECHO( )

g FIN DE SENTENCIA;

IDENTIFICADOR NÚMEROdivisor 0.0

103

Page 104: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

<sentencia condicional simple><sentencia condicional simple>

IF<condición> <sentencia>if

<sentencia de asignación> FIN DE SENTENCIA

<expresión> DISTINTO <expresión>

IDENTIFICADOR NÚMERO!=

P. IZQUIERDO P. DERECHO( )

g

<expresión>

FIN DE SENTENCIA

ASIGNACIÓN

;IDENTIFICADOR NÚMERO

IDENTIFICADORdivisor 0.0

dividendo =

104

Page 105: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

<sentencia condicional simple><sentencia condicional simple>

IF<condición> <sentencia>if

<sentencia de asignación> FIN DE SENTENCIA

<expresión> DISTINTO <expresión>

IDENTIFICADOR NÚMERO!=

P. IZQUIERDO P. DERECHO( )

g

<expresión>

FIN DE SENTENCIA

ASIGNACIÓN

;IDENTIFICADOR NÚMERO

IDENTIFICADORdivisor 0.0

<expresión>ADICIÓNdividendo

+

=

<expresión>+

105

Page 106: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

<sentencia condicional simple><sentencia condicional simple>

IF<condición> <sentencia>if

<sentencia de asignación> FIN DE SENTENCIA

<expresión> DISTINTO <expresión>

IDENTIFICADOR NÚMERO!=

P. IZQUIERDO P. DERECHO( )

g

<expresión>

FIN DE SENTENCIA

ASIGNACIÓN

;IDENTIFICADOR NÚMERO

IDENTIFICADORdivisor 0.0

<expresión> <expresión>ADICIÓNdividendo

+

=

<expresión> <expresión>MULTIPLICACIÓN*

+

IDENTIFICADOR

tresto

106

Page 107: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

<sentencia condicional simple><sentencia condicional simple>

IF<condición> <sentencia>if

<sentencia de asignación> FIN DE SENTENCIA

<expresión> DISTINTO <expresión>

IDENTIFICADOR NÚMERO!=

P. IZQUIERDO P. DERECHO( )

g

<expresión>

FIN DE SENTENCIA

ASIGNACIÓN

;IDENTIFICADOR NÚMERO

IDENTIFICADORdivisor 0.0

<expresión>ADICIÓNdividendo

+

=

<expresión>

<expresión> <expresión>MULTIPLICACIÓN*

+

IDENTIFICADOR

trestoIDENTIFICADOR IDENTIFICADOR

cocientedivisor

107

Page 108: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

<sentencia condicional simple><sentencia condicional simple>

IF<condición> <sentencia>

<sentencia de asignación> FIN DE SENTENCIA

<expresión> DISTINTO <expresión>

IDENTIFICADOR NÚMERO

P. IZQUIERDO P. DERECHO

g

<expresión>

FIN DE SENTENCIA

ASIGNACIÓN

IDENTIFICADOR NÚMERO

IDENTIFICADOR

<expresión>ADICIÓN<expresión>

<expresión> <expresión>MULTIPLICACIÓNIDENTIFICADOR

IDENTIFICADOR IDENTIFICADOR

108

Page 109: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

A áli iAnálisis

Análisis léxico

Análisis sintáctico

Análisis semántico

109

Page 110: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

ll

ll

Análisis sintácticoAnálisis sintáctico

Análisis semánticoAnálisis semánticoAdministrador Administrador

de la Tabla de la Tabla Gestor de erroresGestor de erroresÁ

de símbolosde símbolos

GGÁrbol sintáctico anotado

110

Page 111: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

A áli iAnálisis

Análisis semántico

Comprueba si el significado de las sentencias es correcto.

Utiliza el árbol sintáctico y la tabla de símbolos.

Algunos de los errores semánticos que pueden detectar son:

Operandos y operadores incompatibles.

Diferencia de tipos entre los argumentos reales y los argumentos formales.

Etc.

El análisis semántico suele estar integrado en el análisis sintáctico.

111

Page 112: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Análisis

Síntesis

Se encarga de transformar la representación obtenida durante el análisis en el código objeto o ejecutableanálisis en el código objeto o ejecutable

112

Page 113: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Generación de código intermedio

Optimización del código intermedio

Generación de código

Optimización del código

113

Page 114: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Generación de código intermedio

Optimización del código intermedio

Generación de código

Optimización del código

114

Page 115: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

Análisis sintácticoAnálisis sintáctico

A áli i á tiA áli i á ti

Análisis sintácticoAnálisis sintáctico

Análisis semánticoAnálisis semántico

Generación de código intermedioGeneración de código intermedio

Administrador Administrador

de la Tabla de la Tabla Gestor de erroresGestor de erroresGeneración de código intermedioGeneración de código intermediode símbolosde símbolos

GG

Códi i diCódigo intermedio

115

Page 116: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Generación de código intermedio

Genera una representación intermedia del código fuente que ha de tener las siguientes características

Ha de ser fácil de generar a partir del código fuenteHa de ser fácil de generar a partir del código fuente.

Ha de ser fácil de traducir al código objeto o ejecutable

Código fuente Código objeto o ejecutableCódigo intermedio

116

Page 117: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Generación de código intermedio

Genera un representación intermedia del código fuente

Es una fase opcional, pero muy recomendable.

“Redestinación” : al intergrarse en la “parte frontal” del compilador, favorece la generación de código objeto para distintos entornos de ejecución. j

Optimización: se puede aplicar a la representación intermedia una optimización de código que sea independiente de la máquina en la que se ejecutaría.

117

Page 118: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Generación de código intermedio

Este proceso se realiza mediante definiciones dirigidas por la sintaxis o esquemas de traducción que se incorporan al análisis sintáctico.

Tipos de representaciones intermedias:Tipos de representaciones intermedias:

Notación postfija

Á b l i á iÁrboles sintácticos

Grafos dirigidos acíclicos

Código de tres direcciones: cuádruplas, triples y triples indirectos.

118

Page 119: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Generación de código intermedio

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

Representación intermedia en código de tres direcciones:

100. if divisor = 0 goto 104

101. t1 := divisor * cociente101. t1 : divisor cociente

102. t2 := t1 + resto

103 dividendo := t2103. dividendo := t2

104. …

119

Page 120: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Generación de código intermedio

Optimización del código intermedio

Generación de código

Optimización del código

120

Page 121: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

Análisis sintácticoAnálisis sintáctico

Análisis semánticoAnálisis semánticoAdministrador Administrador

de la Tabla de la Tabla

Generación de código intermedioGeneración de código intermediode símbolosde símbolos Gestor de erroresGestor de errores

Optimización del código intermedioOptimización del código intermedio

Código intermedio optimizado

121

Page 122: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Optimización del código intermedio

Esta fase es opcional, pero también es recomendable

Objetivo:

Realizar una optimización del código intermedio que sea independiente de la máquina en la que se ejecute el código objeto.

L i i ió bl NP C lLa optimización es un problema NP-Completo

122

Page 123: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Optimización del código intermedio

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

Optimización de la representación intermedia en código de tres direcciones:direcciones:

100. if divisor = 0 goto 104

di i * i

100. if divisor = 0 goto 103

101 t1 divi r * iente101. t1 := divisor * cociente

102. t2 := t1 + resto

101. t1 := divisor * cociente

102. dividendo := t1 + resto

103. dividendo := t2

104. …

103. …

123

Page 124: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Generación de código intermedio

Optimización del código intermedio

Generación de código

Optimización del código

124

Page 125: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

Análisis sintácticoAnálisis sintáctico

Análisis semánticoAnálisis semánticoAdministrador Administrador

de la Tabla de la Tabla

Generación de código intermedioGeneración de código intermediode símbolosde símbolos Gestor de erroresGestor de errores

Optimización del código intermedioOptimización del código intermedio

Generación de códigoGeneración de código

125Código objeto

Page 126: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Generación de código

Objetivo

Traducir la representación intermedia a código objeto o ejecutable (código máquina)(código máquina).

Ejemplo:

S ódi bj bl dSe va a generar código objeto en ensamblador

Las operaciones aritmético – lógicas se han de realizar sobre registros de máquina: R1 R2 registros de máquina: R1, R2, …

Las proposiciones condicionales son generadas mediante comparaciones (CMP) y saltos condicionales (JE, JLE, …).

126

p ( ) y ( )

Page 127: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Generación de código100 MOV divisor R1100. MOV divisor, R1

101. CMP #0, R1

102 JE 108if (divisor != 0.0)

102. JE 108

103. MOV cociente, R2

U

dividendo = divisor * cociente + resto ;

104. MUL R2, R1

105. MOV resto, R3

106. SUM R3, R1

107. MOV R1, dividendo

127108. …

Page 128: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Generación de código intermedio

Optimización del código intermedio

Generación de código

Optimización del código

128

Page 129: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

Análisis sintácticoAnálisis sintáctico

A áli i á tiA áli i á ti

Análisis sintácticoAnálisis sintáctico

Análisis semánticoAnálisis semántico

G ió d ódi i t diG ió d ódi i t di

Administrador Administrador

de la Tabla de la Tabla Gestor de erroresGestor de erroresGeneración de código intermedioGeneración de código intermediode símbolosde símbolos

GG

Optimización del código intermedioOptimización del código intermedio

Generación de códigoGeneración de código

129Optimización de códigoOptimización de código Programa objeto

Page 130: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Optimización del código

Generar un código más eficiente:

Ejecución más rápida

Ocupar menos espacio de memoria.

La optimización 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 optimización absoluta no siempre se puede alcanzar: sólo se producen mejoras pero no se tiene garantía de que sean óptimas

130

producen mejoras, pero no se tiene garantía de que sean óptimas.

Page 131: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Optimización del código

Las mejores transformaciones son las que obtienen el mayor beneficiocon el menor esfuerzo

Criterios:Criterios:

Se ha de preservar el significado del programa

D b l l d f i blDebe acelerar los programas de forma apreciable

Tiene que merecer la pena

131

Page 132: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Optimización del código

Posibles mejoras del código:

No evaluación repetida de expresiones comunes

Evitar la propagación de copias

Supresión de código inactivo o “muerto”: análisis de control de fl jflujo.

Optimización de bucles: no evaluación de expresiones constantes dentro de los buclesdentro de los bucles

Reutilización de registros de máquina.

Etc

132

Etc.

Page 133: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

Sí t iSíntesis

Optimización del código

100. MOV divisor, R1

101. CMP #0, R1

100. MOV divisor, R1

101. CMP #0, R1

102. JE 108

103. MOV cociente, R2

102. JE 108

103. MOV cociente, R2

104. MUL R2, R1

105. MOV resto, R2

104. MUL R2, R1

105. MOV resto, R3

106. SUM R2, R1

107. MOV R1, dividendo

106. SUM R3, R1

107. MOV R1, dividendo

133

7 M V R , d v d d

108. …108. …

Page 134: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Componentes auxiliares

Administrador de la tabla de símbolos

Gestor de errores

134

Page 135: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

C t iliComponentes auxiliares

Administrador de la tabla de símbolos

Gestor de errores

135

Page 136: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

Análisis sintácticoAnálisis sintáctico

A áli i á tiA áli i á ti

Análisis sintácticoAnálisis sintáctico

Administrador Administrador

de la Tabla de la Tabla

Análisis semánticoAnálisis semántico

G ió d ódi i t diG ió d ódi i t di Gestor de erroresGestor de errores

de símbolosde símbolosGeneración de código intermedioGeneración de código intermedio GG

Optimización del código intermedioOptimización del código intermedio

Generación de códigoGeneración de código

136Optimización de códigoOptimización de código Programa objeto

Page 137: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

C t iliComponentes 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 constantesVariables y constantes

Funciones y procedimientos

P áParámetros

Tipos de datos definidos

Etiquetas

Etc.

137

Page 138: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

C t iliComponentes 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óncompilació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 consultar la tabla de símbolos.

138

Page 139: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

C t iliComponentes auxiliares

Administrador de la tabla de símbolos

V.g.: dato = 3;

N bN b TiTi V lV ldatodato enteroentero 33

NombreNombre TipoTipo ValorValor…………

139

Page 140: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

C t iliComponentes 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.

140

Page 141: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

C t iliComponentes 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 mediante:

Una buena organización de la tabla (v.g.: árbol binario de búsqueda)

La codificación de las funciones de acceso en lenguajes de bajo

141

La codificación de las funciones de acceso en lenguajes de bajo nivel (v.g.: ensamblador).

Page 142: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

C t iliComponentes auxiliares

Administrador de la tabla de símbolos

Gestor de errores

142

Page 143: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducciónProcesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

P f t A áli i lé iA áli i lé iPrograma fuente Análisis léxicoAnálisis léxico

Análisis sintácticoAnálisis sintáctico

A áli i á tiA áli i á ti

Análisis sintácticoAnálisis sintáctico

Gestor de erroresGestor de errores

Análisis semánticoAnálisis semántico

G ió d ódi i t diG ió d ódi i t di

Administrador Administrador

de la Tabla de la Tabla GGGeneración de código intermedioGeneración de código intermediode símbolosde símbolos

Optimización del código intermedioOptimización del código intermedio

Generación de códigoGeneración de código

143Optimización de códigoOptimización de código Programa objeto

Page 144: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

C t iliComponentes auxiliares

Gestor de errores

i d f d lLa 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 iLos 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 iErrores sintácticos: sentencia de control mal escrita

Errores semánticos: uso de una variable en un contexto inadecuado

L ió d d bLa gestión de errores debe:

Informar sobre el error,

i i i ibl i ú l d ió d á 144

y permitir, si es posible, que continúe la traducción para detectar más errores (recuperación del error).

Page 145: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

C t iliComponentes 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 gfinal.

Recuperación del error: debe permitir que la traducción continúe, sobre todo si no se desarrolla en un proceso interactivo.

Evitar la cascada de errores: debe informar de un error sólo una vez aunque aparezca varias veces y no generar otros errores

145

vez, aunque aparezca varias veces, y no generar otros errores.

Page 146: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

C t iliComponentes 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.

- Comprensión: debe ser claro y sencillo

146

Page 147: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

FFases

Pasos

147

Page 148: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

PPasos

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.

148

Page 149: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS

PPasos

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ódigoSegunda 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 )

La técnica de “backpatching” o “relleno de retroceso” permite combinar dos pasadas en una sola. Se requiere una tabla de

149

p q“saltos”.

Page 150: PROCESADORES DE LENGUAJES

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

150

Page 151: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORESCOMPILADORES

Algunas partes del proceso de traducción pueden ser generadas automáticamente

Tipos de herramientas de generación automática:Tipos de herramientas de generación automática:

Generadores automáticos de analizadores léxicos

G d á i d li d i á iGeneradores 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

151

Page 152: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORESCOMPILADORES

Tipos de herramientas de generación automática:

Generadores automáticos de analizadores léxicosGeneradores automáticos de analizadores léxicos

Generadores automáticos de analizadores sintácticos

G d á i d ódi i diGeneradores automáticos de código intermedio

Generadores automáticos de código

Máquinas de optimización de código

152

Page 153: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORESCOMPILADORES

Tipos de herramientas de generación automática:

Generadores automáticos de analizadores léxicosGeneradores 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

Operadores aritméticos, lógicos y relacionales

Sí b l d t a ióSímbolos de puntuación

Comentarios

153

Etc.

Page 154: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORESCOMPILADORES

Tipos de herramientas de generación automática:

Generadores automáticos de analizadores léxicosGeneradores 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

ANTLR

154

ANTLR

Etc.

Page 155: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORESCOMPILADORES

Tipos de herramientas de generación automática:

Generadores automáticos de analizadores léxicosGeneradores automáticos de analizadores léxicos

V.g.: LexLexLexnombre lnombre l lex yy clex yy c

Fichero con expresiones regulares

LexLex

Analizador léxico escrito en lenguaje C

nombre.lnombre.l lex.yy.clex.yy.c

El fichero lex.yy.c contiene una función denominada “yylex()” que r aliza la f i d l a alizad r léxi

p g escrito en lenguaje C

realiza las funciones del analizador léxico.

La función yylex() simula el funcionamiento de un autómata finito determinista (AFD).

155

determinista (AFD).

Page 156: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORESCOMPILADORES

Tipos de herramientas de generación automática:

Generadores automáticos de analizadores léxicosGeneradores automáticos de analizadores léxicos

Generadores automáticos de analizadores sintácticos

G d á i d ódi i diGeneradores automáticos de código intermedio

Generadores automáticos de código

Máquinas de optimización de código

156

Page 157: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORESCOMPILADORES

Tipos de herramientas de generación automática:

Generadores automáticos de analizadores sintácticosGeneradores 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

CUP

ANTLR

157

ANTLR

Etc.

Page 158: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORESCOMPILADORES

Tipos de herramientas de generación automática:

Generadores automáticos de analizadores sintácticosGeneradores automáticos de analizadores sintácticos

V.g.: YACC, Yet Another Compiler Compiler

Fichero con una gramática

YACCYACCnombre.ynombre.y y.tab.cy.tab.c

A 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 realiza las funciones de analizador sintático.

f () l l f d158

La función yyparse() simula el funcionamiento de un autómata con pila.

Page 159: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORESCOMPILADORES

Tipos de herramientas de generación automática:

Generadores automáticos de analizadores léxicosGeneradores automáticos de analizadores léxicos

Generadores automáticos de analizadores sintácticos

G d á i d ódi i diGeneradores automáticos de código intermedio

Generadores automáticos de código

Máquinas de optimización de código

159

Page 160: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORESCOMPILADORES

Tipos de herramientas de generación automática:

Generadores automáticos de código intermedioGeneradores 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 generación de código intermedio

160

Page 161: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORESCOMPILADORES

Tipos de herramientas de generación automática:

Generadores automáticos de analizadores léxicosGeneradores automáticos de analizadores léxicos

Generadores automáticos de analizadores sintácticos

G d á i d ódi i diGeneradores automáticos de código intermedio

Generadores automáticos de código

Máquinas de optimización de código

161

Page 162: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORESCOMPILADORES

Tipos de herramientas de generación automática:

Generadores automáticos de códigoGeneradores 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 demáquina en memoria estática en la pila o el montónmáquina, en memoria estática, en la pila o el montón- Operaciones básicas disponibles

- Etc.

162

E

Las reglas utilizan plantillas de conversión.

Page 163: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORESCOMPILADORES

Tipos de herramientas de generación automática:

Generadores automáticos de analizadores léxicosGeneradores automáticos de analizadores léxicos

Generadores automáticos de analizadores sintácticos

G d á i d ódi i diGeneradores automáticos de código intermedio

Generadores automáticos de código

Máquinas de optimización de código

163

Page 164: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• HERRAMIENTAS PARA LA CONSTRUCCIÓN DE COMPILADORESCOMPILADORES

Tipos de herramientas de generación automática:

Máquinas de optimización de códigoMá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 iSe recoge información sobre la forma en que los valores se transmitende 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ásutilizar más.

Si una variable es utilizada frecuentemente entonces es preferible almacenarla en un registro de máquina.

164

Etc.

Page 165: PROCESADORES DE LENGUAJES

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

165

Page 166: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”La técnica de “bootstrapping” permite combinar compiladores ya creados para La técnica de bootstrapping permite combinar compiladores ya creados para

construir nuevos compiladores

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)

El compilador se pueden representar en forma de Tf

FF OO

II

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

Page 167: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”

Ej l il d 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 UUCC

UU

UU

UU

167

Page 168: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”

Si F I t l il d d i “ t il d ”Si F = I entonces el compilador se denomina “autocompilador”

Ejemplo:

Lenguaje fuente: Lenguaje C

Lenguaje de implementación: Lenguaje máquina de Unix (U)

Lenguaje objeto: Lenguaje C

CC UUCC

CC

UU

CC

Nota: habría que “compilar” este compilador para que se pueda ejecutar,

168

Nota: habría que compilar este compilador para que se pueda ejecutar, porque el lenguaje de implementación no es ejecutable.

Page 169: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”

Si I ≠ O t l il d d i “ il d d ” 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

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)

CC LL

UU

169

Page 170: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”

A li ió d l té i d “b t t i ”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)

LL MMLL

MM

MM

MM

Dificultad: es muy difícil escribir un programa (compilador) directamente en

170

f y f p g ( p )código máquina

Page 171: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”

A li ió d l té i d “b t t i ”Aplicación de la técnica de “bootstrapping”:

Ejemplo 1

Paso 1: se construyen dos compiladores auxiliares

171

Page 172: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”

A li ió d l té i d “b t t i ”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)MMObservación: este compilador se puede construir con más facilidadporque S es más simple que L.11

172

Page 173: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”Aplicación de la técnica de “bootstrapping”:Aplicación de la técnica de bootstrapping :

Ejemplo 1

Paso 1: se construyen dos compiladores auxiliaresPaso 1: se construyen dos compiladores auxiliares

Segundo compilador

Lenguaje fuente: Lenguaje L de alto nivelLenguaje fuente: Lenguaje L de alto nivel

Lenguaje de implementación: Lenguaje S (que es más simple que el lenguaje L de alto nivel)

LL MM

Lenguaje objeto: lenguaje máquina (M)SS

22

173

Page 174: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”Aplicación de la técnica de “bootstrapping”: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

LL MM LL MM

SS MMSS MM

22 MM

11

22 Compilador finalCompilador final

174

11

Page 175: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”

A li ió d l té i d “b t t i ”Aplicación de la técnica de “bootstrapping”:

Forma general: A I B + I M N = A N B

AA BB AA BB

II NN

AA

II

BB AA

NNII

MM

NNII

MM

175

Page 176: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”

A li ió d l té i d “b t t i ”Aplicación de la técnica de “bootstrapping”:

Forma general: A I B + I M N = A N B

AA BB AA BB

II NN

AA

II

BB AA

NNII

MM

NNII

MM

176

Page 177: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”

A li ió d l té i d “b t t i ”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.

LL MM

MM

177

Page 178: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”Aplicación de la técnica de “bootstrapping”:Aplicación de la técnica de bootstrapping :

Ejemplo 2

Sean tres lenguajes de programación: L1 ⊆ L2 ⊆ L3Sean 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)

L3L3 MM

MM

178Compilador finalCompilador final

Page 179: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”

A li ió d l té i d “b t t i ”Aplicación de la técnica de “bootstrapping”:

Ejemplo 2:

Paso 1:

Se construyen los siguientes tres compiladores

L1L1 MM L2L2 MM L3L3 MM

MM L1L1 L2L2

11 22 33

179

Page 180: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”

A li ió d l té i d “b t t i ”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

L2L2 MM L2L2 MM

L1L1 MML1L1 MM

MM22 44

18011

Page 181: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”

A li ió d l té i d “b t t i ”Aplicación de la técnica de “bootstrapping”:

Ejemplo2

Paso 3:

Se compila el compilador 3 con el compilador 4: se crea el compilador finalfinal

L3L3 MM L3L3 MM

L2L2 MML2L2 MM

MM33 Compilador finalCompilador final

18144

Page 182: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”

A li ió d l té i d “b t t i ”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

LL NNLL MM

NNMM

182Compilador originalCompilador original Compilador finalCompilador final

Page 183: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”

A li ió d l té i d “b t t i ”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

LL NN

LL

18311

Page 184: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”Aplicación de la técnica de “bootstrapping”: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

LL NN LL NN

LLLL MMMM

MM11 22

184Compilador originalCompilador original

Page 185: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”Aplicación de la técnica de “bootstrapping”: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

LL NN LL NN

LLLL NNNN

MM11 Compilador finalCompilador final

18522

Page 186: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”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

LL NNLL NN11

LL NNLL

NN

NNLL NNLL

LLLLNN

MM MM11Compilador finalCompilador final

186MM 22p fp f

Compilador originalCompilador original

Page 187: PROCESADORES DE LENGUAJES

Procesadores de Lenguajes Procesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción

• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”Aplicación de la técnica de “bootstrapping”:Aplicación de la técnica de bootstrapping :

Resumen del ejemplo 3:

LL NNLL NN11

LL NNLL

NN

NNLL NNLL

LLLLNN

MM MM11Compilador finalCompilador final

MM 22p fp f

187Compilador originalCompilador original

Page 188: PROCESADORES DE LENGUAJES

UNIVERSIDAD DE CÓRDOBA

ESCUELA POLITÉCNICA SUPERIOR

Á Á ÉDEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO

PROCESADORES DE LENGUAJESPROCESADORES DE LENGUAJESR C A R G AJR C A R G AJINGENIERÍA INFORMÁTICA

PRIMER CURSO DE SEGUNDO CICLOR M R C RS S G N C C

SEGUNDO CUATRIMESTRE