UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA
Escuela Técnica Superior de Ingeniería Informática
Procesadores de Lenguajes
Tema 7
Tema 7
El entorno de Ejecución
El entorno de Ejecución
Compilación de subprogramas
Compilación de subprogramas
Javier Vélez Reyes
[email protected]
Javier Vélez Reyes
[email protected]
Objetivos del Tema
Objetivos del Tema
Estudiar el entorno de ejecución
(cid:132)(cid:132) Estudiar el entorno de ejecución
¿Qué es el entorno de ejecución?
(cid:132)(cid:132) ¿Qué es el entorno de ejecución?
¿Qué estructura tiene?
(cid:132)(cid:132) ¿Qué estructura tiene?
¿Para qué se utiliza?
(cid:132)(cid:132) ¿Para qué se utiliza?
Aprender a gestionarlo para subprogramas
(cid:132)(cid:132) Aprender a gestionarlo para subprogramas
Funciones no recursivas
(cid:132)(cid:132) Funciones no recursivas
Funciones recursivas directas e indirectas
(cid:132)(cid:132) Funciones recursivas directas e indirectas
Funciones locales
(cid:132)(cid:132) Funciones locales
1
Javier Vélez Reyes
[email protected]
Índice General
Índice General
Introducción
(cid:132)(cid:132) Introducción
El entorno de ejecución
(cid:132)(cid:132) El entorno de ejecución
Registro de activación
(cid:132)(cid:132) Registro de activación
Secuencia de llamada y retorno
(cid:132)(cid:132) Secuencia de llamada y retorno
Comprobaciones semánticas
(cid:132)(cid:132) Comprobaciones semánticas
Implementación con m2r
(cid:132)(cid:132) Implementación con m2r
Gestión de tabla de tipos
(cid:132)(cid:132) Gestión de tabla de tipos
Gestión de la tabla de símbolos
(cid:132)(cid:132) Gestión de la tabla de símbolos
Funciones sin recursividad
(cid:132)(cid:132) Funciones sin recursividad
Compilación del cuerpo de la función
(cid:132)(cid:132) Compilación del cuerpo de la función
Compilación de la llamada a la función
(cid:132)(cid:132) Compilación de la llamada a la función
Javier Vélez Reyes
[email protected]
Índice General
Índice General
Funciones con recursividad
(cid:132)(cid:132) Funciones con recursividad
Compilación del cuerpo de la función
(cid:132)(cid:132) Compilación del cuerpo de la función
Compilación de instrucciones
(cid:132)(cid:132) Compilación de instrucciones
Compilación de la llamada a la función
(cid:132)(cid:132) Compilación de la llamada a la función
Funciones locales
(cid:132)(cid:132) Funciones locales
Encadenamiento de accesos
(cid:132)(cid:132) Encadenamiento de accesos
Display
(cid:132)(cid:132) Display
Paso de parámetros
(cid:132)(cid:132) Paso de parámetros
2
Javier Vélez Reyes
[email protected]
El entorno de ejecución
(cid:132)(cid:132) El entorno de ejecución
Introducción
Introducción
El entorno de ejecución viene dado por la estructura de memoria
El entorno de ejecución viene dado por la estructura de memoria
incluidos los registros de la unidad central de proceso y la forma
incluidos los registros de la unidad central de proceso y la forma
de gestionarla que permite desarrollar adecuadamente el proceso
de gestionarla que permite desarrollar adecuadamente el proceso
de ejecución de un programa
de ejecución de un programa
Condiciona
(cid:132)(cid:132) Condiciona
La gestión de memoria dinámica
(cid:132)(cid:132) La gestión de memoria dinámica
La implementación de ámbitos
(cid:132)(cid:132) La implementación de ámbitos
La gestión de funciones y procedimientos
(cid:132)(cid:132) La gestión de funciones y procedimientos
Javier Vélez Reyes
[email protected]
El entorno de ejecución
El entorno de ejecución
2 zonas del entorno de ejecución
(cid:132)(cid:132) 2 zonas del entorno de ejecución
Zona de código
(cid:132)(cid:132) Zona de código
Contiene el código del programa
(cid:132)(cid:132) Contiene el código del programa
Contiene variables globales y estáticas
(cid:132)(cid:132) Contiene variables globales y estáticas
Permanece inalterada durante la ejecución
(cid:132)(cid:132) Permanece inalterada durante la ejecución
Es posible direccionar cada instrucción en compilación
(cid:132)(cid:132) Es posible direccionar cada instrucción en compilación
Zona de datos
(cid:132)(cid:132) Zona de datos
Contiene variables locales
(cid:132)(cid:132) Contiene variables locales
Mantiene información para gestionar funciones recursivas
(cid:132)(cid:132) Mantiene información para gestionar funciones recursivas
Contiene espacio para datos dinámicos (malloc)
(cid:132)(cid:132) Contiene espacio para datos dinámicos (malloc)
No hay relación biunívoca entre variables y direcciones
(cid:132)(cid:132) No hay relación biunívoca entre variables y direcciones
3
Javier Vélez Reyes
[email protected]
El entorno de ejecución
El entorno de ejecución
Tipos de entornos de ejecución
(cid:132)(cid:132) Tipos de entornos de ejecución
Completamente estáticos
(cid:132)(cid:132) Completamente estáticos
La dirección de cada dato es conocida en compilación
(cid:132)(cid:132) La dirección de cada dato es conocida en compilación
No existe recursividad, variables locales, memoria dinámica
(cid:132)(cid:132) No existe recursividad, variables locales, memoria dinámica
Fortran 77
(cid:132)(cid:132) Fortran 77
Basados en pila
(cid:132)(cid:132) Basados en pila
Los datos se almacenan en una pila
(cid:132)(cid:132) Los datos se almacenan en una pila
Permite recursividad, variables locales, memoria dinámica
(cid:132)(cid:132) Permite recursividad, variables locales, memoria dinámica
El código es conocido en tiempo de compilación
(cid:132)(cid:132) El código es conocido en tiempo de compilación
C/C++, Pascal, Ada
(cid:132)(cid:132) C/C++, Pascal, Ada
Completamente dinámicos
(cid:132)(cid:132) Completamente dinámicos
Código y datos pueden modificarse en ejecución
(cid:132)(cid:132) Código y datos pueden modificarse en ejecución
Permite generar y modificar funciones
(cid:132)(cid:132) Permite generar y modificar funciones
Lisp, Prolog
(cid:132)(cid:132) Lisp, Prolog
Javier Vélez Reyes
[email protected]
Registro de activación
Registro de activación
Registro de activación RA contiene datos de función
(cid:132)(cid:132) Registro de activación RA contiene datos de función
Parámetros de la función
(cid:132)(cid:132) Parámetros de la función
Variables locales y temporales
(cid:132)(cid:132) Variables locales y temporales
El valor devuelto
(cid:132)(cid:132) El valor devuelto
Dirección de retorno
(cid:132)(cid:132) Dirección de retorno
(cid:132)(cid:132) ……
Se almacena en
(cid:132)(cid:132) Se almacena en
Área estática en Fortran 77
(cid:132)(cid:132) Área estática en Fortran 77
Pila en C/C++, Pascal o Ada
(cid:132)(cid:132) Pila en C/C++, Pascal o Ada
Montículo en Lisp
(cid:132)(cid:132) Montículo en Lisp
valor retorno
valor retorno
dirección retorno
dirección retorno
Datos temporales
Datos temporales
parámetros
parámetros
Datos locales
Datos locales
4
Javier Vélez Reyes
[email protected]
Secuencias de llamadas y retorno
Secuencias de llamadas y retorno
Llamar una función implica
(cid:132)(cid:132) Llamar una función implica
Una secuencia de llamada
(cid:132)(cid:132) Una secuencia de llamada
Ejecutar la función
(cid:132)(cid:132) Ejecutar la función
Una secuencia de retorno
(cid:132)(cid:132) Una secuencia de retorno
Secuencia de llamada (Call sequence)
(cid:132)(cid:132) Secuencia de llamada (Call sequence)
Reserva de espacio para el RA
(cid:132)(cid:132) Reserva de espacio para el RA
Almacenamiento de la dirección de retorno
(cid:132)(cid:132) Almacenamiento de la dirección de retorno
Cálculo y almacenamiento de los parámetros actuales
(cid:132)(cid:132) Cálculo y almacenamiento de los parámetros actuales
Salvaguarda del estado de ejecución (registros)
(cid:132)(cid:132) Salvaguarda del estado de ejecución (registros)
Secuencia de retorno (return sequence)
(cid:132)(cid:132) Secuencia de retorno (return sequence)
Almacenar el valor devuelto por la función
(cid:132)(cid:132) Almacenar el valor devuelto por la función
Devolver el control al programa llamante
(cid:132)(cid:132) Devolver el control al programa llamante
Javier Vélez Reyes
[email protected]
Comprobaciones semánticas
Comprobaciones semánticas
Al trabajar con funciones el ETDS debe comprobar
(cid:132)(cid:132) Al trabajar con funciones el ETDS debe comprobar
No se usan paréntesis con identificadores de variable
(cid:132)(cid:132) No se usan paréntesis con identificadores de variable
No se usan identificadores de funciones como variables
(cid:132)(cid:132) No se usan identificadores de funciones como variables
En una llamada debe coincidir
(cid:132)(cid:132) En una llamada debe coincidir
El número, tipo y orden de los parámetros formales
(cid:132)(cid:132) El número, tipo y orden de los parámetros formales
El número, tipo y orden de los parámetros actuales
(cid:132)(cid:132) El número, tipo y orden de los parámetros actuales
Realizar conversiones implícitas entre tipos compatibles
(cid:132)(cid:132) Realizar conversiones implícitas entre tipos compatibles
5
Javier Vélez Reyes
[email protected]
Implementación con m2r
Implementación con m2r
Ejemplo
(cid:132)(cid:132) Ejemplo
Máquina virtual m2r
(cid:132)(cid:132) Máquina virtual m2r
Entorno de ejecución estático
(cid:132)(cid:132) Entorno de ejecución estático
Todos los datos ocupan una posición de memoria
(cid:132)(cid:132) Todos los datos ocupan una posición de memoria
int a;
int a;
int g1 () {
int g1 () {
return 10;
return 10;
}
}
int g2 (int a, int b) {
int g2 (int a, int b) {
int x, y, z;
int x, y, z;
return a*b;
return a*b;
}
}
main () {
main () {
a = g2(3,5);
a = g2(3,5);
}
}
L1:
L2:
L3:
jmp L3
jmp L3
Código de g1
Código de g1
Código de g2
Código de g2
Código de main
Código de main
100
101
102
103
104
105
106
107
Valor retorno
Valor retorno
Dirección retorno
Dirección retorno
Parámetro a
Parámetro a
Parámetro b
Parámetro b
Variable local x
Variable local x
Variable local y
Variable local y
Variable local z
Variable local z
Temporales locales
Temporales locales
Javier Vélez Reyes
[email protected]
Implementación con m2r
Implementación con m2r
Ejemplo
(cid:132)(cid:132) Ejemplo
Código en el
Comentarios de: Procesadores de Lenguajes - Tema 7. Compilación de subprogramas (0)
No hay comentarios