SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
Procesadores de Lenguajes
Ingeniería Técnica superior de Ingeniería Informática
Departamento de Lenguajes y Sistemas informáticos
Javier Vélez Reyes
jvelez@lsi.uned.es
Departamento de Lenguajes Y Sistemas Informáticos
UNED
Introducción
El proceso de traducción
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Objetivos Generales
Objetivos Generales
› Poner en contexto y justificar la relevancia de la compilación
› Aprender la diferencia entre compiladores y traductores
› Entender la diferencia entre compiladores e interpretes
› Apreciar el contexto en el que trabaja un compilador
› Apreciar cómo interactúan sus partes
› Entender la responsabilidad de cada una de ellas
› Analizar diferentes configuraciones alternativas
› Conocer el proceso completo de compilación
› Entender la responsabilidad de cada una de sus fases
› Obtener una visión general de las técnicas empleadas en cada una
› Aprender los principales artefactos que dan soporte a la compilación
› Discutir sobre la portabilidad de compiladores
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Índice
Índice
› Introducción
› Traductores y compiladores
› Compiladores e interpretes
› Contexto de compilación
› Proceso de compilación
› Fases de compilación
› Etapas de compilación
› Artefactos de compilación
› Análisis de compiladores
› Representación de compiladores
› Tipos de compiladores
› Portabilidad de compiladores
› Construcción de compiladores en la práctica
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Introducción
Esfuerzo de abstracción
La historia de la programación puede describirse como un constante
esfuerzo por acercar el lenguaje ejecutable de las arquitecturas
hardware a un lenguaje más próximo al humano a través de
sucesivos pasos de abstracción
I. Arquitecturas Von Neumann
› Representación del programa como instrucciones en memoria
› La unidad de control va leyéndolo secuencialmente
› Cada instrucción tiene un código de operación y unos operandos
› Operaciones aritmético lógicas, comparativas, de salto, de E/S,…
11100110 0001 0110
10101001 1100 0011
11000011 1101 1100
1945
MOVE AX #2
MOVE BX #3
MUL CX AX BX
1950
Fact = 1;
For i:=0 to 10
fact := fact * i;
1968
Wait (q);
i := fact (x);
Signal (q);
1970
fun mul (x, y) = x*y
fun fact (n, m) =
0 -> 1
| m (n, fact (n-1, m))
1990
bajo
nivel
alto
nivel
+
nivel
de
abstracción
–
Class Punto {
int x, y;
int modulo () {...}
}
1995
11100110 0001 0110
10101001 1100 0011
11000011 1101 1100
Código de operación
Operando 1
Operando 2
* En esta descripción se han omitido muchos paradigmas
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Introducción
Esfuerzo de abstracción
La historia de la programación puede describirse como un constante
esfuerzo por acercar el lenguaje ejecutable de las arquitecturas
hardware a un lenguaje más próximo al humano a través de
sucesivos pasos de abstracción
II. Paradigma ensamblador
› Los códigos de operación se sustituyen por acrónimos
› Los operandos se sustituyen por registros y referencias a memoria
› El juego de instrucciones sigue siendo el mismo
11100110 0001 0110
10101001 1100 0011
11000011 1101 1100
1945
MOVE AX #2
MOVE BX [1305]
MUL CX AX BX
1950
Fact = 1;
For i:=0 to 10
fact := fact * i;
1968
Wait (q);
i := fact (x);
Signal (q);
1970
fun mul (x, y) = x*y
fun fact (n, m) =
0 -> 1
| m (n, fact (n-1, m))
1990
bajo
nivel
alto
nivel
+
nivel
de
abstracción
–
Class Punto {
int x, y;
int modulo () {...}
}
1995
MOVE AX #2
MOVE BX [1305]
MUL CX AX BX
Acrónimo de operación
Operando 1 de tipo registro
Operando 2 de tipo literal numérico
Operando 2 referencia a memoria
* En esta descripción se han omitido muchos paradigmas
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Introducción
Esfuerzo de abstracción
La historia de la programación puede describirse como un constante
esfuerzo por acercar el lenguaje ejecutable de las arquitecturas
hardware a un lenguaje más próximo al humano a través de
sucesivos pasos de abstracción
III. Paradigma estructurado imperativo
› Flujo de ejecución secuencial
› Metáfora de variables y operación de asignación
› Tipificación de los datos
› Estructuras de control iterativas y condicionales (no de salto)
› Subrutinas para modularizar los programas
11100110 0001 0110
10101001 1100 0011
11000011 1101 1100
1945
MOVE AX #2
MOVE BX #3
MUL CX AX BX
1950
Fact = 1;
For i:=0 to 10
fact := fact * i;
1968
Wait (q);
i := fact (x);
Signal (q);
1970
fun mul (x, y) = x*y
fun fact (n, m) =
0 -> 1
| m (n, fact (n-1, m))
1990
bajo
nivel
alto
nivel
+
nivel
de
abstracción
–
Class Punto {
int x, y;
int modulo () {...}
}
1995
a
b c
b (x, y);
C (x, y);
d e f g
if (x > y) f (x);
else g (y);
while (x = y) {
d (x, y);
e (x, y);
}
* En esta descripción se han omitido muchos paradigmas
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Introducción
Esfuerzo de abstracción
La historia de la programación puede describirse como un constante
esfuerzo por acercar el lenguaje ejecutable de las arquitecturas
hardware a un lenguaje más próximo al humano a través de
sucesivos pasos de abstracción
IV. Paradigma concurrente
› Varios flujos de ejecución secuencial asociados a procesos
› Es necesario cuidar el acceso concurrente a recursos
› Mecanismos de exclusión mutua y de sincronización por condición
› Para cada proceso el algoritmo sigue siendo imperativo
› Existen lenguajes concurrentes funcionales
11100110 0001 0110
10101001 1100 0011
11000011 1101 1100
1945
MOVE AX #2
MOVE BX #3
MUL CX AX BX
1950
Fact = 1;
For i:=0 to 10
fact := fact * i;
1968
Wait (q);
i := fact (x);
Signal (q);
1970
fun mul (x, y) = x*y
fun fact (n, m) =
0 -> 1
| m (n, fact (n-1, m))
1990
bajo
nivel
alto
nivel
+
nivel
de
abstracción
–
Class Punto {
int x, y;
int modulo () {...}
}
1995
x
lector
lector
lector
Leer x
lector
lector
escritor
Escribir x
* En esta descripción se han omitido muchos paradigmas
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Introducción
Esfuerzo de abstracción
La historia de la programación puede describirse como un constante
esfuerzo por acercar el lenguaje ejecutable de las arquitecturas
hardware a un lenguaje más próximo al humano a través de
sucesivos pasos de abstracción
V. Paradigma funcional declarativo
› Únicamente declaración de funciones
› El resultado de una expresión depende sólo de sus sub-expresiones
› No hay efectos colaterales en la evaluación funcional
› No existe asignación ni estructuras de control
› Se da soporte a la definición recursiva de funciones
› Las funciones se usan como datos (orden superior, currificación,…)
› Operaciones map / reduce
11100110 0001 0110
10101001 1100 0011
11000011 1101 1100
1945
MOVE AX #2
MOVE BX #3
MUL CX AX BX
1950
Fact = 1;
For i:=0 to 10
fact := fact * i;
1968
Wait (q);
i := fact (x);
Signal (q);
1970
fun mul (x, y) = x*y
fun fact (n, m) =
0 -> 1
| m (n, fact (n-1, m))
1990
bajo
nivel
alto
nivel
+
nivel
de
abstracción
–
Class Punto {
int x, y;
int modulo () {...}
}
1995
fun invertir (l) =
[] -> []
| (p: resto) -> invertir(resto): p
* En esta descripción se han omitido muchos paradigmas
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Introducción
Esfuerzo de abstracción
La historia de la programación puede describirse como un constante
esfuerzo por acercar el lenguaje ejecutable de las arquitecturas
hardware a un lenguaje más próximo al humano a través de
sucesivos pasos de abstracción
VI. Paradigma de orientación a objetos
› Las operaciones acompañan a las estructuras de datos
› Clases con bajo acoplamiento y fuerte cohesión
› El algoritmo se encuentra distribuido en la colaboración entre objetos
› Herencia, polimorfismo, ligadura dinámica y genericidad
› Los objetos se gestionan en el heap
11100110 0001 0110
10101001 1100 0011
11000011 1101 1100
1945
MOVE AX #2
MOVE BX #3
MUL CX AX BX
1950
Fact = 1;
For i:=0 to 10
fact := fact * i;
1968
Wait (q);
i := fact (x);
Signal (q);
1970
fun mul (x, y) = x*y
fun fact (n, m) =
0 -> 1
| m (n, fact (n-1, m))
1990
bajo
nivel
alto
nivel
+
nivel
de
abstracción
–
Class Punto {
int x, y;
int modulo () {...}
}
1995
for (i in [2..n])
for (j in [0..n-1])
if (c.mayor (a[j], a[j+1]))
intercambiar (a[j], a[j+1])
* En esta descripción se han omitido muchos paradigmas
Lista
- ordenar ()
Comparador
- mayor (x, y)
ComparadorA
ComparadorB
usa
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Traductores y compiladores
11100110 0001 0110
10101001 1100 0011
11000011 1101 1100
1945
MOVE AX #2
MOVE BX #3
MUL CX AX BX
1950
Fact = 1;
For i:=0 to 10
fact := fact * i;
1968
Wait (q);
i := fact (x);
Signal (q);
1970
fun mul (x, y) = x*y
fun fact (n, m) =
0 -> 1
| m (n, fact (n-1, m))
1990
bajo
nivel
alto
nivel
+
nivel
de
abstracción
–
Class Punto {
int x, y;
int modulo () {...}
}
1995
¿Qué es un compilador?
Para dar soporte a este proceso de abstracción es necesario idear
programas capaces de traducir las expresiones abstractas en
secuencias de instrucciones máquina interpretables por un
ordenados
Definición
Un compilador es un programa que lee un programa escrito en
lenguaje fuente, y lo traduce a un lenguaje objeto de bajo nivel.
Además generará una lista de los posibles errores que tenga el
programa fuente
Compilador
Lenguaje
fuente
Lenguaje
objeto
Compilador
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Traductores y compiladores
11100110 0001 0110
10101001 1100 0011
11000011 1101 1100
1945
MOVE AX #2
MOVE BX #3
MUL CX AX BX
1950
Fact = 1;
For i:=0 to 10
fact := fact * i;
1968
Wait (q);
i := fact (x);
Signal (q);
1970
fun mul (x, y) = x*y
fun fact (n, m) =
0 -> 1
| m (n, fact (n-1, m))
1990
bajo
nivel
alto
nivel
+
nivel
de
abstracción
–
Class Punto {
int x, y;
int modulo () {...}
}
1995
¿Qué es un traductor?
Cuando lo que se pretende es cambiar la expresión sintáctica de un
programa de un lenguaje de alto nivel a otro no hablamos de
compilador sino de traductor
Definición
Un traductores un programa que lee un programa escrito en
lenguaje fuente de alto nivel, y lo traduce a un lenguaje objeto
también de alto nivel.
Traductor
Lenguaje
fuente
Lenguaje
objeto
fact = 1;
for (int i = 0; i <= 10; i++)
fact *= i;
Pascal C
traductor
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Traductores y compiladores
Traductores y compiladores
I. Traductor
II. Compilador
Un compilador es un programa que lee un programa escrito en
lenguaje fuente, y lo traduce a un lenguaje objeto de bajo nivel.
Además generará una lista de los posibles errores que tenga el
programa fuente
Un traductores un programa que lee un programa escrito en
lenguaje fuente de alto nivel, y lo traduce a un lenguaje objeto
también de alto nivel.
Compilador
Lenguaje
fuente
Lenguaje
objeto
Traductor
Lenguaje
fuente
Lenguaje
objeto

Foco de atención principal de la
asignatura
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Compiladores e interpretes
Compiladores e interpretes
I. Compilador
Un compilador es un artefacto software capaz de
generar un programa ejecutable a partir de un
programa escrito en un lenguaje de alto nivel
II. Interprete
Un interprete es un artefacto software capaz de
ir interpretando secuencialmente la colección de
instrucciones de un programa escrito en un
lenguaje de alto nivel para ejecutarlas
› Se obtiene un fichero ejecutable
› El proceso de compilación se realiza sólo una vez
› El proceso de compilación es más lento
› Mayor consumo de memoria
› Mayor cantidad de detalles de errores de compilación
› Mayor velocidad de ejecución del programa ejecutable
› Los errores en ejecución se minimizan
› No se obtiene un fichero ejecutable
› El proceso de interpretación se realiza cada vez
› El proceso de interpretación es más rápido
› Menor consumo de memoria
› Menor cantidad de detalles de errores de compilación
› Menor velocidad de ejecución del programa ejecutable
› Los errores en ejecución son mayores
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Contexto de compilación
I. Precompilador
Algunos compiladores incluyen precompiladores capaces de hacer un tratamiento
preliminar del fichero fuente para prepararlo para el proceso de la compilación. Esta
herramienta suele eliminar comentarios, sustituir constantes simbólicas por sus valores
literales, o extender en el código fuente las macros definidas
II. Compilador
El compilador es el programa encargado de realizar el proceso de traducción del
programa fuente para expresarlo en términos de una secuencia de instrucciones de
código máquina interpretables por un ordenador

Foco de atención
principal de la
asignatura
III. Enlazador o montador
El producto resultante del compilador no es un fichero directamente ejecutable en la
arquitectura. Muchas funciones, invocadas desde el programa fuente, y cuyo código se
encuentra programado y compilado en otro fichero deben ser incorporadas al fichero
resultante de la compilación para que sea autónomo. De esto se encarga el montador
Elementos del contexto de la compilación
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Contexto de compilación
Elementos del contexto de la compilación
IV. Enlazador dinámico
Con el ánimo de que los programas finales no sean muy pesados, muchas funciones
externas no se incluyen en el ejecutable final sino que son enlazadas dinámica y
automáticamente por el sistema operativo, que se encarga de gestionarlas. Como
consecuencia los ejecutables son más pequeños pero establecen dependencias con
recursos que han de estar presentes en el sistema operativo
V. Depurador
Los errores producidos en tiempo de compilación son reportados por el compilador para
su corrección. Sin embargo los ocurridos en tiempo de ejecución pueden ser más
difíciles de detectar. Es necesario hacer ejecuciones paso a paso para comprobar el
estado que va tomando cada variable del programa. El depurador ayuda a realizar este
tipo de trazas
VI. Ensamblador
A veces los compiladores no generan programas directamente ejecutables en código
máquina sino ficheros que corresponden a la expresión en ensamblador del código
fuente. Esto puede ser tremendamente útil - aunque en la actualidad no frecuente –
para permitir al programador optimizar los resultados generados por el compilador
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Contexto de compilación
Ejecutable DOS
Ejecutable Windows
.C .H
Precompilador
.I .ASM
Compilador Ensamblador
.OBJ .OBJ .OBJ
Enlazador
. LIB
.ASM
.EXE .EXE Ensamblador
Enlazador dinámico
. DLL
Proceso
Recurso
Compilador de C
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Proceso de compilación
Fases de compilación
Toda compilación es un proceso de transformación paulatina que
convierte un programa escrito en un lenguaje fuente de alto nivel en
otro programa escrito en un lenguaje objeto de bajo nivel. Ese
proceso se articula conceptualmente en una secuencia de fases
› Análisis léxico
› Análisis sintáctico
› Análisis semántico
› Generación de código intermedio
› Generación de código final
Analizador
léxico
Analizador
sintáctico
Analizador
semántico
Código
intermedio
Código
final
e · l · i · h · w <WHILE, PR> S
WHILE E DO S
E > E
S
WHILE E DO S
E > E
√ LD a t1
LD b t2
GRT t3 t1 t2
BRZ t3 L1 …
0000 0011
0000 0011
0100 0001
0100 0000
0001 0010
…
While ( a > b ) do
a := a + 1;
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Proceso de compilación
Fases de compilación
Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje
fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso se articula
conceptualmente en una secuencia de fases
Analizador léxico
e
·
l
·
i
·
h
·
w
<WHILE, PR>
While ( a > b ) do
a := a + 1;
I. Análisis léxico
El analizador léxico (scanner) va leyendo caracteres del fichero hasta
encontrar una entidad con significado léxico. Estas entidades se llaman
tokens y son una estructura de datos que contiene información acerca
del mismo (tipo, lexema, número de fila y columna, valor, etc.)
La construcción de analizadores léxicos suele hacerse mediante
herramientas que hay que configurar indicando el tipo de token que es
necesario emitir para cada posible patrón léxico
while : <WHILE, PR>
do : <DO, PR>
l (l | d)* : <a, ID>
...
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Proceso de compilación
Fases de compilación
Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje
fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso se articula
conceptualmente en una secuencia de fases
Analizador sintáctico
<WHILE, PR>
II. Análisis sintáctico
El analizador sintáctico (parser) va pidiendo tokens al analizador léxico y
los va organizando en frases de acuerdo a las reglas de construcción
gramatical del lenguaje. Como resultado genera un árbol de análisis
sintáctico que representa todo el programa en memoria
La construcción de analizadores sintácticos suele hacerse mediante
herramientas que hay que configurar indicando la colección de reglas
sintácticas que definen las construcciones del lenguaje gramaticalmente
correctas
S ::= SIf | Swhlile | ...
SWhile ::= while PI E PD
do S;
E ::= E + E
E ::= E * E
E ::= E > E
E ::= E < E
E ::= id
...
SWhile
WHILE E DO S
E > E
<a, ID>
<>, GT>
<b, ID>
<DO, PR>
<a, ID>
<:=, ASIG>
...
<(, PI>
<), PD>
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Proceso de compilación
Fases de compilación
Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje
fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso se articula
conceptualmente en una secuencia de fases
Analizador
semántico
III. Análisis semántico
El analizador semántico se encarga de gestionar la declaración de
constantes, funciones, procedimientos y variables y de comprobar la
corrección de tipos a lo largo de todo el programa. Como resultado se
obtiene un árbol de análisis sintáctico anotado, con atributos en cada
uno de sus nodos
La implementación del analizado semántico se realiza insertando
acciones semánticas en las partes derechas de las reglas de producción
gramatical
S ::= SIf | Swhlile | ...
SWhile ::= while PI E PD
do S;
{: if (E.tipo != booleano) error (); :}
...
SWhile
WHILE E DO S
E > E
SWhile
WHILE E DO S
E > E
√
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Proceso de compilación
Fases de compilación
Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje
fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso se articula
conceptualmente en una secuencia de fases
Código intermedio
IV. Generación de código intermedio
El generador de código intermedio traduce la representación
arborescente del programa en una secuencia ordenada de instrucciones
llamadas cuádruplas próximas al lenguaje máquina. Se trata de un
lenguaje abstracto y genérico que aún mantiene las referencias
simbólicas a los elementos declarados en el programa (variables,
parámetros, funciones, etc.)
La implementación del generador de código intermedio se realiza
insertando acciones en las partes derechas de las reglas de producción
que acumulan la traducción parcial del subárbol en cada nodo
exp ::= exp:e1 > exp:e2
{:...
e.código = e1.código +
e2.código +
CMP e1.temp r2.temp e.temp
:};
SWhile
WHILE E DO S
E > E
√
LD a t1
LD b t2
GRT t3 t1 t2
BRZ t3 L1
...
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Proceso de compilación
Fases de compilación
Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje
fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso se articula
conceptualmente en una secuencia de fases
Optimización Código
intermedio
V. Optimización de código intermedio
En los compiladores comerciales es frecuente optimizar el resultado de
la fase anterior para hacer el programa más compacto y más rápido.
Suelen aplicarse estrategias de transformaciones heurísticas y
elementales que ofrecen buenos resultados
LD a t1
LD b t2
GRT t3 t1 t2
BRZ t3 L1
...
LD a t1
LD b t2
GRT t3 t1 t2
BRZ t3 L1
...
√
WHILE (A>B) AND (A<2*B-5) DO
A:=A+B
L1: IF A>B GOTO L2
GOTO L3
L2: T1 := 2*B
T2 := T1 – 5
IF A< T2 GOTO L4
GOTO L3
L4: A := A + B
GOTO L1
L3: ...
Optimización
Código intermedio
L1: IF A<=B GOTO L2
T1 := 2*B
T2 := T1 – 5
IF A>= T2 GOTO L2
A := A + B
GOTO L1
L2: …
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Proceso de compilación
Fases de compilación
Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje
fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso se articula
conceptualmente en una secuencia de fases
VI. Código final
Una vez que el código intermedio ha sido generado y optimizado
pueden resolverse las referencias simbólicas a posiciones de memoria
física y a recursos de la máquina (registros, pila, etc.). Además debe
traducirse cada cuarteto a sus equivalentes instrucciones en código
máquina
La traducción a código final se encarga de hacerla una rutina de
traducción ubicada en la acción semántica final ubicada al final de la
regla de producción del axioma
Código final
LD a t1
LD b t2
GRT t3 t1 t2
BRZ t3 L1
...
0000 0011
0000 0011
0100 0001
0100 0000
0001 0010
…
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Proceso de compilación
Etapas de compilación
› Expertos en lenguajes
› Independencia de arquitectura
› Dependencia de lenguaje
› Optimización de lenguajes
Analizador
léxico
Analizador
sintáctico
Analizador
semántico
Código
intermedio
Código
final
e · l · i · h · w <WHILE, PR> S
WHILE E DO S
E > E
S
WHILE E DO S
E > E
√ 0000 0011
0000 0011
0100 0001
0100 0000
0001 0010
…
While ( a > b ) do
a := a + 1;
Etapa de análisis Etapa de síntesis
› Expertos en arquitecturas
› Dependencia de arquitectura
› Independencia de lenguaje
› Optimización de ejecución
LD a t1
LD b t2
GRT t3 t1 t2
BRZ t3 L1 …
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Proceso de compilación
Equipos de compilación
Analizador léxico
Analizador sintáctico
Analizador
semántico
Código intermedio
While ( a > b ) do
a := a + 1;
Equipo
de
Lenguaje
Optimización Código
intermedio
Código final
Analizador léxico
Analizador sintáctico
Analizador
semántico
Código intermedio
Optimización Código
intermedio
Código final
LD a t1
LD b t2
GRT t3 t1 t2
BRZ t3 L1 …
Equipo
de
arquitectura
Pascal C
Intel Solaris
Código intermedio
M
N
x
…
…
while ( a > b )
a++;
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Proceso de compilación
Artefactos de compilación
A lo largo de todo el proceso de compilación se una colección de
artefactos para dar soporte al mismo. A lo largo del curso los
estudiaremos en detalle. Dos son de vital importancia
I. Tabla de símbolos
La tabla de símbolos se utiliza para gestionar todos los elementos
declarados por programador (constantes, tipos, variables, funciones y
procedimientos)
Analizador léxico
Analizador sintáctico
Analizador
semántico
Código intermedio
Optimización Código
intermedio
Código final
Tabla
de
símbolos
Analizador léxico En compiladores antiguos utilizado para
reconocer palabras clave
Analizador semántico Registra los elementos declarados por
el programador y los consulta para
efectuar la comprobación de tipos
Código intermedio Se consulta para conocer el espacio de
memoria que debe reservarse para
gestionar la activación de subrutinas y
para determinar el ámbito de
declaración de los elementos
Código final Se utiliza para traducir las referencias
simbólicas a posiciones de memorial
Fase Descripción
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Proceso de compilación
Artefactos de compilación
A lo largo de todo el proceso de compilación se una colección de
artefactos para dar soporte al mismo. A lo largo del curso los
estudiaremos en detalle. Dos son de vital importancia
II. Gestor de errores
Las tres primeras fases pueden generar errores durante el proceso de
compilación. El gestor de errores se encarga de emitir mensajes de
los mismos para informar al programador
Gestor de errores
Analizador léxico
Carácter ñ no válido
Whiñe ( a > b ) do
a := a + 1;
Analizador sintáctico
Analizador
semántico
SWhile ::= WHILE e DO s
Analizador léxico
While ( a > b )
a := a + 1;
Analizador sintáctico
Analizador léxico
While ( a > b ) do
a := a + ‘c’;
Se esperaba un
entero en expresión
de suma
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Análisis de compiladores
Representación de un compilador
Como se ha discutido a lo largo del tema un compilador es una máquina de transformación
capaz de traducir un programa escrito en un lenguaje fuente a otro programa escrito en otro
lenguaje objeto. A su vez, éste está implementado en un tercer lenguaje llamado lenguaje
anfitrión. Por tanto, para representar en abstracto un compilador suele emplearse una
representación en forma de T que incluye los 3 lenguajes que lo caracterizan
› Lenguaje objeto (T)
› Lenguaje fuente (S)
› Lenguaje anfitrión (H)
S T
H  H es un lenguaje máquina
frecuentemente igual a T
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Análisis de compiladores
Tipos de compiladores
H
I. Ensamblador
ASM Máquina
H
II. Compilador cruzado
S T
H = T
H
III. Autocompilador
S T
H != T H = S
H
IV. Metacompilador
S T
H
V. Descompilador
T S
S especificaciones
T es un compilador
Se traduce de T a S
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Análisis de compiladores
Portabilidad de compiladores
I. Portabilidad fuente destino
A B
H
B C
H
= A C
H
II. Portabilidad de host
A B
H H K
M
= A B
K
La concatenación transitiva
de dos compiladores da
como resultado un
compilador del fuente del
primero al objeto del segundo
Si tenemos un compilador con anfitrión
H y necesitamos uno con anfitrión K
podemos usar un compilador H a K y
traducir los anfitriones
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Análisis de compiladores
Portabilidad de compiladores
III. Arranque automático por transferencia
Java ENS
Java Java ENS
ENS
= Java ENS
ENS
Construimos un compilador de java
provisional en ensamblador.
Construirnos un compilador de java a
ensamblador en java. Para compilarlo
utilizamos el compilador provisional y
obtenemos un compilador de java a
ensamblador en ensamblador
mejorado. Recurrimos iterativamente
sustituyendo en cada pasada el
compilador provisional por el nuevo en
la iteración anterior
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Construcción de compiladores en la práctica
Descripción de la práctica
S ENS2001
Java
› Lenguaje fuente : S
› Lenguaje objeto : ENS2001
› Lenguaje anfitrión : Java
Entrega de Febrero Entrega de Junio
› Analizador léxico
› Analizador sintáctico
50% especificación
Sesión de control (Enero)
› Analizador léxico
› Analizador sintáctico
› Analizador semántico
› Generación de código intermedio
› Generación de código final
50% especificación
Sesión de control (Mayo)
Test
Entrega de Septiembre
› Analizador léxico
› Analizador sintáctico
› Analizador semántico
› Generación de código intermedio
› Generación de código final
100% especificación
Sesión de control (Junio)
Test
› JFlex
› Cup
› Ant
› Marco de desarrollo
› ENS2001
Características Herramientas
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Construcción de compiladores en la práctica
Primeros pasos con la práctica
› Instalar JDK
› Descargar JDK de la página Web
› Ejecutar el instalable
› Comprobar la actualización de las variables de entorno path y classpath
› Descargar un IDE de desarrollo
› NetBeans
› Eclipse
› Descargar el marco de desarrollo proporcionado
› Descargar del entorno virtual
› Crear un proyecto a partir del marco de desarrollo
› Actualizar el IDE para que reconozca todas las libarías
› Crear tareas ant desde el IDE para ejecutar los scripts de ejecución y prueba de la práctica
I. Instalación y descarga
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Construcción de compiladores en la práctica
Primeros pasos con la práctica
II. Desarrollo sobre el framework de soporte
Las clases compiladas se generan aquí
Las documentación de la arquitectura (sobre todo en 2ºcuatrimestre)
Tareas ant para ejecutar y depurar la práctica
 clear
 jflex
 cup
 build
 flexTest
 cupTest
 finalTest
Memoria de la práctica según formato establecido
Consúltese el documento
“Directrices de implementación”
Especificaciones gramaticales de Cup
Especificaciones léxicas de JFlex
Test de prueba para las especificaciones A y B
Librerías necesarias
Continúa…
Esta primera parte del framework contiene la
documentación, ficheros de configuración, librerías de
ejecución, y directorios de soporte a la compilación
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Construcción de compiladores en la práctica
Primeros pasos con la práctica
II. Desarrollo sobre el framework de soporte
Consúltese el documento
“Directrices de implementación”
Esta segunda parte del framework contiene la
infraestructura de clases abiertas que el usuario debe
extender o completar
Acceso a los artefactos del compilador
Entorno de ejecución donde se efectúa la generación del código final
Artefactos para la generación de código intermedio
Clase Token para comunicar el analizador léxico con el sintáctico
Clases Symbol y Type para representar los tipos y símbolos
Clases para representar los no terminales del árbol de análisis sintáctico
Programar para la prueba y depuración
 LexicalTestCase
 SyntaxTestCase
 FinalTestCase
Continúa…
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Construcción de compiladores en la práctica
Primeros pasos con la práctica
II. Desarrollo sobre el framework de soporte
Consúltese el documento
“Directrices de implementación”
Esta tercera parte del framework contiene la
infraestructura de clases cerradas que ofrecen al
usuario funcionalidades completas para utilizar
Entorno de ejecución donde se efectúa la generación del código final
Artefactos para la generación de código intermedio
Artefactos para el análisis léxicos y el control de errores
Artefactos para el análisis semántico y el control de errores
Artefactos para el análisis sintáctico y el control de errores
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Construcción de compiladores en la práctica
Primeros pasos con la práctica
› La ejecución y prueba del marco de trabajo esta dirigida por tareas ant
› Clear: Borrar el contenido de /clases
› JFlex: Generar el analizador léxico (como un fichero fuente en src/lexical/scanner.java)
› Cup: Generar el analizador sintáctico (como un fichero fuente en src/syntax/parser.java)
› Build: Cup + Jflex + Compile
› flexTest: Ejecuta la prueba LexicalTestCase (generar tokens hasta final de fichero)
› cupTest: Ejecuta la prueba SyntaxTestCase (ejecuta el parser)
› finalTest: Ejecuta la prueba FinalTestCase (ejecuta el parser y traza el estado del compilador)
› Familia de tablas de símbolos creadas
› Familia de tablas de tipos creadas
III. Ejecución y prueba
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Construcción de compiladores en la práctica
Primeros pasos con la práctica
› Especificación del analizador léxico
› Generación (Jflex + compilar)
› Prueba (FlexTest)
› Especificación del analizador sintáctico
› Generación (Build)
› Prueba (CupTest)
› Integración del analizador lexico con el sintáctico
› Generación (Build)
› Prueba (CupTest)
III. Fases de desarrollo del compilador
› Implementación en cup del sistema de tipos
› Generación (Build)
› Prueba (FinalTest)
› Generación de código intermedio
› Generación (Build)
› Prueba (FinalTest)
› Generación de código Final
› Generación (Build)
› Prueba (FinalTest)
› Pruebas finales con fichero de test
1er cuatrimestre 2º cuatrimestre
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Bibliografía
Material de estudio
Bibliografía básica
Construcción de compiladores: principios y práctica
Kenneth C. Louden International Thomson Editores,
2004 ISBN 970-686-299-4
Javier Vélez Reyes jvelez@lsi.uned.es
Introducción. El proceso de traducción
Bibliografía
Material de estudio
Bibliografía complementaria
Compiladores: Principios, técnicas y herramientas.
Segunda Edición Aho, Lam, Sethi, Ullman
Addison – Wesley, Pearson Educación, México 2008
Diseño de compiladores. A. Garrido, J. Iñesta, F. Moreno
y J. Pérez. 2002. Edita Universidad de Alicante

Más contenido relacionado

Similar a Procesadores de Lenguajes: Introducción al proceso de traducción

A1y2 Señales-operaciones de señales-Impulso y escalon unitario.pptx
A1y2 Señales-operaciones de señales-Impulso y escalon unitario.pptxA1y2 Señales-operaciones de señales-Impulso y escalon unitario.pptx
A1y2 Señales-operaciones de señales-Impulso y escalon unitario.pptx3mmanuelch
 
MANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN C
MANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN CMANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN C
MANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN CLuis Zurita
 
Introducción al Calculo Diferencial de una Función Real ccesa007
Introducción al Calculo Diferencial de una Función Real  ccesa007Introducción al Calculo Diferencial de una Función Real  ccesa007
Introducción al Calculo Diferencial de una Función Real ccesa007Demetrio Ccesa Rayme
 
Polinomio interpolante
Polinomio interpolantePolinomio interpolante
Polinomio interpolantedavid159936
 
Pds 2011 2-balotario de preguntas pc3
Pds 2011 2-balotario de preguntas pc3Pds 2011 2-balotario de preguntas pc3
Pds 2011 2-balotario de preguntas pc3jcbenitezp
 
Analisis grafico intro
Analisis  grafico introAnalisis  grafico intro
Analisis grafico introJACARPIN
 
Unidad 3, Programacion Estructurada
Unidad 3, Programacion EstructuradaUnidad 3, Programacion Estructurada
Unidad 3, Programacion EstructuradaUTP, TA
 
¿Sueñan los crackers con ordenadores cuánticos
¿Sueñan los crackers con ordenadores cuánticos¿Sueñan los crackers con ordenadores cuánticos
¿Sueñan los crackers con ordenadores cuánticosEventos Creativos
 
¿Sueñan los crackers con ordenadores cuánticos?
¿Sueñan los crackers con ordenadores cuánticos?¿Sueñan los crackers con ordenadores cuánticos?
¿Sueñan los crackers con ordenadores cuánticos?Gonzalo Álvarez Marañón
 
10. subalgoritmos parte i
10. subalgoritmos parte i10. subalgoritmos parte i
10. subalgoritmos parte ircarrerah
 
S_S de tiempo continuo_V2020.pptx
S_S de tiempo continuo_V2020.pptxS_S de tiempo continuo_V2020.pptx
S_S de tiempo continuo_V2020.pptxCrazyGamerSL
 
Ma146 unidad03 s09-1_derivada
Ma146 unidad03 s09-1_derivadaMa146 unidad03 s09-1_derivada
Ma146 unidad03 s09-1_derivadaSilvia Mogollon
 
2023.1 S2 - Variables y Expresiones - CS1111_.pptx
2023.1 S2 - Variables y Expresiones - CS1111_.pptx2023.1 S2 - Variables y Expresiones - CS1111_.pptx
2023.1 S2 - Variables y Expresiones - CS1111_.pptxFrmulariosPPTPDFYDOC
 
Analisis De La Transformada De Fourier En Matlab
Analisis De La Transformada De Fourier En MatlabAnalisis De La Transformada De Fourier En Matlab
Analisis De La Transformada De Fourier En Matlabmiguelbc
 

Similar a Procesadores de Lenguajes: Introducción al proceso de traducción (20)

A1y2 Señales-operaciones de señales-Impulso y escalon unitario.pptx
A1y2 Señales-operaciones de señales-Impulso y escalon unitario.pptxA1y2 Señales-operaciones de señales-Impulso y escalon unitario.pptx
A1y2 Señales-operaciones de señales-Impulso y escalon unitario.pptx
 
MANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN C
MANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN CMANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN C
MANEJO DE PERIFERICOS PARA MICROCONTROLADORES EN C
 
Introducción al Calculo Diferencial de una Función Real ccesa007
Introducción al Calculo Diferencial de una Función Real  ccesa007Introducción al Calculo Diferencial de una Función Real  ccesa007
Introducción al Calculo Diferencial de una Función Real ccesa007
 
Polinomio interpolante
Polinomio interpolantePolinomio interpolante
Polinomio interpolante
 
Sesión 01
Sesión 01Sesión 01
Sesión 01
 
Pds 2011 2-balotario de preguntas pc3
Pds 2011 2-balotario de preguntas pc3Pds 2011 2-balotario de preguntas pc3
Pds 2011 2-balotario de preguntas pc3
 
Analisis grafico intro
Analisis  grafico introAnalisis  grafico intro
Analisis grafico intro
 
Matlab2009b -clase2
Matlab2009b  -clase2Matlab2009b  -clase2
Matlab2009b -clase2
 
Funciones en derive Ingenieria Industrial
Funciones en derive Ingenieria IndustrialFunciones en derive Ingenieria Industrial
Funciones en derive Ingenieria Industrial
 
clase2.pdf
clase2.pdfclase2.pdf
clase2.pdf
 
Analissis espectral
Analissis espectralAnalissis espectral
Analissis espectral
 
Unidad 3, Programacion Estructurada
Unidad 3, Programacion EstructuradaUnidad 3, Programacion Estructurada
Unidad 3, Programacion Estructurada
 
Interpolaion c++
Interpolaion c++Interpolaion c++
Interpolaion c++
 
¿Sueñan los crackers con ordenadores cuánticos
¿Sueñan los crackers con ordenadores cuánticos¿Sueñan los crackers con ordenadores cuánticos
¿Sueñan los crackers con ordenadores cuánticos
 
¿Sueñan los crackers con ordenadores cuánticos?
¿Sueñan los crackers con ordenadores cuánticos?¿Sueñan los crackers con ordenadores cuánticos?
¿Sueñan los crackers con ordenadores cuánticos?
 
10. subalgoritmos parte i
10. subalgoritmos parte i10. subalgoritmos parte i
10. subalgoritmos parte i
 
S_S de tiempo continuo_V2020.pptx
S_S de tiempo continuo_V2020.pptxS_S de tiempo continuo_V2020.pptx
S_S de tiempo continuo_V2020.pptx
 
Ma146 unidad03 s09-1_derivada
Ma146 unidad03 s09-1_derivadaMa146 unidad03 s09-1_derivada
Ma146 unidad03 s09-1_derivada
 
2023.1 S2 - Variables y Expresiones - CS1111_.pptx
2023.1 S2 - Variables y Expresiones - CS1111_.pptx2023.1 S2 - Variables y Expresiones - CS1111_.pptx
2023.1 S2 - Variables y Expresiones - CS1111_.pptx
 
Analisis De La Transformada De Fourier En Matlab
Analisis De La Transformada De Fourier En MatlabAnalisis De La Transformada De Fourier En Matlab
Analisis De La Transformada De Fourier En Matlab
 

Último

Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAIPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAJAMESDIAZ55
 
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptxGARCIARAMIREZCESAR
 
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxPPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxSergioGJimenezMorean
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfKEVINYOICIAQUINOSORI
 
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaProyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaXjoseantonio01jossed
 
Unidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxUnidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxEverardoRuiz8
 
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...SuannNeyraChongShing
 
183045401-Terminal-Terrestre-de-Trujillo.pdf
183045401-Terminal-Terrestre-de-Trujillo.pdf183045401-Terminal-Terrestre-de-Trujillo.pdf
183045401-Terminal-Terrestre-de-Trujillo.pdfEdwinAlexanderSnchez2
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALKATHIAMILAGRITOSSANC
 
Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacajeremiasnifla
 
Sesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERUSesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERUMarcosAlvarezSalinas
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdfFernandaGarca788912
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPJosLuisFrancoCaldern
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdffredyflores58
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfMirthaFernandez12
 
Diapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestaDiapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestajeffsalazarpuente
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 
SSOMA, seguridad y salud ocupacional. SST
SSOMA, seguridad y salud ocupacional. SSTSSOMA, seguridad y salud ocupacional. SST
SSOMA, seguridad y salud ocupacional. SSTGestorManpower
 
clases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdfclases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdfDanielaVelasquez553560
 

Último (20)

Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESAIPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
IPERC Y ATS - SEGURIDAD INDUSTRIAL PARA TODA EMPRESA
 
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
 
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxPPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdf
 
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctricaProyecto de iluminación "guia" para proyectos de ingeniería eléctrica
Proyecto de iluminación "guia" para proyectos de ingeniería eléctrica
 
Unidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxUnidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptx
 
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
 
183045401-Terminal-Terrestre-de-Trujillo.pdf
183045401-Terminal-Terrestre-de-Trujillo.pdf183045401-Terminal-Terrestre-de-Trujillo.pdf
183045401-Terminal-Terrestre-de-Trujillo.pdf
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
 
Reporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpacaReporte de Exportaciones de Fibra de alpaca
Reporte de Exportaciones de Fibra de alpaca
 
Sesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERUSesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERU
 
Curso intensivo de soldadura electrónica en pdf
Curso intensivo de soldadura electrónica  en pdfCurso intensivo de soldadura electrónica  en pdf
Curso intensivo de soldadura electrónica en pdf
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
 
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdfECONOMIA APLICADA SEMANA 555555555555555555.pdf
ECONOMIA APLICADA SEMANA 555555555555555555.pdf
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
 
Diapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuestaDiapositiva de Topografía Nivelación simple y compuesta
Diapositiva de Topografía Nivelación simple y compuesta
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 
SSOMA, seguridad y salud ocupacional. SST
SSOMA, seguridad y salud ocupacional. SSTSSOMA, seguridad y salud ocupacional. SST
SSOMA, seguridad y salud ocupacional. SST
 
clases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdfclases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdf
 

Procesadores de Lenguajes: Introducción al proceso de traducción

  • 1. Procesadores de Lenguajes Ingeniería Técnica superior de Ingeniería Informática Departamento de Lenguajes y Sistemas informáticos Javier Vélez Reyes jvelez@lsi.uned.es Departamento de Lenguajes Y Sistemas Informáticos UNED Introducción El proceso de traducción
  • 2. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Objetivos Generales Objetivos Generales › Poner en contexto y justificar la relevancia de la compilación › Aprender la diferencia entre compiladores y traductores › Entender la diferencia entre compiladores e interpretes › Apreciar el contexto en el que trabaja un compilador › Apreciar cómo interactúan sus partes › Entender la responsabilidad de cada una de ellas › Analizar diferentes configuraciones alternativas › Conocer el proceso completo de compilación › Entender la responsabilidad de cada una de sus fases › Obtener una visión general de las técnicas empleadas en cada una › Aprender los principales artefactos que dan soporte a la compilación › Discutir sobre la portabilidad de compiladores
  • 3. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Índice Índice › Introducción › Traductores y compiladores › Compiladores e interpretes › Contexto de compilación › Proceso de compilación › Fases de compilación › Etapas de compilación › Artefactos de compilación › Análisis de compiladores › Representación de compiladores › Tipos de compiladores › Portabilidad de compiladores › Construcción de compiladores en la práctica
  • 4. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Introducción Esfuerzo de abstracción La historia de la programación puede describirse como un constante esfuerzo por acercar el lenguaje ejecutable de las arquitecturas hardware a un lenguaje más próximo al humano a través de sucesivos pasos de abstracción I. Arquitecturas Von Neumann › Representación del programa como instrucciones en memoria › La unidad de control va leyéndolo secuencialmente › Cada instrucción tiene un código de operación y unos operandos › Operaciones aritmético lógicas, comparativas, de salto, de E/S,… 11100110 0001 0110 10101001 1100 0011 11000011 1101 1100 1945 MOVE AX #2 MOVE BX #3 MUL CX AX BX 1950 Fact = 1; For i:=0 to 10 fact := fact * i; 1968 Wait (q); i := fact (x); Signal (q); 1970 fun mul (x, y) = x*y fun fact (n, m) = 0 -> 1 | m (n, fact (n-1, m)) 1990 bajo nivel alto nivel + nivel de abstracción – Class Punto { int x, y; int modulo () {...} } 1995 11100110 0001 0110 10101001 1100 0011 11000011 1101 1100 Código de operación Operando 1 Operando 2 * En esta descripción se han omitido muchos paradigmas
  • 5. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Introducción Esfuerzo de abstracción La historia de la programación puede describirse como un constante esfuerzo por acercar el lenguaje ejecutable de las arquitecturas hardware a un lenguaje más próximo al humano a través de sucesivos pasos de abstracción II. Paradigma ensamblador › Los códigos de operación se sustituyen por acrónimos › Los operandos se sustituyen por registros y referencias a memoria › El juego de instrucciones sigue siendo el mismo 11100110 0001 0110 10101001 1100 0011 11000011 1101 1100 1945 MOVE AX #2 MOVE BX [1305] MUL CX AX BX 1950 Fact = 1; For i:=0 to 10 fact := fact * i; 1968 Wait (q); i := fact (x); Signal (q); 1970 fun mul (x, y) = x*y fun fact (n, m) = 0 -> 1 | m (n, fact (n-1, m)) 1990 bajo nivel alto nivel + nivel de abstracción – Class Punto { int x, y; int modulo () {...} } 1995 MOVE AX #2 MOVE BX [1305] MUL CX AX BX Acrónimo de operación Operando 1 de tipo registro Operando 2 de tipo literal numérico Operando 2 referencia a memoria * En esta descripción se han omitido muchos paradigmas
  • 6. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Introducción Esfuerzo de abstracción La historia de la programación puede describirse como un constante esfuerzo por acercar el lenguaje ejecutable de las arquitecturas hardware a un lenguaje más próximo al humano a través de sucesivos pasos de abstracción III. Paradigma estructurado imperativo › Flujo de ejecución secuencial › Metáfora de variables y operación de asignación › Tipificación de los datos › Estructuras de control iterativas y condicionales (no de salto) › Subrutinas para modularizar los programas 11100110 0001 0110 10101001 1100 0011 11000011 1101 1100 1945 MOVE AX #2 MOVE BX #3 MUL CX AX BX 1950 Fact = 1; For i:=0 to 10 fact := fact * i; 1968 Wait (q); i := fact (x); Signal (q); 1970 fun mul (x, y) = x*y fun fact (n, m) = 0 -> 1 | m (n, fact (n-1, m)) 1990 bajo nivel alto nivel + nivel de abstracción – Class Punto { int x, y; int modulo () {...} } 1995 a b c b (x, y); C (x, y); d e f g if (x > y) f (x); else g (y); while (x = y) { d (x, y); e (x, y); } * En esta descripción se han omitido muchos paradigmas
  • 7. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Introducción Esfuerzo de abstracción La historia de la programación puede describirse como un constante esfuerzo por acercar el lenguaje ejecutable de las arquitecturas hardware a un lenguaje más próximo al humano a través de sucesivos pasos de abstracción IV. Paradigma concurrente › Varios flujos de ejecución secuencial asociados a procesos › Es necesario cuidar el acceso concurrente a recursos › Mecanismos de exclusión mutua y de sincronización por condición › Para cada proceso el algoritmo sigue siendo imperativo › Existen lenguajes concurrentes funcionales 11100110 0001 0110 10101001 1100 0011 11000011 1101 1100 1945 MOVE AX #2 MOVE BX #3 MUL CX AX BX 1950 Fact = 1; For i:=0 to 10 fact := fact * i; 1968 Wait (q); i := fact (x); Signal (q); 1970 fun mul (x, y) = x*y fun fact (n, m) = 0 -> 1 | m (n, fact (n-1, m)) 1990 bajo nivel alto nivel + nivel de abstracción – Class Punto { int x, y; int modulo () {...} } 1995 x lector lector lector Leer x lector lector escritor Escribir x * En esta descripción se han omitido muchos paradigmas
  • 8. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Introducción Esfuerzo de abstracción La historia de la programación puede describirse como un constante esfuerzo por acercar el lenguaje ejecutable de las arquitecturas hardware a un lenguaje más próximo al humano a través de sucesivos pasos de abstracción V. Paradigma funcional declarativo › Únicamente declaración de funciones › El resultado de una expresión depende sólo de sus sub-expresiones › No hay efectos colaterales en la evaluación funcional › No existe asignación ni estructuras de control › Se da soporte a la definición recursiva de funciones › Las funciones se usan como datos (orden superior, currificación,…) › Operaciones map / reduce 11100110 0001 0110 10101001 1100 0011 11000011 1101 1100 1945 MOVE AX #2 MOVE BX #3 MUL CX AX BX 1950 Fact = 1; For i:=0 to 10 fact := fact * i; 1968 Wait (q); i := fact (x); Signal (q); 1970 fun mul (x, y) = x*y fun fact (n, m) = 0 -> 1 | m (n, fact (n-1, m)) 1990 bajo nivel alto nivel + nivel de abstracción – Class Punto { int x, y; int modulo () {...} } 1995 fun invertir (l) = [] -> [] | (p: resto) -> invertir(resto): p * En esta descripción se han omitido muchos paradigmas
  • 9. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Introducción Esfuerzo de abstracción La historia de la programación puede describirse como un constante esfuerzo por acercar el lenguaje ejecutable de las arquitecturas hardware a un lenguaje más próximo al humano a través de sucesivos pasos de abstracción VI. Paradigma de orientación a objetos › Las operaciones acompañan a las estructuras de datos › Clases con bajo acoplamiento y fuerte cohesión › El algoritmo se encuentra distribuido en la colaboración entre objetos › Herencia, polimorfismo, ligadura dinámica y genericidad › Los objetos se gestionan en el heap 11100110 0001 0110 10101001 1100 0011 11000011 1101 1100 1945 MOVE AX #2 MOVE BX #3 MUL CX AX BX 1950 Fact = 1; For i:=0 to 10 fact := fact * i; 1968 Wait (q); i := fact (x); Signal (q); 1970 fun mul (x, y) = x*y fun fact (n, m) = 0 -> 1 | m (n, fact (n-1, m)) 1990 bajo nivel alto nivel + nivel de abstracción – Class Punto { int x, y; int modulo () {...} } 1995 for (i in [2..n]) for (j in [0..n-1]) if (c.mayor (a[j], a[j+1])) intercambiar (a[j], a[j+1]) * En esta descripción se han omitido muchos paradigmas Lista - ordenar () Comparador - mayor (x, y) ComparadorA ComparadorB usa
  • 10. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Traductores y compiladores 11100110 0001 0110 10101001 1100 0011 11000011 1101 1100 1945 MOVE AX #2 MOVE BX #3 MUL CX AX BX 1950 Fact = 1; For i:=0 to 10 fact := fact * i; 1968 Wait (q); i := fact (x); Signal (q); 1970 fun mul (x, y) = x*y fun fact (n, m) = 0 -> 1 | m (n, fact (n-1, m)) 1990 bajo nivel alto nivel + nivel de abstracción – Class Punto { int x, y; int modulo () {...} } 1995 ¿Qué es un compilador? Para dar soporte a este proceso de abstracción es necesario idear programas capaces de traducir las expresiones abstractas en secuencias de instrucciones máquina interpretables por un ordenados Definición Un compilador es un programa que lee un programa escrito en lenguaje fuente, y lo traduce a un lenguaje objeto de bajo nivel. Además generará una lista de los posibles errores que tenga el programa fuente Compilador Lenguaje fuente Lenguaje objeto Compilador
  • 11. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Traductores y compiladores 11100110 0001 0110 10101001 1100 0011 11000011 1101 1100 1945 MOVE AX #2 MOVE BX #3 MUL CX AX BX 1950 Fact = 1; For i:=0 to 10 fact := fact * i; 1968 Wait (q); i := fact (x); Signal (q); 1970 fun mul (x, y) = x*y fun fact (n, m) = 0 -> 1 | m (n, fact (n-1, m)) 1990 bajo nivel alto nivel + nivel de abstracción – Class Punto { int x, y; int modulo () {...} } 1995 ¿Qué es un traductor? Cuando lo que se pretende es cambiar la expresión sintáctica de un programa de un lenguaje de alto nivel a otro no hablamos de compilador sino de traductor Definición Un traductores un programa que lee un programa escrito en lenguaje fuente de alto nivel, y lo traduce a un lenguaje objeto también de alto nivel. Traductor Lenguaje fuente Lenguaje objeto fact = 1; for (int i = 0; i <= 10; i++) fact *= i; Pascal C traductor
  • 12. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Traductores y compiladores Traductores y compiladores I. Traductor II. Compilador Un compilador es un programa que lee un programa escrito en lenguaje fuente, y lo traduce a un lenguaje objeto de bajo nivel. Además generará una lista de los posibles errores que tenga el programa fuente Un traductores un programa que lee un programa escrito en lenguaje fuente de alto nivel, y lo traduce a un lenguaje objeto también de alto nivel. Compilador Lenguaje fuente Lenguaje objeto Traductor Lenguaje fuente Lenguaje objeto  Foco de atención principal de la asignatura
  • 13. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Compiladores e interpretes Compiladores e interpretes I. Compilador Un compilador es un artefacto software capaz de generar un programa ejecutable a partir de un programa escrito en un lenguaje de alto nivel II. Interprete Un interprete es un artefacto software capaz de ir interpretando secuencialmente la colección de instrucciones de un programa escrito en un lenguaje de alto nivel para ejecutarlas › Se obtiene un fichero ejecutable › El proceso de compilación se realiza sólo una vez › El proceso de compilación es más lento › Mayor consumo de memoria › Mayor cantidad de detalles de errores de compilación › Mayor velocidad de ejecución del programa ejecutable › Los errores en ejecución se minimizan › No se obtiene un fichero ejecutable › El proceso de interpretación se realiza cada vez › El proceso de interpretación es más rápido › Menor consumo de memoria › Menor cantidad de detalles de errores de compilación › Menor velocidad de ejecución del programa ejecutable › Los errores en ejecución son mayores
  • 14. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Contexto de compilación I. Precompilador Algunos compiladores incluyen precompiladores capaces de hacer un tratamiento preliminar del fichero fuente para prepararlo para el proceso de la compilación. Esta herramienta suele eliminar comentarios, sustituir constantes simbólicas por sus valores literales, o extender en el código fuente las macros definidas II. Compilador El compilador es el programa encargado de realizar el proceso de traducción del programa fuente para expresarlo en términos de una secuencia de instrucciones de código máquina interpretables por un ordenador  Foco de atención principal de la asignatura III. Enlazador o montador El producto resultante del compilador no es un fichero directamente ejecutable en la arquitectura. Muchas funciones, invocadas desde el programa fuente, y cuyo código se encuentra programado y compilado en otro fichero deben ser incorporadas al fichero resultante de la compilación para que sea autónomo. De esto se encarga el montador Elementos del contexto de la compilación
  • 15. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Contexto de compilación Elementos del contexto de la compilación IV. Enlazador dinámico Con el ánimo de que los programas finales no sean muy pesados, muchas funciones externas no se incluyen en el ejecutable final sino que son enlazadas dinámica y automáticamente por el sistema operativo, que se encarga de gestionarlas. Como consecuencia los ejecutables son más pequeños pero establecen dependencias con recursos que han de estar presentes en el sistema operativo V. Depurador Los errores producidos en tiempo de compilación son reportados por el compilador para su corrección. Sin embargo los ocurridos en tiempo de ejecución pueden ser más difíciles de detectar. Es necesario hacer ejecuciones paso a paso para comprobar el estado que va tomando cada variable del programa. El depurador ayuda a realizar este tipo de trazas VI. Ensamblador A veces los compiladores no generan programas directamente ejecutables en código máquina sino ficheros que corresponden a la expresión en ensamblador del código fuente. Esto puede ser tremendamente útil - aunque en la actualidad no frecuente – para permitir al programador optimizar los resultados generados por el compilador
  • 16. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Contexto de compilación Ejecutable DOS Ejecutable Windows .C .H Precompilador .I .ASM Compilador Ensamblador .OBJ .OBJ .OBJ Enlazador . LIB .ASM .EXE .EXE Ensamblador Enlazador dinámico . DLL Proceso Recurso Compilador de C
  • 17. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Proceso de compilación Fases de compilación Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso se articula conceptualmente en una secuencia de fases › Análisis léxico › Análisis sintáctico › Análisis semántico › Generación de código intermedio › Generación de código final Analizador léxico Analizador sintáctico Analizador semántico Código intermedio Código final e · l · i · h · w <WHILE, PR> S WHILE E DO S E > E S WHILE E DO S E > E √ LD a t1 LD b t2 GRT t3 t1 t2 BRZ t3 L1 … 0000 0011 0000 0011 0100 0001 0100 0000 0001 0010 … While ( a > b ) do a := a + 1;
  • 18. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Proceso de compilación Fases de compilación Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso se articula conceptualmente en una secuencia de fases Analizador léxico e · l · i · h · w <WHILE, PR> While ( a > b ) do a := a + 1; I. Análisis léxico El analizador léxico (scanner) va leyendo caracteres del fichero hasta encontrar una entidad con significado léxico. Estas entidades se llaman tokens y son una estructura de datos que contiene información acerca del mismo (tipo, lexema, número de fila y columna, valor, etc.) La construcción de analizadores léxicos suele hacerse mediante herramientas que hay que configurar indicando el tipo de token que es necesario emitir para cada posible patrón léxico while : <WHILE, PR> do : <DO, PR> l (l | d)* : <a, ID> ...
  • 19. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Proceso de compilación Fases de compilación Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso se articula conceptualmente en una secuencia de fases Analizador sintáctico <WHILE, PR> II. Análisis sintáctico El analizador sintáctico (parser) va pidiendo tokens al analizador léxico y los va organizando en frases de acuerdo a las reglas de construcción gramatical del lenguaje. Como resultado genera un árbol de análisis sintáctico que representa todo el programa en memoria La construcción de analizadores sintácticos suele hacerse mediante herramientas que hay que configurar indicando la colección de reglas sintácticas que definen las construcciones del lenguaje gramaticalmente correctas S ::= SIf | Swhlile | ... SWhile ::= while PI E PD do S; E ::= E + E E ::= E * E E ::= E > E E ::= E < E E ::= id ... SWhile WHILE E DO S E > E <a, ID> <>, GT> <b, ID> <DO, PR> <a, ID> <:=, ASIG> ... <(, PI> <), PD>
  • 20. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Proceso de compilación Fases de compilación Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso se articula conceptualmente en una secuencia de fases Analizador semántico III. Análisis semántico El analizador semántico se encarga de gestionar la declaración de constantes, funciones, procedimientos y variables y de comprobar la corrección de tipos a lo largo de todo el programa. Como resultado se obtiene un árbol de análisis sintáctico anotado, con atributos en cada uno de sus nodos La implementación del analizado semántico se realiza insertando acciones semánticas en las partes derechas de las reglas de producción gramatical S ::= SIf | Swhlile | ... SWhile ::= while PI E PD do S; {: if (E.tipo != booleano) error (); :} ... SWhile WHILE E DO S E > E SWhile WHILE E DO S E > E √
  • 21. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Proceso de compilación Fases de compilación Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso se articula conceptualmente en una secuencia de fases Código intermedio IV. Generación de código intermedio El generador de código intermedio traduce la representación arborescente del programa en una secuencia ordenada de instrucciones llamadas cuádruplas próximas al lenguaje máquina. Se trata de un lenguaje abstracto y genérico que aún mantiene las referencias simbólicas a los elementos declarados en el programa (variables, parámetros, funciones, etc.) La implementación del generador de código intermedio se realiza insertando acciones en las partes derechas de las reglas de producción que acumulan la traducción parcial del subárbol en cada nodo exp ::= exp:e1 > exp:e2 {:... e.código = e1.código + e2.código + CMP e1.temp r2.temp e.temp :}; SWhile WHILE E DO S E > E √ LD a t1 LD b t2 GRT t3 t1 t2 BRZ t3 L1 ...
  • 22. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Proceso de compilación Fases de compilación Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso se articula conceptualmente en una secuencia de fases Optimización Código intermedio V. Optimización de código intermedio En los compiladores comerciales es frecuente optimizar el resultado de la fase anterior para hacer el programa más compacto y más rápido. Suelen aplicarse estrategias de transformaciones heurísticas y elementales que ofrecen buenos resultados LD a t1 LD b t2 GRT t3 t1 t2 BRZ t3 L1 ... LD a t1 LD b t2 GRT t3 t1 t2 BRZ t3 L1 ... √ WHILE (A>B) AND (A<2*B-5) DO A:=A+B L1: IF A>B GOTO L2 GOTO L3 L2: T1 := 2*B T2 := T1 – 5 IF A< T2 GOTO L4 GOTO L3 L4: A := A + B GOTO L1 L3: ... Optimización Código intermedio L1: IF A<=B GOTO L2 T1 := 2*B T2 := T1 – 5 IF A>= T2 GOTO L2 A := A + B GOTO L1 L2: …
  • 23. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Proceso de compilación Fases de compilación Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso se articula conceptualmente en una secuencia de fases VI. Código final Una vez que el código intermedio ha sido generado y optimizado pueden resolverse las referencias simbólicas a posiciones de memoria física y a recursos de la máquina (registros, pila, etc.). Además debe traducirse cada cuarteto a sus equivalentes instrucciones en código máquina La traducción a código final se encarga de hacerla una rutina de traducción ubicada en la acción semántica final ubicada al final de la regla de producción del axioma Código final LD a t1 LD b t2 GRT t3 t1 t2 BRZ t3 L1 ... 0000 0011 0000 0011 0100 0001 0100 0000 0001 0010 …
  • 24. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Proceso de compilación Etapas de compilación › Expertos en lenguajes › Independencia de arquitectura › Dependencia de lenguaje › Optimización de lenguajes Analizador léxico Analizador sintáctico Analizador semántico Código intermedio Código final e · l · i · h · w <WHILE, PR> S WHILE E DO S E > E S WHILE E DO S E > E √ 0000 0011 0000 0011 0100 0001 0100 0000 0001 0010 … While ( a > b ) do a := a + 1; Etapa de análisis Etapa de síntesis › Expertos en arquitecturas › Dependencia de arquitectura › Independencia de lenguaje › Optimización de ejecución LD a t1 LD b t2 GRT t3 t1 t2 BRZ t3 L1 …
  • 25. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Proceso de compilación Equipos de compilación Analizador léxico Analizador sintáctico Analizador semántico Código intermedio While ( a > b ) do a := a + 1; Equipo de Lenguaje Optimización Código intermedio Código final Analizador léxico Analizador sintáctico Analizador semántico Código intermedio Optimización Código intermedio Código final LD a t1 LD b t2 GRT t3 t1 t2 BRZ t3 L1 … Equipo de arquitectura Pascal C Intel Solaris Código intermedio M N x … … while ( a > b ) a++;
  • 26. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Proceso de compilación Artefactos de compilación A lo largo de todo el proceso de compilación se una colección de artefactos para dar soporte al mismo. A lo largo del curso los estudiaremos en detalle. Dos son de vital importancia I. Tabla de símbolos La tabla de símbolos se utiliza para gestionar todos los elementos declarados por programador (constantes, tipos, variables, funciones y procedimientos) Analizador léxico Analizador sintáctico Analizador semántico Código intermedio Optimización Código intermedio Código final Tabla de símbolos Analizador léxico En compiladores antiguos utilizado para reconocer palabras clave Analizador semántico Registra los elementos declarados por el programador y los consulta para efectuar la comprobación de tipos Código intermedio Se consulta para conocer el espacio de memoria que debe reservarse para gestionar la activación de subrutinas y para determinar el ámbito de declaración de los elementos Código final Se utiliza para traducir las referencias simbólicas a posiciones de memorial Fase Descripción
  • 27. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Proceso de compilación Artefactos de compilación A lo largo de todo el proceso de compilación se una colección de artefactos para dar soporte al mismo. A lo largo del curso los estudiaremos en detalle. Dos son de vital importancia II. Gestor de errores Las tres primeras fases pueden generar errores durante el proceso de compilación. El gestor de errores se encarga de emitir mensajes de los mismos para informar al programador Gestor de errores Analizador léxico Carácter ñ no válido Whiñe ( a > b ) do a := a + 1; Analizador sintáctico Analizador semántico SWhile ::= WHILE e DO s Analizador léxico While ( a > b ) a := a + 1; Analizador sintáctico Analizador léxico While ( a > b ) do a := a + ‘c’; Se esperaba un entero en expresión de suma
  • 28. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Análisis de compiladores Representación de un compilador Como se ha discutido a lo largo del tema un compilador es una máquina de transformación capaz de traducir un programa escrito en un lenguaje fuente a otro programa escrito en otro lenguaje objeto. A su vez, éste está implementado en un tercer lenguaje llamado lenguaje anfitrión. Por tanto, para representar en abstracto un compilador suele emplearse una representación en forma de T que incluye los 3 lenguajes que lo caracterizan › Lenguaje objeto (T) › Lenguaje fuente (S) › Lenguaje anfitrión (H) S T H  H es un lenguaje máquina frecuentemente igual a T
  • 29. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Análisis de compiladores Tipos de compiladores H I. Ensamblador ASM Máquina H II. Compilador cruzado S T H = T H III. Autocompilador S T H != T H = S H IV. Metacompilador S T H V. Descompilador T S S especificaciones T es un compilador Se traduce de T a S
  • 30. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Análisis de compiladores Portabilidad de compiladores I. Portabilidad fuente destino A B H B C H = A C H II. Portabilidad de host A B H H K M = A B K La concatenación transitiva de dos compiladores da como resultado un compilador del fuente del primero al objeto del segundo Si tenemos un compilador con anfitrión H y necesitamos uno con anfitrión K podemos usar un compilador H a K y traducir los anfitriones
  • 31. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Análisis de compiladores Portabilidad de compiladores III. Arranque automático por transferencia Java ENS Java Java ENS ENS = Java ENS ENS Construimos un compilador de java provisional en ensamblador. Construirnos un compilador de java a ensamblador en java. Para compilarlo utilizamos el compilador provisional y obtenemos un compilador de java a ensamblador en ensamblador mejorado. Recurrimos iterativamente sustituyendo en cada pasada el compilador provisional por el nuevo en la iteración anterior
  • 32. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Construcción de compiladores en la práctica Descripción de la práctica S ENS2001 Java › Lenguaje fuente : S › Lenguaje objeto : ENS2001 › Lenguaje anfitrión : Java Entrega de Febrero Entrega de Junio › Analizador léxico › Analizador sintáctico 50% especificación Sesión de control (Enero) › Analizador léxico › Analizador sintáctico › Analizador semántico › Generación de código intermedio › Generación de código final 50% especificación Sesión de control (Mayo) Test Entrega de Septiembre › Analizador léxico › Analizador sintáctico › Analizador semántico › Generación de código intermedio › Generación de código final 100% especificación Sesión de control (Junio) Test › JFlex › Cup › Ant › Marco de desarrollo › ENS2001 Características Herramientas
  • 33. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Construcción de compiladores en la práctica Primeros pasos con la práctica › Instalar JDK › Descargar JDK de la página Web › Ejecutar el instalable › Comprobar la actualización de las variables de entorno path y classpath › Descargar un IDE de desarrollo › NetBeans › Eclipse › Descargar el marco de desarrollo proporcionado › Descargar del entorno virtual › Crear un proyecto a partir del marco de desarrollo › Actualizar el IDE para que reconozca todas las libarías › Crear tareas ant desde el IDE para ejecutar los scripts de ejecución y prueba de la práctica I. Instalación y descarga
  • 34. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Construcción de compiladores en la práctica Primeros pasos con la práctica II. Desarrollo sobre el framework de soporte Las clases compiladas se generan aquí Las documentación de la arquitectura (sobre todo en 2ºcuatrimestre) Tareas ant para ejecutar y depurar la práctica  clear  jflex  cup  build  flexTest  cupTest  finalTest Memoria de la práctica según formato establecido Consúltese el documento “Directrices de implementación” Especificaciones gramaticales de Cup Especificaciones léxicas de JFlex Test de prueba para las especificaciones A y B Librerías necesarias Continúa… Esta primera parte del framework contiene la documentación, ficheros de configuración, librerías de ejecución, y directorios de soporte a la compilación
  • 35. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Construcción de compiladores en la práctica Primeros pasos con la práctica II. Desarrollo sobre el framework de soporte Consúltese el documento “Directrices de implementación” Esta segunda parte del framework contiene la infraestructura de clases abiertas que el usuario debe extender o completar Acceso a los artefactos del compilador Entorno de ejecución donde se efectúa la generación del código final Artefactos para la generación de código intermedio Clase Token para comunicar el analizador léxico con el sintáctico Clases Symbol y Type para representar los tipos y símbolos Clases para representar los no terminales del árbol de análisis sintáctico Programar para la prueba y depuración  LexicalTestCase  SyntaxTestCase  FinalTestCase Continúa…
  • 36. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Construcción de compiladores en la práctica Primeros pasos con la práctica II. Desarrollo sobre el framework de soporte Consúltese el documento “Directrices de implementación” Esta tercera parte del framework contiene la infraestructura de clases cerradas que ofrecen al usuario funcionalidades completas para utilizar Entorno de ejecución donde se efectúa la generación del código final Artefactos para la generación de código intermedio Artefactos para el análisis léxicos y el control de errores Artefactos para el análisis semántico y el control de errores Artefactos para el análisis sintáctico y el control de errores
  • 37. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Construcción de compiladores en la práctica Primeros pasos con la práctica › La ejecución y prueba del marco de trabajo esta dirigida por tareas ant › Clear: Borrar el contenido de /clases › JFlex: Generar el analizador léxico (como un fichero fuente en src/lexical/scanner.java) › Cup: Generar el analizador sintáctico (como un fichero fuente en src/syntax/parser.java) › Build: Cup + Jflex + Compile › flexTest: Ejecuta la prueba LexicalTestCase (generar tokens hasta final de fichero) › cupTest: Ejecuta la prueba SyntaxTestCase (ejecuta el parser) › finalTest: Ejecuta la prueba FinalTestCase (ejecuta el parser y traza el estado del compilador) › Familia de tablas de símbolos creadas › Familia de tablas de tipos creadas III. Ejecución y prueba
  • 38. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Construcción de compiladores en la práctica Primeros pasos con la práctica › Especificación del analizador léxico › Generación (Jflex + compilar) › Prueba (FlexTest) › Especificación del analizador sintáctico › Generación (Build) › Prueba (CupTest) › Integración del analizador lexico con el sintáctico › Generación (Build) › Prueba (CupTest) III. Fases de desarrollo del compilador › Implementación en cup del sistema de tipos › Generación (Build) › Prueba (FinalTest) › Generación de código intermedio › Generación (Build) › Prueba (FinalTest) › Generación de código Final › Generación (Build) › Prueba (FinalTest) › Pruebas finales con fichero de test 1er cuatrimestre 2º cuatrimestre
  • 39. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Bibliografía Material de estudio Bibliografía básica Construcción de compiladores: principios y práctica Kenneth C. Louden International Thomson Editores, 2004 ISBN 970-686-299-4
  • 40. Javier Vélez Reyes jvelez@lsi.uned.es Introducción. El proceso de traducción Bibliografía Material de estudio Bibliografía complementaria Compiladores: Principios, técnicas y herramientas. Segunda Edición Aho, Lam, Sethi, Ullman Addison – Wesley, Pearson Educación, México 2008 Diseño de compiladores. A. Garrido, J. Iñesta, F. Moreno y J. Pérez. 2002. Edita Universidad de Alicante