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
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