SlideShare una empresa de Scribd logo
1 de 188
Descargar para leer sin conexión
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 AJ
INGENIERÍA INFORMÁTICA
PRIMER CURSO DE SEGUNDO CICLOR M R C RS S G N C C
SEGUNDO CUATRIMESTRE
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ÓRICOSTEMA 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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
TEMA I INTRODUCCIÓNTEMA 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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
TEMA I INTRODUCCIÓNTEMA 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• TRADUCCIÓN E INTEPRETACIÓN
T d ióTraducción
Datos de entradaDatos de entrada
Programa fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutablePrograma fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutable
17
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• TRADUCCIÓN E INTEPRETACIÓN
T d ióTraducción
Datos 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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• TRADUCCIÓN E INTEPRETACIÓN
T d ióTraducción
Datos de entradaDatos de entrada
Programa fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutablePrograma fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutable
ResultadosResultados
19
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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 a1. Análisis del código fuente para determinar la siguiente sentencia a
ejecutar.
21
Procesadores de LenguajesProcesadores 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 a1. 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
Procesadores de LenguajesProcesadores 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 a1. 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Errores de interpretaciónErrores de interpretación
Programa fuentePrograma fuente IntérpreteIntérprete
26
Procesadores de LenguajesProcesadores 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
ResultadosResultados
Errores de ejecuciónErrores de ejecución
ResultadosResultados
27
Procesadores de LenguajesProcesadores 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
ResultadosResultadosResultadosResultados
28
Ó Ó
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• TRADUCCIÓN E INTEPRETACIÓN
Diferencias fundamentales entre traducción e interpretación:
29
Ó Ó
Procesadores de LenguajesProcesadores 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 j
intérprete y el programa
fuente.
lmuchas veces. Se interpreta y ejecuta a la
vez.
30
Ó Ó
Procesadores de LenguajesProcesadores 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 dEl código generado se ha de
almacenar en memoria.
El código generado no se
almacena en memoria.
31
Ó Ó
Procesadores de LenguajesProcesadores 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 serj p generar para volver a ser
ejecutado.
32
Ó Ó
Procesadores de LenguajesProcesadores 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
Ó Ó
Procesadores de LenguajesProcesadores 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 suprograma fuente programa durante su
desarrollo.
34
Ó Ó
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• TRADUCCIÓN E INTEPRETACIÓN
Tipos de lenguajes
39
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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 elUtilizan un traductor denominado compilador para generar el
programa ejecutable.
V.g.: Fortran, Pascal, Ada, C, C++
41
Procesadores de LenguajesProcesadores 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 elUtilizan 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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
TEMA I INTRODUCCIÓNTEMA 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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• TIPOS DE TRADUCTORES
P dPreprocesador
Compilador
Ensamblador
Enlazador (“linker”)
Cargador (“loader”)
44
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• TIPOS DE TRADUCTORES
C bi ió d l ti d t d tCombinación de los tipos de traductores
Programa fuente extendido
PreprocesadorPreprocesador
50
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• TIPOS DE TRADUCTORES
C bi ió d l ti d t d tCombinación de los tipos de traductores
Programa fuente extendido
PreprocesadorPreprocesador
Programa fuente estándar
51
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• TIPOS DE TRADUCTORES
C bi ió d l ti d t d tCombinación de los tipos de traductores
Programa fuente extendido
PreprocesadorPreprocesador
Programa fuente estándar
CompiladorCompilador
52
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• TIPOS DE TRADUCTORES
C bi ió d l ti d t d tCombinación de los tipos de traductores
Programa fuente extendido
PreprocesadorPreprocesador
Programa fuente estándar
CompiladorCompilador
Programa objeto (ensamblador)
53
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• TIPOS DE TRADUCTORES
C bi ió d l ti d t d tCombinación de los tipos de traductores
Programa fuente extendido
PreprocesadorPreprocesador EnsambladorEnsamblador
Programa fuente estándar
CompiladorCompilador
Programa objeto (ensamblador)
54
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• TIPOS DE TRADUCTORES
C bi ió d l ti d t d tCombinació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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• TIPOS DE TRADUCTORES
C bi ió d l ti d t d tCombinación de los tipos de traductores
Programa fuente extendido
PreprocesadorPreprocesador EnsambladorEnsamblador
Programa fuente estándar Código máquina reubicable BibliotecaBiblioteca
dede
CompiladorCompilador funcionesfunciones
(código(código
EnlazadorEnlazador
Programa objeto (ensamblador)
(código(código
reubicable)reubicable)
56
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• TIPOS DE TRADUCTORES
C bi ió d l ti d t d tCombinación de los tipos de traductores
Programa fuente extendido
PreprocesadorPreprocesador EnsambladorEnsamblador
Programa fuente estándar Código máquina reubicable BibliotecaBiblioteca
dede
CompiladorCompilador EnlazadorEnlazador funcionesfunciones
(código(código
Programa objeto (ensamblador) Código máquina ejecutable
(código(código
reubicable)reubicable)
57
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
TEMA I INTRODUCCIÓNTEMA 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
TEMA I INTRODUCCIÓNTEMA 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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
FFases
Pasos
66
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
AdministradorAdministrador
de la tablade la tabla Gestor de erroresGestor de errores
de símbolosde símbolos
GG
76
Procesadores de LenguajesProcesadores 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
AdministradorAdministrador
de la Tablade la Tabla Gestor de erroresGestor de errores
Árbol sintáctico
de símbolosde símbolos
GG
77
Procesadores de LenguajesProcesadores 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ánticoAdministradorAdministrador
de la Tablade la Tabla Gestor de erroresGestor de errores
de símbolosde símbolos
GG
Árbol sintáctico anotado
78
Procesadores de LenguajesProcesadores 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ánticoAdministradorAdministrador
de la Tablade 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
Procesadores de LenguajesProcesadores 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ánticoAdministradorAdministrador
de la Tablade 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
Procesadores de LenguajesProcesadores 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ánticoAdministradorAdministrador
de la Tablade 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
Procesadores de LenguajesProcesadores 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
AdministradorAdministrador
de la Tablade la Tabla Gestor de erroresGestor de errores
Generación de código intermedioGeneración de código intermedio
de 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
Procesadores de LenguajesProcesadores 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
Fortran
Linux
Fortran
Windows
Ada Mac OS
83
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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 frontal
d UnixParte traseraI
f p
C
Parte trasera
de C
Parte frontal
Unix
de Unix
C
Ó
N
T
Parte trasera
de LinuxPascal
Fortran
Parte frontal
de Pascal Linux
Ó
D
I
E
R
MFortran
Parte frontal
de Fortran Windows
Parte trasera
de Windows
G
O
M
E
D
Ada Parte frontal
d Ad
I
O Mac OS
Parte trasera
de Mac OS
85
de Ada M S
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
AdministradorAdministrador
de la tablade la tabla Gestor de erroresGestor de errores
de símbolosde símbolos
GG
89
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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 whilePalabras reservadas: if, else, while, …
Identificadores: dato, mayor, bandera, …
O d i é i * / di dOperadores aritméticos: +, -, *, /, div, mod, …
Operadores relacionales: <, <=, >, >=, …
Signos de puntuación: {, }, (, ), ;, …
Etc.
94
Procesadores de LenguajesProcesadores 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 suprimidos
Identificador: 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: )
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
ÁAdministradorAdministrador
de la Tablade la Tabla Gestor de erroresGestor de errores
Árbol sintáctico
de símbolosde símbolos
GG
99
Procesadores de LenguajesProcesadores 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 lGenerar una representación jerárquica (figurada): árbol
sintáctico.
100
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
<sentencia condicional simple><sentencia condicional simple>
IF
<condición> <sentencia>if
101
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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ÚMERO
divisor 0.0
103
Procesadores de LenguajesProcesadores 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
IDENTIFICADOR
divisor 0.0
dividendo =
104
Procesadores de LenguajesProcesadores 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
IDENTIFICADOR
divisor 0.0
<expresión>ADICIÓN
dividendo
+
=
<expresión>
+
105
Procesadores de LenguajesProcesadores 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
IDENTIFICADOR
divisor 0.0
<expresión> <expresión>ADICIÓN
dividendo
+
=
<expresión> <expresión>MULTIPLICACIÓN
*
+
IDENTIFICADOR
tresto
106
Procesadores de LenguajesProcesadores 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
IDENTIFICADOR
divisor 0.0
<expresión>ADICIÓN
dividendo
+
=
<expresión>
<expresión> <expresión>MULTIPLICACIÓN
*
+
IDENTIFICADOR
tresto
IDENTIFICADOR IDENTIFICADOR
cocientedivisor
107
Procesadores de LenguajesProcesadores 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ÓN
IDENTIFICADOR
IDENTIFICADOR IDENTIFICADOR
108
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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ánticoAdministradorAdministrador
de la Tablade la Tabla Gestor de erroresGestor de errores
Á
de símbolosde símbolos
GG
Árbol sintáctico anotado
110
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
AdministradorAdministrador
de la Tablade la Tabla Gestor de erroresGestor de erroresGeneración de código intermedioGeneración de código intermedio
de símbolosde símbolos
GG
Códi i diCódigo intermedio
115
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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ánticoAdministradorAdministrador
de la Tablade 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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ántico
AdministradorAdministrador
de la Tablade 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
Procesadores de LenguajesProcesadores 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 R2registros de máquina: R1, R2, …
Las proposiciones condicionales son generadas mediante
comparaciones (CMP) y saltos condicionales (JE, JLE, …).
126
p ( ) y ( )
Procesadores de LenguajesProcesadores 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
100 MOV divisor R1100. MOV divisor, R1
101. CMP #0, R1
102 JE 108
if (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
127
108. …
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
AdministradorAdministrador
de la Tablade la Tabla Gestor de erroresGestor de erroresGeneración de código intermedioGeneración de código intermedio
de 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
Procesadores de LenguajesProcesadores 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.
Procesadores de LenguajesProcesadores 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 beneficio
con 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
Procesadores de LenguajesProcesadores 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.
Procesadores de LenguajesProcesadores 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. …
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
AdministradorAdministrador
de la Tablade 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ímbolos
Generació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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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 l
datodato enteroentero 33
NombreNombre TipoTipo ValorValor
……
……
139
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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).
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducciónProcesadores de LenguajesProcesadores 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
AdministradorAdministrador
de la Tablade la Tabla GGGeneración de código intermedioGeneración de código intermedio
de 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
Procesadores de LenguajesProcesadores 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).
Procesadores de LenguajesProcesadores 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 g
final.
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.
Procesadores de LenguajesProcesadores 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
lque 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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS
FFases
Pasos
147
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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 dAlgol 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”.
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
TEMA I INTRODUCCIÓNTEMA 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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.
Procesadores de LenguajesProcesadores 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.
Procesadores de LenguajesProcesadores 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.: Lex
LexLexnombre 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).
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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.
Procesadores de LenguajesProcesadores 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á tiFichero 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 d
158
La función yyparse() simula el funcionamiento de un autómata con
pila.
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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 dAl crear el árbol sintáctico, se ejecutan las acciones semánticas de
generación de código intermedio
160
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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 ódiLas 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ódigoLas características de la máquina donde se va a ejecutar el código
objeto:
- Acceso a las variables: almacenamiento en registros de
máquina en memoria estática en la pila o el montó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.
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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 transmiten
de una parte a otra del programa
Ejemplos:Ejemplos:
Análisis de “uso siguiente” o de “vida”: se comprueba en qué
lugares se usa una variable y, especialmente, cuándo no se va a
utilizar másutilizar más.
Si una variable es utilizada frecuentemente entonces es preferible
almacenarla en un registro de máquina.
164
Etc.
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
TEMA I INTRODUCCIÓNTEMA 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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
La técnica de “bootstrapping” permite combinar compiladores ya creados paraLa 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
Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción
• COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING”
Ej l il dEjemplo: 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
Procesadores de LenguajesProcesadores 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.
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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)MM
Observación: este compilador se puede construir con más facilidad
porque S es más simple que L.11
172
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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 elPaso 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
Procesadores de LenguajesProcesadores 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
NN
II
MM
NNII
MM
175
Procesadores de LenguajesProcesadores 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
NN
II
MM
NNII
MM
176
Procesadores de LenguajesProcesadores 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 lenguajeun lenguaje de alto nivel L, entonces se utilizan subconjuntos del lenguaje
inicial.
LL MM
MM
177
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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 MCompilador original: L M M
Objetivo: L N N
LL NNLL MM
NNMM
182
Compilador originalCompilador original Compilador finalCompilador final
Procesadores de LenguajesProcesadores 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
183
11
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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
Procesadores de LenguajesProcesadores 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 NN
LL NN11
LL NN
LL
NN
NN
LL NNLL
LLLL
NN
MM MM11
Compilador finalCompilador final
186MM 22
p fp f
Compilador originalCompilador original
Procesadores de LenguajesProcesadores 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 NN
LL NN11
LL NN
LL
NN
NN
LL NNLL
LLLL
NN
MM MM11
Compilador finalCompilador final
MM 22
p fp f
187Compilador originalCompilador original
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 AJ
INGENIERÍA INFORMÁTICA
PRIMER CURSO DE SEGUNDO CICLOR M R C RS S G N C C
SEGUNDO CUATRIMESTRE

Más contenido relacionado

La actualidad más candente (10)

Diseño de Algoritmos
 Diseño de Algoritmos Diseño de Algoritmos
Diseño de Algoritmos
 
Cap2
Cap2Cap2
Cap2
 
Trabajo final
Trabajo finalTrabajo final
Trabajo final
 
Exa1
Exa1Exa1
Exa1
 
Compilador e interpretador
Compilador e interpretadorCompilador e interpretador
Compilador e interpretador
 
01 lenguaje-c
01 lenguaje-c01 lenguaje-c
01 lenguaje-c
 
Bootstrapping
BootstrappingBootstrapping
Bootstrapping
 
PROGRAMACION EN C
PROGRAMACION EN CPROGRAMACION EN C
PROGRAMACION EN C
 
1. que es programacion
1. que es programacion1. que es programacion
1. que es programacion
 
Presentacion
PresentacionPresentacion
Presentacion
 

Destacado (20)

Àlbum Fotogràfic
Àlbum FotogràficÀlbum Fotogràfic
Àlbum Fotogràfic
 
Melisa Gerber Portrait Sculptures
Melisa Gerber Portrait SculpturesMelisa Gerber Portrait Sculptures
Melisa Gerber Portrait Sculptures
 
网络广告研究
网络广告研究网络广告研究
网络广告研究
 
Aastajad
AastajadAastajad
Aastajad
 
Matematikk og Kunnskapsløftet
Matematikk og KunnskapsløftetMatematikk og Kunnskapsløftet
Matematikk og Kunnskapsløftet
 
Caricatura
CaricaturaCaricatura
Caricatura
 
Núcleo terminal, Serv. social y Titulación
Núcleo terminal, Serv. social y TitulaciónNúcleo terminal, Serv. social y Titulación
Núcleo terminal, Serv. social y Titulación
 
Test 1.
Test 1.Test 1.
Test 1.
 
Rabota_uchenika_2
Rabota_uchenika_2Rabota_uchenika_2
Rabota_uchenika_2
 
Xogamos cos nomes
Xogamos cos nomesXogamos cos nomes
Xogamos cos nomes
 
(Dutch) Web 2.0 Succesfactoren @ Overheid 2.0
(Dutch) Web 2.0 Succesfactoren @ Overheid 2.0(Dutch) Web 2.0 Succesfactoren @ Overheid 2.0
(Dutch) Web 2.0 Succesfactoren @ Overheid 2.0
 
nowy2
nowy2nowy2
nowy2
 
visuals
visualsvisuals
visuals
 
Aula3
Aula3Aula3
Aula3
 
konfi01
konfi01konfi01
konfi01
 
Bcsp Nepro1
Bcsp Nepro1Bcsp Nepro1
Bcsp Nepro1
 
Sleeping Baby
Sleeping BabySleeping Baby
Sleeping Baby
 
My Audi R8
My Audi R8My Audi R8
My Audi R8
 
Como evitar enfermarse
Como evitar enfermarseComo evitar enfermarse
Como evitar enfermarse
 
Air Pollution
Air PollutionAir Pollution
Air Pollution
 

Similar a Tema 1-introduccion-pl (20)

Introduccion a la programacion
Introduccion a la programacionIntroduccion a la programacion
Introduccion a la programacion
 
Tema1
Tema1Tema1
Tema1
 
02- Clase 1 - UD2 - Lenguajes.pdf
02- Clase 1 - UD2 -  Lenguajes.pdf02- Clase 1 - UD2 -  Lenguajes.pdf
02- Clase 1 - UD2 - Lenguajes.pdf
 
compiladores.pptx presentación de compiladores
compiladores.pptx presentación de compiladorescompiladores.pptx presentación de compiladores
compiladores.pptx presentación de compiladores
 
Presentacion c
Presentacion cPresentacion c
Presentacion c
 
Algoritmos - Curso UNE
Algoritmos - Curso UNEAlgoritmos - Curso UNE
Algoritmos - Curso UNE
 
Presentacion c
Presentacion cPresentacion c
Presentacion c
 
Sesion1
Sesion1Sesion1
Sesion1
 
Introduccion ensamblador
Introduccion ensambladorIntroduccion ensamblador
Introduccion ensamblador
 
Introducccion programacion
Introducccion programacionIntroducccion programacion
Introducccion programacion
 
Diseno dealgoritmos
Diseno dealgoritmosDiseno dealgoritmos
Diseno dealgoritmos
 
TEMA 01 PROGRAMACION .pdf
TEMA 01 PROGRAMACION .pdfTEMA 01 PROGRAMACION .pdf
TEMA 01 PROGRAMACION .pdf
 
Leccion1 2
Leccion1 2Leccion1 2
Leccion1 2
 
Conceptos Básicos de Programación
Conceptos Básicos de ProgramaciónConceptos Básicos de Programación
Conceptos Básicos de Programación
 
Tema1
Tema1Tema1
Tema1
 
Tema1.ppt
Tema1.pptTema1.ppt
Tema1.ppt
 
Conceptos basicos algoritmos
Conceptos basicos algoritmosConceptos basicos algoritmos
Conceptos basicos algoritmos
 
Universidad de panamá kathia j
Universidad de panamá kathia jUniversidad de panamá kathia j
Universidad de panamá kathia j
 
Presentación Informática
Presentación InformáticaPresentación Informática
Presentación Informática
 
Clase 1 - Programación.pptx
Clase 1 - Programación.pptxClase 1 - Programación.pptx
Clase 1 - Programación.pptx
 

Último

Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
QUINTA SEXTA GENERACION de COMPUTADORAS
QUINTA  SEXTA GENERACION de COMPUTADORASQUINTA  SEXTA GENERACION de COMPUTADORAS
QUINTA SEXTA GENERACION de COMPUTADORASMarc Liust
 
Función del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionFunción del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionEmanuelMuoz11
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...axelv9257
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfaxelv9257
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxgustavovasquezv56
 
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendidaLuis Francisco Reyes Aceves
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfYanitza28
 
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptxAVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptxdulcemonterroza
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfYanitza28
 
10°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-810°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-8antoniopalmieriluna
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 

Último (18)

Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
QUINTA SEXTA GENERACION de COMPUTADORAS
QUINTA  SEXTA GENERACION de COMPUTADORASQUINTA  SEXTA GENERACION de COMPUTADORAS
QUINTA SEXTA GENERACION de COMPUTADORAS
 
Función del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacionFunción del analizador léxico.pdf presentacion
Función del analizador léxico.pdf presentacion
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
 
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
2023 07 Casos prácticos para Realidad aumentada, metaverso y realidad extendida
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdf
 
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptxAVANCES TECNOLOGICOS  DEL SIGLO XXI. 10-08..pptx
AVANCES TECNOLOGICOS DEL SIGLO XXI. 10-08..pptx
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdf
 
10°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-810°8 - Avances tecnologicos del siglo XXI 10-8
10°8 - Avances tecnologicos del siglo XXI 10-8
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 

Tema 1-introduccion-pl

  • 1. 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 AJ INGENIERÍA INFORMÁTICA PRIMER CURSO DE SEGUNDO CICLOR M R C RS S G N C C SEGUNDO CUATRIMESTRE
  • 2. 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ÓRICOSTEMA 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
  • 3. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción TEMA I INTRODUCCIÓNTEMA 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
  • 4. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción TEMA I INTRODUCCIÓNTEMA 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
  • 5. Procesadores de LenguajesProcesadores 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
  • 6. Procesadores de LenguajesProcesadores 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
  • 7. Procesadores de LenguajesProcesadores 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
  • 8. Procesadores de LenguajesProcesadores 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
  • 9. Procesadores de LenguajesProcesadores 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
  • 10. Procesadores de LenguajesProcesadores 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
  • 11. Procesadores de LenguajesProcesadores 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
  • 12. Procesadores de LenguajesProcesadores 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
  • 13. Procesadores de LenguajesProcesadores 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
  • 14. Procesadores de LenguajesProcesadores 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
  • 15. Procesadores de LenguajesProcesadores 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
  • 16. Procesadores de LenguajesProcesadores 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
  • 17. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • TRADUCCIÓN E INTEPRETACIÓN T d ióTraducción Datos de entradaDatos de entrada Programa fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutablePrograma fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutable 17
  • 18. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • TRADUCCIÓN E INTEPRETACIÓN T d ióTraducción Datos 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
  • 19. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • TRADUCCIÓN E INTEPRETACIÓN T d ióTraducción Datos de entradaDatos de entrada Programa fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutablePrograma fuentePrograma fuente TraductorTraductor Código ejecutableCódigo ejecutable ResultadosResultados 19
  • 20. Procesadores de LenguajesProcesadores 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
  • 21. Procesadores de LenguajesProcesadores 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 a1. Análisis del código fuente para determinar la siguiente sentencia a ejecutar. 21
  • 22. Procesadores de LenguajesProcesadores 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 a1. 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
  • 23. Procesadores de LenguajesProcesadores 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 a1. 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
  • 24. Procesadores de LenguajesProcesadores 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
  • 25. Procesadores de LenguajesProcesadores 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
  • 26. Procesadores de LenguajesProcesadores 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 Errores de interpretaciónErrores de interpretación Programa fuentePrograma fuente IntérpreteIntérprete 26
  • 27. Procesadores de LenguajesProcesadores 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 ResultadosResultados Errores de ejecuciónErrores de ejecución ResultadosResultados 27
  • 28. Procesadores de LenguajesProcesadores 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 ResultadosResultadosResultadosResultados 28
  • 29. Ó Ó Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • TRADUCCIÓN E INTEPRETACIÓN Diferencias fundamentales entre traducción e interpretación: 29
  • 30. Ó Ó Procesadores de LenguajesProcesadores 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 j intérprete y el programa fuente. lmuchas veces. Se interpreta y ejecuta a la vez. 30
  • 31. Ó Ó Procesadores de LenguajesProcesadores 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 dEl código generado se ha de almacenar en memoria. El código generado no se almacena en memoria. 31
  • 32. Ó Ó Procesadores de LenguajesProcesadores 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 serj p generar para volver a ser ejecutado. 32
  • 33. Ó Ó Procesadores de LenguajesProcesadores 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
  • 34. Ó Ó Procesadores de LenguajesProcesadores 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 suprograma fuente programa durante su desarrollo. 34
  • 35. Ó Ó Procesadores de LenguajesProcesadores 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
  • 36. Procesadores de LenguajesProcesadores 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
  • 37. Procesadores de LenguajesProcesadores 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
  • 38. Procesadores de LenguajesProcesadores 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
  • 39. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • TRADUCCIÓN E INTEPRETACIÓN Tipos de lenguajes 39
  • 40. Procesadores de LenguajesProcesadores 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
  • 41. Procesadores de LenguajesProcesadores 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 elUtilizan un traductor denominado compilador para generar el programa ejecutable. V.g.: Fortran, Pascal, Ada, C, C++ 41
  • 42. Procesadores de LenguajesProcesadores 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 elUtilizan 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
  • 43. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción TEMA I INTRODUCCIÓNTEMA 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
  • 44. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • TIPOS DE TRADUCTORES P dPreprocesador Compilador Ensamblador Enlazador (“linker”) Cargador (“loader”) 44
  • 45. Procesadores de LenguajesProcesadores 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
  • 46. Procesadores de LenguajesProcesadores 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
  • 47. Procesadores de LenguajesProcesadores 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
  • 48. Procesadores de LenguajesProcesadores 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
  • 49. Procesadores de LenguajesProcesadores 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
  • 50. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • TIPOS DE TRADUCTORES C bi ió d l ti d t d tCombinación de los tipos de traductores Programa fuente extendido PreprocesadorPreprocesador 50
  • 51. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • TIPOS DE TRADUCTORES C bi ió d l ti d t d tCombinación de los tipos de traductores Programa fuente extendido PreprocesadorPreprocesador Programa fuente estándar 51
  • 52. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • TIPOS DE TRADUCTORES C bi ió d l ti d t d tCombinación de los tipos de traductores Programa fuente extendido PreprocesadorPreprocesador Programa fuente estándar CompiladorCompilador 52
  • 53. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • TIPOS DE TRADUCTORES C bi ió d l ti d t d tCombinación de los tipos de traductores Programa fuente extendido PreprocesadorPreprocesador Programa fuente estándar CompiladorCompilador Programa objeto (ensamblador) 53
  • 54. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • TIPOS DE TRADUCTORES C bi ió d l ti d t d tCombinación de los tipos de traductores Programa fuente extendido PreprocesadorPreprocesador EnsambladorEnsamblador Programa fuente estándar CompiladorCompilador Programa objeto (ensamblador) 54
  • 55. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • TIPOS DE TRADUCTORES C bi ió d l ti d t d tCombinació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
  • 56. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • TIPOS DE TRADUCTORES C bi ió d l ti d t d tCombinación de los tipos de traductores Programa fuente extendido PreprocesadorPreprocesador EnsambladorEnsamblador Programa fuente estándar Código máquina reubicable BibliotecaBiblioteca dede CompiladorCompilador funcionesfunciones (código(código EnlazadorEnlazador Programa objeto (ensamblador) (código(código reubicable)reubicable) 56
  • 57. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • TIPOS DE TRADUCTORES C bi ió d l ti d t d tCombinación de los tipos de traductores Programa fuente extendido PreprocesadorPreprocesador EnsambladorEnsamblador Programa fuente estándar Código máquina reubicable BibliotecaBiblioteca dede CompiladorCompilador EnlazadorEnlazador funcionesfunciones (código(código Programa objeto (ensamblador) Código máquina ejecutable (código(código reubicable)reubicable) 57
  • 58. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción TEMA I INTRODUCCIÓNTEMA 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
  • 59. Procesadores de LenguajesProcesadores 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
  • 60. Procesadores de LenguajesProcesadores 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
  • 61. Procesadores de LenguajesProcesadores 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
  • 62. Procesadores de LenguajesProcesadores 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
  • 63. Procesadores de LenguajesProcesadores 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
  • 64. Procesadores de LenguajesProcesadores 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
  • 65. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción TEMA I INTRODUCCIÓNTEMA 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
  • 66. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS FFases Pasos 66
  • 67. Procesadores de LenguajesProcesadores 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
  • 68. Procesadores de LenguajesProcesadores 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
  • 69. Procesadores de LenguajesProcesadores 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
  • 70. Procesadores de LenguajesProcesadores 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
  • 71. Procesadores de LenguajesProcesadores 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
  • 72. Procesadores de LenguajesProcesadores 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
  • 73. Procesadores de LenguajesProcesadores 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
  • 74. Procesadores de LenguajesProcesadores 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
  • 75. Procesadores de LenguajesProcesadores 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
  • 76. Procesadores de LenguajesProcesadores 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 AdministradorAdministrador de la tablade la tabla Gestor de erroresGestor de errores de símbolosde símbolos GG 76
  • 77. Procesadores de LenguajesProcesadores 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 AdministradorAdministrador de la Tablade la Tabla Gestor de erroresGestor de errores Árbol sintáctico de símbolosde símbolos GG 77
  • 78. Procesadores de LenguajesProcesadores 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ánticoAdministradorAdministrador de la Tablade la Tabla Gestor de erroresGestor de errores de símbolosde símbolos GG Árbol sintáctico anotado 78
  • 79. Procesadores de LenguajesProcesadores 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ánticoAdministradorAdministrador de la Tablade 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
  • 80. Procesadores de LenguajesProcesadores 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ánticoAdministradorAdministrador de la Tablade 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
  • 81. Procesadores de LenguajesProcesadores 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ánticoAdministradorAdministrador de la Tablade 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
  • 82. Procesadores de LenguajesProcesadores 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 AdministradorAdministrador de la Tablade la Tabla Gestor de erroresGestor de errores Generación de código intermedioGeneración de código intermedio de 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
  • 83. Procesadores de LenguajesProcesadores 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 Fortran Linux Fortran Windows Ada Mac OS 83
  • 84. Procesadores de LenguajesProcesadores 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
  • 85. Procesadores de LenguajesProcesadores 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 frontal d UnixParte traseraI f p C Parte trasera de C Parte frontal Unix de Unix C Ó N T Parte trasera de LinuxPascal Fortran Parte frontal de Pascal Linux Ó D I E R MFortran Parte frontal de Fortran Windows Parte trasera de Windows G O M E D Ada Parte frontal d Ad I O Mac OS Parte trasera de Mac OS 85 de Ada M S
  • 86. Procesadores de LenguajesProcesadores 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
  • 87. Procesadores de LenguajesProcesadores 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
  • 88. Procesadores de LenguajesProcesadores 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
  • 89. Procesadores de LenguajesProcesadores 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 AdministradorAdministrador de la tablade la tabla Gestor de erroresGestor de errores de símbolosde símbolos GG 89
  • 90. Procesadores de LenguajesProcesadores 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
  • 91. Procesadores de LenguajesProcesadores 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
  • 92. Procesadores de LenguajesProcesadores 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
  • 93. Procesadores de LenguajesProcesadores 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
  • 94. Procesadores de LenguajesProcesadores 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 whilePalabras reservadas: if, else, while, … Identificadores: dato, mayor, bandera, … O d i é i * / di dOperadores aritméticos: +, -, *, /, div, mod, … Operadores relacionales: <, <=, >, >=, … Signos de puntuación: {, }, (, ), ;, … Etc. 94
  • 95. Procesadores de LenguajesProcesadores 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 suprimidos Identificador: 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: )
  • 96. Procesadores de LenguajesProcesadores 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
  • 97. Procesadores de LenguajesProcesadores 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
  • 98. Procesadores de LenguajesProcesadores 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
  • 99. Procesadores de LenguajesProcesadores 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 ÁAdministradorAdministrador de la Tablade la Tabla Gestor de erroresGestor de errores Árbol sintáctico de símbolosde símbolos GG 99
  • 100. Procesadores de LenguajesProcesadores 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 lGenerar una representación jerárquica (figurada): árbol sintáctico. 100
  • 101. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción <sentencia condicional simple><sentencia condicional simple> IF <condición> <sentencia>if 101
  • 102. Procesadores de LenguajesProcesadores 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
  • 103. Procesadores de LenguajesProcesadores 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ÚMERO divisor 0.0 103
  • 104. Procesadores de LenguajesProcesadores 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 IDENTIFICADOR divisor 0.0 dividendo = 104
  • 105. Procesadores de LenguajesProcesadores 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 IDENTIFICADOR divisor 0.0 <expresión>ADICIÓN dividendo + = <expresión> + 105
  • 106. Procesadores de LenguajesProcesadores 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 IDENTIFICADOR divisor 0.0 <expresión> <expresión>ADICIÓN dividendo + = <expresión> <expresión>MULTIPLICACIÓN * + IDENTIFICADOR tresto 106
  • 107. Procesadores de LenguajesProcesadores 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 IDENTIFICADOR divisor 0.0 <expresión>ADICIÓN dividendo + = <expresión> <expresión> <expresión>MULTIPLICACIÓN * + IDENTIFICADOR tresto IDENTIFICADOR IDENTIFICADOR cocientedivisor 107
  • 108. Procesadores de LenguajesProcesadores 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ÓN IDENTIFICADOR IDENTIFICADOR IDENTIFICADOR 108
  • 109. Procesadores de LenguajesProcesadores 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
  • 110. Procesadores de LenguajesProcesadores 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ánticoAdministradorAdministrador de la Tablade la Tabla Gestor de erroresGestor de errores Á de símbolosde símbolos GG Árbol sintáctico anotado 110
  • 111. Procesadores de LenguajesProcesadores 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
  • 112. Procesadores de LenguajesProcesadores 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
  • 113. Procesadores de LenguajesProcesadores 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
  • 114. Procesadores de LenguajesProcesadores 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
  • 115. Procesadores de LenguajesProcesadores 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 AdministradorAdministrador de la Tablade la Tabla Gestor de erroresGestor de erroresGeneración de código intermedioGeneración de código intermedio de símbolosde símbolos GG Códi i diCódigo intermedio 115
  • 116. Procesadores de LenguajesProcesadores 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
  • 117. Procesadores de LenguajesProcesadores 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
  • 118. Procesadores de LenguajesProcesadores 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
  • 119. Procesadores de LenguajesProcesadores 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
  • 120. Procesadores de LenguajesProcesadores 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
  • 121. Procesadores de LenguajesProcesadores 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ánticoAdministradorAdministrador de la Tablade 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
  • 122. Procesadores de LenguajesProcesadores 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
  • 123. Procesadores de LenguajesProcesadores 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
  • 124. Procesadores de LenguajesProcesadores 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
  • 125. Procesadores de LenguajesProcesadores 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ántico AdministradorAdministrador de la Tablade 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
  • 126. Procesadores de LenguajesProcesadores 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 R2registros de máquina: R1, R2, … Las proposiciones condicionales son generadas mediante comparaciones (CMP) y saltos condicionales (JE, JLE, …). 126 p ( ) y ( )
  • 127. Procesadores de LenguajesProcesadores 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 100 MOV divisor R1100. MOV divisor, R1 101. CMP #0, R1 102 JE 108 if (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 127 108. …
  • 128. Procesadores de LenguajesProcesadores 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
  • 129. Procesadores de LenguajesProcesadores 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 AdministradorAdministrador de la Tablade la Tabla Gestor de erroresGestor de erroresGeneración de código intermedioGeneración de código intermedio de 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
  • 130. Procesadores de LenguajesProcesadores 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.
  • 131. Procesadores de LenguajesProcesadores 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 beneficio con 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
  • 132. Procesadores de LenguajesProcesadores 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.
  • 133. Procesadores de LenguajesProcesadores 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. …
  • 134. Procesadores de LenguajesProcesadores 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
  • 135. Procesadores de LenguajesProcesadores 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
  • 136. Procesadores de LenguajesProcesadores 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 AdministradorAdministrador de la Tablade 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ímbolos Generació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
  • 137. Procesadores de LenguajesProcesadores 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
  • 138. Procesadores de LenguajesProcesadores 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
  • 139. Procesadores de LenguajesProcesadores 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 l datodato enteroentero 33 NombreNombre TipoTipo ValorValor …… …… 139
  • 140. Procesadores de LenguajesProcesadores 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
  • 141. Procesadores de LenguajesProcesadores 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).
  • 142. Procesadores de LenguajesProcesadores 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
  • 143. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducciónProcesadores de LenguajesProcesadores 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 AdministradorAdministrador de la Tablade la Tabla GGGeneración de código intermedioGeneración de código intermedio de 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
  • 144. Procesadores de LenguajesProcesadores 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).
  • 145. Procesadores de LenguajesProcesadores 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 g final. 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.
  • 146. Procesadores de LenguajesProcesadores 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 lque 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
  • 147. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • ESTRUCTURA DE UN COMPILADOR: FASES Y PASOS FFases Pasos 147
  • 148. Procesadores de LenguajesProcesadores 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
  • 149. Procesadores de LenguajesProcesadores 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 dAlgol 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”.
  • 150. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción TEMA I INTRODUCCIÓNTEMA 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
  • 151. Procesadores de LenguajesProcesadores 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
  • 152. Procesadores de LenguajesProcesadores 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
  • 153. Procesadores de LenguajesProcesadores 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.
  • 154. Procesadores de LenguajesProcesadores 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.
  • 155. Procesadores de LenguajesProcesadores 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.: Lex LexLexnombre 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).
  • 156. Procesadores de LenguajesProcesadores 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
  • 157. Procesadores de LenguajesProcesadores 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.
  • 158. Procesadores de LenguajesProcesadores 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á tiFichero 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 d 158 La función yyparse() simula el funcionamiento de un autómata con pila.
  • 159. Procesadores de LenguajesProcesadores 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
  • 160. Procesadores de LenguajesProcesadores 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 dAl crear el árbol sintáctico, se ejecutan las acciones semánticas de generación de código intermedio 160
  • 161. Procesadores de LenguajesProcesadores 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
  • 162. Procesadores de LenguajesProcesadores 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 ódiLas 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ódigoLas características de la máquina donde se va a ejecutar el código objeto: - Acceso a las variables: almacenamiento en registros de máquina en memoria estática en la pila o el montó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.
  • 163. Procesadores de LenguajesProcesadores 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
  • 164. Procesadores de LenguajesProcesadores 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 transmiten de una parte a otra del programa Ejemplos:Ejemplos: Análisis de “uso siguiente” o de “vida”: se comprueba en qué lugares se usa una variable y, especialmente, cuándo no se va a utilizar másutilizar más. Si una variable es utilizada frecuentemente entonces es preferible almacenarla en un registro de máquina. 164 Etc.
  • 165. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción TEMA I INTRODUCCIÓNTEMA 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
  • 166. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING” La técnica de “bootstrapping” permite combinar compiladores ya creados paraLa 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
  • 167. Procesadores de LenguajesProcesadores de Lenguajes Tema I.Tema I.-- IntroducciónIntroducción • COMBINACIÓN DE COMPILADORES: “BOOTSTRAPPING” Ej l il dEjemplo: 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
  • 168. Procesadores de LenguajesProcesadores 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.
  • 169. Procesadores de LenguajesProcesadores 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
  • 170. Procesadores de LenguajesProcesadores 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
  • 171. Procesadores de LenguajesProcesadores 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
  • 172. Procesadores de LenguajesProcesadores 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)MM Observación: este compilador se puede construir con más facilidad porque S es más simple que L.11 172
  • 173. Procesadores de LenguajesProcesadores 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
  • 174. Procesadores de LenguajesProcesadores 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 elPaso 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
  • 175. Procesadores de LenguajesProcesadores 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 NN II MM NNII MM 175
  • 176. Procesadores de LenguajesProcesadores 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 NN II MM NNII MM 176
  • 177. Procesadores de LenguajesProcesadores 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 lenguajeun lenguaje de alto nivel L, entonces se utilizan subconjuntos del lenguaje inicial. LL MM MM 177
  • 178. Procesadores de LenguajesProcesadores 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
  • 179. Procesadores de LenguajesProcesadores 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
  • 180. Procesadores de LenguajesProcesadores 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
  • 181. Procesadores de LenguajesProcesadores 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
  • 182. Procesadores de LenguajesProcesadores 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 MCompilador original: L M M Objetivo: L N N LL NNLL MM NNMM 182 Compilador originalCompilador original Compilador finalCompilador final
  • 183. Procesadores de LenguajesProcesadores 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 183 11
  • 184. Procesadores de LenguajesProcesadores 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
  • 185. Procesadores de LenguajesProcesadores 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
  • 186. Procesadores de LenguajesProcesadores 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 NN LL NN11 LL NN LL NN NN LL NNLL LLLL NN MM MM11 Compilador finalCompilador final 186MM 22 p fp f Compilador originalCompilador original
  • 187. Procesadores de LenguajesProcesadores 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 NN LL NN11 LL NN LL NN NN LL NNLL LLLL NN MM MM11 Compilador finalCompilador final MM 22 p fp f 187Compilador originalCompilador original
  • 188. 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 AJ INGENIERÍA INFORMÁTICA PRIMER CURSO DE SEGUNDO CICLOR M R C RS S G N C C SEGUNDO CUATRIMESTRE