Lenguajes de Programación

Documentos relacionados
Lenguajes de Programación

ESTRUCTURA DE LOS LENGUAJES DE PROGRAMACIÓN

Lenguajes de Programación

Lenguajes de Programación I

Compiladores: Ambientes para Ejecución. Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. María Constanza Pabón

Lenguajes de Programación I

2.2 Nombres, Ligado y Ámbito

Procesadores de lenguaje Tema 5 Comprobación de tipos

Tema 3 SUBRUTINAS. Estructura de Computadores OCW_2015 Nekane Azkona Estefanía

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas

Paradigma Orientado a Objetos Caso de estudio: Squeak Smalltalk. Lenguajes de Programación 2018

Tipo de Datos Abstractos y Programación Orientada a Objetos

Tema 6 Organización y gestión de la memoria

UNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM

Compiladores: Análisis Semántico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inès Alvarez V.

Modelos de Desarrollo de Programas Y Programación Concurrente Clase N 3: 3 - Paradigmas de Programación

Capítulo 3. Subprogramas. 3.1 Subprogramas FUNCTION

Construyendo Programas más Complejos

Lenguajes de Programación. Juan Zamora O. Semestre II Nombres, Ambitos y Ligados

Universidad de Valladolid. Departamento de informática. Campus de Segovia. Estructura de datos Tema 1: Recursividad. Prof. Montserrat Serrano Montero

Dra. Jessica Andrea Carballido

14/03/2018. Problemas, Algoritmos y Programas. Problemas, Algoritmos y Programas. Programas y Lenguajes. Programas y Lenguajes. Programas y Lenguajes

Dra. Jessica Andrea Carballido

Dra. Jessica Andrea Carballido

Programación I Teoría II.

Tema 2.- Expresiones y funciones

Lenguajes de Programación

Tema 8 Gestión de la memoria en tiempo de ejecución.

Programación MODULAR: Subalgoritmos - funciones y procedimientos

Unidad Didáctica 3. Tipos genéricos. Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2017

Nombres, Ligaduras, Chequeo de Tipos y Alcance. Luis Garreta (Basados en el libro de Robert Sebesta)

Lenguajes de Programación

Programación Avanzada CONCEPTOS BÁSICOS DE IMPLEMENTACIÓN EN C++

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas

LENGUAJE FORTRAN. FUNCIONES Y SUBRUTINAS

TEMA 5: Subprogramas, programación modular

Arquitectura de Computadoras

Dra. Jessica Andrea Carballido

Java. Introducción a la Programación Orientada a Objetos

1 Introducción a los algoritmos y a la programación de computadoras... 1

Unidad IV. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores.

Clases y Objetos en C++

Lógica: Algoritmo: Archivo: Base de datos: Bit:

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2018

Departamento de Informática Universidad de Valladolid Campus de Segovia TEMA 1: RECURSIÓN

UNIDAD 3 Modularidad

ANEXO XVII DE LA RESOLUCION N

! Qué es la POO?! Un paradigma de programación. ! No hay paradigmas mejores ni peores! Todos tienen sus ventajas e inconvenientes

Entendiendo expresiones lambda en C# con Mono

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

CAPITULO 6: FUNCIONES

Programación Orientada a Objetos en C++

Funciones y subrutinas

Programación Unidad 4. Modularidad. Programación TIG - TUP. Sede Regional Orán UNIVERSIDAD NACIONAL DE SALTA

Funciones y Datos en Intel 8086

Diseño de Compiladores I. Estructura General de un Compilador

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Programación Introducción al curso

4.1 Definición. Se dice que algo es recursivo si se define en función de sí mismo o a sí mismo. Un objeto (problemas, estructuras de datos) es

Diseño de compiladores. Organización de memoria. Organización de memoria. Organización de memoria. Zona de código 04/05/2014 ORGANIZACIÓN DE MEMORIA

Lenguajes de Programación I

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.

Definición de clase: Una clase es un prototipo que define las variables y los métodos de todos los objetos con características comunes.

Definición de clase: Una clase es un prototipo que define las variables y los métodos de todos los objetos con características comunes.

Aplicación de la Inducción Matemática Programación Funcional. Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca

Aspectos de los LP. Diseño de compiladores. Estático vs. Dinámico. Estático vs. Dinámico. Scope. Scope 24/03/2015

Planificaciones Algoritmos y Programación I. Docente responsable: CARDOZO MARTIN MIGUEL. 1 de 7

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

Planificaciones Algoritmos y Programación I. Docente responsable: CARDOZO MARTIN MIGUEL. 1 de 8

Principios de Computadoras II

Subprogramas en Fortran 90. Seminario de Computación 2009

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Lenguajes de programación. Algoritmos y Estructuras de Datos I. Lenguajes compilados. Lenguajes compilados

Algorítmica y Lenguajes de Programación. Punteros Introducción a estructuras dinámicas

Estructura de Datos y de la Información. Tema 1: Gestión dinámica de la memoria. Departamento de Computación Universidade da Coruña, España.

PRÁCTICA DE PROCESADORES DE LENGUAJE EVALUACIÓN ORDINARIA CURSO 2009/2010 OBJETIVO DE LA PRÁCTICA

Conceptos. ELO329: Diseño y Programación Orientados a Objetos. ELO 329: Diseño y Programación Orientados a Objetos 1

Introducción a OOP. Programación Orientada a Objeto

PROGRAMACIÓN EN JAVA

Parte I: Elementos del lenguaje Ada

Recursividad Definición

Análisis semántico: Comprobación de tipos

Compiladores e intérpretes Introducción

Guía práctica de estudio 08: Polimorfismo

Programación I Recursividad.

ALGORITMICA Y PROGRAMACION POR OBJETOS I

Introducción a PL/SQL

Tema 1. Introducción a la Programación Orientada a Objetos

1. ESTRUCTURA DE UN PROGRAMA PASCAL Todo programa escrito en lenguaje Pascal, del más simple al más complejo, tiene la siguiente estructura:

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

FUNCIONES. Identificador valido. Tipo-Funcion Identificador_de_la_funcion (Tipo par1,tipo par2 )

Resolución de Problemas y Algoritmos Segundo cuatrimestre 2015 Clase 11: Construcción de primitivas (Funciones)

Índice general 7. Presentación 15

Transcripción:

Lenguajes de Programación Subrutinas y abstracción de control Ma. Laura Cobo Departamento de Ciencias e Ingeniería de la Computación 2018 1 Prof. Ma. Laura Cobo Página 1

Abstracción Proceso a través del cual el programador puede asociar un nombre con un fragmento del programa. La idea es pensar la misma en términos de su propósito o funcionalidad en lugar de en términos de su implementación. De control su propósito es definir una operación bien definida De datos su propósito es representar información (notar que en general para contar con abstracción de datos hace falta contar con abstracción de control) 2 Prof. Ma. Laura Cobo Página 2

Control de secuencia Las estructuras de control de secuencia puede categorizarse en cuatro grupos: Expresiones: Las expresiones son la forma básica de construir bloques y expresan como los datos son manipulados y modificados por el programa Sentencias o instrucciones: determinan como el control fluye deunsegmentodeprogramaaotro Programación declarativa: modelo de ejecución que no depende de sentencias, pero establece como la ejecución tiene lugar(ejemplo Prolog) Unidades-Subprogramas: indican una manera de pasar transferir el control de un segmento de programa a otro. Esta división no es precisa ya que hay lenguajes que tiene mas de una característica, por ejemplo LISP (computa con expresiones pero usa mecanismos de control de sentencias) 3 Prof. Ma. Laura Cobo Página 3

Control de secuencia Las estructuras de control de secuencia pueden ser: Implícitas: son las definidas por el lenguaje para tener efecto a menos que sean modificadas por el programador a través de una estructura de control explícita Explícitas: son aquellas definidas por el programador para modificar el control implícito. Por ejemplo el uso de los paréntesis en las expresiones o el uso de la instrucción goto a un etiqueta en un programa que solo tiene secuencia En clases previas ya vimos como se resuelve el control de secuencia a través de expresiones e instrucciones. Veamos las dos alternativas que nos faltan. 4 Prof. Ma. Laura Cobo Página 4

Control de secuencia: Programación declarativa Pattern Matching: una operación tiene éxito si ajusta y asigna un conjunto de variables a un patrón predefinido Es una operación crucial para lenguajes como: Perl, Snobol, ML, Miranda, Prolog El pattern maching produce dos efectos: Por un lado, como estructura de control, permite decidir que parte del código se va a ejecutar Permite establecer ligaduras entre el patrón de la definición y el de la instancia (instancia las variables) 5 Prof. Ma. Laura Cobo Página 5

Abstracción Proceso a través del cual el programador puede asociar un nombre con un fragmento del programa. La idea es pensar la misma en términos de su propósito o funcionalidad en lugar de en términos de su implementación. De control su propósito es definir una operación bien definida subrutinas De datos su propósito es representar información (notar que en general para contar con abstracción de datos hace falta contar con abstracción de control) 6 Prof. Ma. Laura Cobo Página 6

Control de secuencia: Unidades o subrutinas Los lenguajes de programación imperativos y orientados a objetos brindan mecanismos para dividir el programa en unidades cada una de las cuales tiene cierta coherencia y lógica. Su incorporación fomenta: Eficiencia: permiten factorizar el código (en los primeros lenguajes solo se perseguía el incremento de eficiencia principalmente de almacenamiento) Legibilidad: metodología de diseño top-down (mecanismos más abstractos) Verificación: una unidad puede pensarse como una mapeo entre dominios de valores. Se intenta que los chequeos sean lo más seguros posibles, así evolucionaron los métodos de pasaje de parámetros. 7 Prof. Ma. Laura Cobo Página 7

Unidades o subrutinas Las unidades pueden ser: Anónimas(bloques) Con nombre asociado(subprogramas) Un unidad con nombre permite extender el lenguaje con una nueva primitiva. Para que la abstracción sea poderosa, se debería poder usar conociendo sólo la interfaz. La implementación debería ser transparente Recordar que la unidad puede ser una abstracción a nivel expresión o una abstracción a nivel instrucción 8 Prof. Ma. Laura Cobo Página 8

Unidades o subrutinas El los lenguajes orientados a objetos cada unidad con nombre brinda un servicio que puede ser provisto por cualquiera de las instanciasdelaclaseenlacuálsedefinelaunidad. Enestetipodelenguajeslaclaseeselmecanismodeabstracción Un servicio puede acceder y hasta modificar el estado interno del objeto que recibe el mensaje que provoca la ejecución de ese servicio AspectosdediseñoatenerencuentaporelLP: Entidades Ligaduras Reglas de alcance Sistemas de tipos Soporte para definir unidades 9 Prof. Ma. Laura Cobo Página 9

Unidades o subrutinas Aspectos de diseño específicos: Estructura estática Recursividad Control Métodos de pasaje de parámetros Correspondencia entre parámetros formales y actuales Sobrecarga y polimorfismo Tipos de los parámetros: datos y unidades Ambiente de referenciamiento de las unidades que recibe como parámetro(chequeo estático o dinámico de unidades) 10 Prof. Ma. Laura Cobo Página 10

Unidades o subrutinas Atributos de la unidad: Nombre: algunos lenguajes permiten definir unidades anónimas. Las unidades anónimas se ejecutan implícitamente y cuando se alcanzan se crea un nuevo ambiente de referenciamiento. Lista de parámetros: permiten la comunicación de la unidad con el resto del programa. Si se admiten parámetros de diferentes tipos la unidad es polimórfica. Ambiente de referenciamiento: se establece a que otras unidades puede referenciar Bloque ejecutable: si la unidad tiene la capacidad de llamarse a si misma soporta recursividad Alcance: segmento de código dentro del cual la unidad puede invocarse(si incluye a la misma unidad acepta recursividad) 11 Prof. Ma. Laura Cobo Página 11

Unidades Aspectos de implementación: Chequeo de tipos entre parámetros Unidades de compilación Creación del ambiente de referenciamiento local Estructura estática: La unidad tiene un encabezamiento y un cuerpo El encabezamiento está formado por el nombre de la unidad, la lista de parámetros y el tipo del resultado El cuerpo está formado por las declaraciones locales y la sección ejecutable 12 Prof. Ma. Laura Cobo Página 12

Unidades Estructura estática: En el encabezamiento se puede definir el perfil de los parámetros, el protocolo y la signatura El perfil de los parámetros de una unidad es el número, orden y tipo de los parámetros formales El protocolo de una unidad es el perfil de los parámetros más el tiporetornadoporlaunidad,siesquetiene La signatura de una unidad está dada por el nombre de la unidad y suprotocoloydefinelainterfazdelaunidad 13 Prof. Ma. Laura Cobo Página 13

Unidades La unidad estáticamente posee: Declaración Definición Invocación La unidad dinámicamente puede estar: Pasiva Activa Suspendida La invocación tiene una vinculación bidireccional con la activación de launidadyconsususpensión Su estado esta determinado por las estructuras de control 14 Prof. Ma. Laura Cobo Página 14

Unidades La comunicación entre unidades puede darse a través de: Ambiente global Ambiente implícito Parámetros y resultado La comunicación a través del ambiente global puede generar efectos colaterales La comunicación a través del ambiente implícito puede generar comportamiento sensible a la historia Recordemos que hay efecto colateral si la ejecución de una unidad modifica el ambiente de referenciamiento de la unidad llamadora 15 Prof. Ma. Laura Cobo Página 15

Mecanismos para definir unidades Bloques: unidades anónimas Rutinas: Abstracciones procedurales: abstracción a nivel instrucción Lamaneradeinvocaraestetipoderutinasesatravésdeuna llamadaenlacualapareceelnombredelarutina call <nombre proced> Abstracciones funcionales: abstracción a nivel expresión La manera de invocar a este tipo de rutinas es en el contexto de una expresión 16 Prof. Ma. Laura Cobo Página 16

Mecanismos para definir unidades Una abstracción procedural es una unidad que al ser invocada evalúa una instrucción y en general provoca un cambio en el estado de computación, esto es, modifica los valores del ambiente de referenciamiento de la llamada provocando un efecto colateral. El usuario de una procedimiento observa únicamente las transformaciones en estado de la memoria pero no los pasos que dieron lugar a esta transformación Una abstracción funcional es una unidad que evalúa una expresión y al ser invocada produce un resultado. Idealmente no debería producir un efecto colateral Es una manera de hacer abstracción a nivel expresión 17 Prof. Ma. Laura Cobo Página 17

Mecanismos para definir unidades: funciones En lenguajes imperativos Function Pot(n,m:int):int ifn=1 thenpot:=1 else Pot:= Pot(n,m-1)*n End; En algunos lenguajes se hace el return del valor (El valor computado no se asigna a una variable) Se utiliza el nombre la función como área de almacenamiento. Así el nombre de la función tiene dos semánticas dependiendo de dónde aparezca: 1. Área de almacenamiento auxiliar(a la izquierda) 2. Invocación recursiva(a la derecha) En lenguajes funcionales fun Pot(n,m:int):int ifn=1 then1 else Pot(n,m-1)*n End; En los lenguajes funcionales se evita la doble semántica sobre el nombre de la función. 18 Prof. Ma. Laura Cobo Página 18

Representación en memoria El espacio que se aloca para una subrutina en la pila se conoce como registro de activación o stack frame. El registro contiene los argumentos, valores de retorno(en caso que los tenga), variables locales y temporales. El registro se elimina de la pila cuando la subrutina alcanza su epílogo. Hay dos punteros que mantienen el estado de la pila: actual (frame pointer) y libre(stack pointer) Los objetos del registro de activación se acceden por desplazamiento desde la posición almacenada en actual. 19 Prof. Ma. Laura Cobo Página 19

Representación en memoria El espacio que se aloca para una subrutina en la pila se conoce como registro de activación o stack frame. El registro de activación mantiene además información de sistema para garantizar el funcionamiento: puntero de retorno, enlace dinámico. En aquellos lenguajes que admiten anidamiento, es necesario conservar la cadena estática a fin de resolver los accesos no locales(enlace estático) 20 Prof. Ma. Laura Cobo Página 20

Representación en memoria Si nuestro lenguaje considera unidades, nuestro procesador abstracto debe considerar la unidad de activación de P. La unidad de activación contiene toda la información relevante en ejecución de la unidad. Unidad de activación de Unidad P la unidad P Segmento de código de P Registro de activación de P 21 Prof. Ma. Laura Cobo Página 21

Representación en memoria El registro de activación de P contiene la información sobre los objetos de datos, del sistema y declarados en la unidad Dirección Registro de activación P registro de activación de la unidad P Objetos de datos del Sistema Objetos de datos asociados a las declaraciones en P 22 Prof. Ma. Laura Cobo Página 22

Representación en memoria ElaccesoacualquierobjetodedatodeclaradoenP,secalculacomo: Dirección Registro de Activación P + desplazamiento de la variable Unidad P.. varx:real En la declaración se determina el desplazamiento de la variable x x En la uso se accede a la misma mediante la fórmula: Dir. RA P + desplazamiento de x 23 Prof. Ma. Laura Cobo Página 23

Representación en memoria ElaccesoacualquierobjetodedatodeclaradoenP,secalculacomo: Dirección Registro de Activación P + desplazamiento de la variable Dirección Registro de activación P registro de activación de la unidad P Objetos de datos del Sistema Desplazamiento de x Objeto de dato x 24 Prof. Ma. Laura Cobo Página 24

Representación en memoria Si tratamos con unidades simples, sin parámetros, el único objeto del sistema que resulta imprescindible guardar es el puntero de retorno. registro de activación de Dirección Registro de activación P la unidad P Puntero de retorno Objetos de datos asociados a las declaraciones en P 25 Prof. Ma. Laura Cobo Página 25

Representación en memoria Los lenguajes de programación puede ser clasificados de acuerdo las decisiones que toman en diseño. Se puede clasificar de acuerdo al manejo de memoria y a las regla de alcance. La clasificación de acuerdo al manejo de memoria que utilizan no conduce a lenguajes: Estático Basado en pila Dinámico 26 Prof. Ma. Laura Cobo Página 26

Representación en memoria Por otro lado la clasificación de acuerdo a las reglas de alcance y al esquema de manejo de memoria: Alcance estático Alocación estática Alocación semiestática(basada en pila) Alocación semidinámica(basada en pila) Alocación dinámica(basada en pila) Alcance dinámico Finalmente si tomamos en cuenta la resolución de invocaciones a objetos de datos Acceso local Acceso global Esquema de alocación 27 Prof. Ma. Laura Cobo Página 27

LP con Alcance Estático Alocación Estática En compilación se determina: El alcance de cada variable y el ambiente de referenciamiento de cada unidad. El espacio requerido para mantener cada variable local a la unidad y su desplazamiento dentro del registro de activación. El espacio requerido para ejecutar la unidad. La asociación entre cada variable local del código y cada objeto de dato del registro de activación a través del par: dirección base del registro de activación + desplazamiento. La asociación entre cada variable global del código y cada objeto de dato en el área compartida: dirección base del área compartida + desplazamiento. 28 Prof. Ma. Laura Cobo Página 28

LP con Alcance Estático Alocación Estática En vinculación se conoce el desplazamiento de: La primera instrucción de cada unidad en el área de código C,respectoaunadirecciónbasedC. Cada registro de activación en el área de datos, respecto a una dirección base dd. En la carga del programa: Se reserva espacio de almacenamiento para todo el código y todos los registros de activación. Cada segmento de código queda asociado a un único registro de activación. 29 Prof. Ma. Laura Cobo Página 29

LP con Alcance Estático Alocación Estática Acceso al entrono local: Programa Desplazamiento Identificador Tipo program main integer i,j i:=1 k:=1 j:=i+k 0 i Integer 1 j Integer 2 k Integer Observaciones: - k está declarada en forma implícita. - El desplazamiento 0 corresponde al puntero de retorno. 30 Prof. Ma. Laura Cobo Página 30

LP con Alcance Estático Alocación Estática Acceso al entrono local: Programa program main integer i,j i:=1 k:=1 j:=i+k Segmento de código SET Main+,1 SET Main+2,1 SET Main+1, D[Main+0]+D[Main+2] 31 Prof. Ma. Laura Cobo Página 31

LP con Alcance Estático Alocación Estática Acceso al entrono local: Unidad subroutine P integer i,j Segmento de código SET dp+1,1 SET dp+3,1 SET dp+2, D[dP+1]+D[dP+3] i:=1 k:=1 j:=i+k Registro de activación 0 Puntero de retorno 1 i 2 j 3 k 32 Prof. Ma. Laura Cobo Página 32

LP con Alcance Estático Alocación Estática Acceso al entrono global: Programa Desplazamiento Identificador Tipo subroutine unit integer i,j common k 1 i Integer 2 j Integer 0 k Integer i:=1 k:=1 j:=i+k 33 Prof. Ma. Laura Cobo Página 33

LP con Alcance Estático Alocación Estática Acceso al entrono global: Programa subroutine unit integer i,j common k i:=1 k:=1 j:=i+k Segmento de código SET unit+1,1 SET Common+0,1 SET unit+2, D[unit+1]+D[Common+0] 34 Prof. Ma. Laura Cobo Página 34

LP con Alcance Estático Alocación Estática Acceso al entrono global: Programa subroutine unit integer i,j common k i:=1 k:=1 j:=i+k Segmento de código SET unit+1,1 SET Common+0,1 SET unit+2, D[unit+1]+D[Common+0] Registro de activación 0 k 1 puntero de retorno 2 i 3 j 35 Prof. Ma. Laura Cobo Página 35

LP con Alcance Estático Alocación Estática Programa program main dc Segmento de código dd Registro de activación main main subroutine P cp subroutine P dp subroutine P subroutine Q cq subroutine Q dq subroutine Q dco Common 36 Prof. Ma. Laura Cobo Página 36

LP con Alcance Estático Alocación Estática Programa dc Segmento de código dd Registro de activación program main main main subroutine P ifx>0goto10. 110 SETR R1, D[dP+despx]<=0 111 JUMP R1, 113 112 JUMP 125 dp x subroutine P 10: x=0 subroutine Q.. 125 SET dp+despx,0 cq subroutine Q dq dco subroutine Q Common 37 Prof. Ma. Laura Cobo Página 37

LP con Alcance Estático Alocación Estática Programa program main dc Segmento de código main dd Registro de activación main subroutine P ifx>0goto10. 10: x=0 subroutine Q 110 SETR R1, D[dCo+despx]<=0 111 JUMP R1, 113 112 JUMP 125.. 125 SET dco+despx,0 cq subroutine Q dp dq dco subroutine P subroutine Q Common x 38 Prof. Ma. Laura Cobo Página 38

LP con Alcance Estático Alocación Estática Activación de una unidad, pasos a realizar: Guardar el puntero de retorno en el primer objeto de dato del registro de activación de la unidad llamada. Actualizar el IP con la dirección de la primera instrucción de la unidad llamada. La traducción involucra estas dos instrucciones del procesador abstracto: SET du,ip+2 (se guarda en área de datos una dirección del área de código) JUMP cu. 39 Prof. Ma. Laura Cobo Página 39

LP con Alcance Estático Alocación Estática Retorno de una unidad, paso a realizar: Transferir el control recuperando el puntero de retorno almacenado en el primer objeto de dato del registro de activación de la unidad llamada. La traducción involucra esta instrucción del procesador abstracto: JUMP D[dU]. 40 Prof. Ma. Laura Cobo Página 40

LP con Alcance Estático Alocación Estática Ejemplo, sea el siguiente programa: Programa Unidad P Unidad Q Program main Subprogram P Subprogram Q integer i,j integer i,k integer i,m,n common x,y common x,y common x,y call P callq x = m*n j = i*x..... End End End 41 Prof. Ma. Laura Cobo Página 41

LP con Alcance Estático Alocación Estática Programa program main dc Segmento de código dd Registro de activación common subroutine P subroutine Q L1 L2 main subroutine P subroutine Q dmain dp dq main subroutine P subroutine Q D[unidad+desplazamiento] 42 Prof. Ma. Laura Cobo Página 42

LP con Alcance Estático Alocación Estática Ejemplo Programa Program main integer i,j common x,y Identificador Desplaz. Unidad i 0 main j 1 main x 0 common y 1 common call P j = i*x.. End 43 Prof. Ma. Laura Cobo Página 43

LP con Alcance Estático Alocación Estática Ejemplo Programa Segmento de código Program main SETdP, ip+2 integer i,j JUMP L1 common x,y SET Main+2, D[Main+1]+D[Common+0] call P j = i*x.. End Registros de activación 0 x 1 y 0 Ptr. Ret 1 i 2 j 44 Prof. Ma. Laura Cobo Página 44

LP con Alcance Estático Alocación Estática Ejemplo Unidad P Subprogram P integer i,k common x,y callq Identificador Desplaz. Unidad x 0 common y 1 common i 1 P k 2 P.. End 45 Prof. Ma. Laura Cobo Página 45

LP con Alcance Estático Alocación Estática Ejemplo Unidad P Subprogram P integer i,k common x,y Segmento de código SETdQ, ip+2 JUMP L2 JUMP D[dP+0] callq.. End Registro de activación de P 0 Ptr. Ret 1 i 2 k 46 Prof. Ma. Laura Cobo Página 46

LP con Alcance Estático Alocación Estática Ejemplo Unidad Q Subprogram Q integer i,m,n common x,y x = m*n. End Identificador Desplaz. Unidad x 0 common y 1 common i 1 Q m 2 Q N 3 Q 47 Prof. Ma. Laura Cobo Página 47

LP con Alcance Estático Alocación Estática Ejemplo Unidad Q Subprogram Q integer i,m,n common x,y x = m*n. End Segmento de código SET common+0, D[dQ+2]*d[dQ+3]. JUMP D[dQ+0] Registro de activación de Q 0 Ptr. Ret 1 i 2 m 3 n 48 Prof. Ma. Laura Cobo Página 48

Alcance Estático Alocación basada en pila En compilación: Se determina la distancia entre la unidad que rereferencia una variable y la unidad que contiene la declaración. No es posible anticipar el espacio de memoria requerido para ejecutar el programa. 49 Prof. Ma. Laura Cobo Página 49

Alcance Estático Alocación basada en pila En ejecución: Se reserva espacio de almacenamiento para el registro de activaciónenelmomentoenquelaunidadseactiva. Se conoce la dirección base de cada registro de activación. Los registros de activación ocupan y liberan memoria siguiendo un comportamiento de pila. Cada segmento de código puede quedar asociado a varios registros de activación 50 Prof. Ma. Laura Cobo Página 50

Alcance Estático Alocación basada en pila Programa program main Programa program main subroutine P EndP subroutine Q EndQ subroutine P subroutine Q EndQ EndP End main End main 51 Prof. Ma. Laura Cobo Página 51

Alcance Estático Alocación basada en pila program main call P End main Programa subroutine Q. EndQ subroutine P call Q EndP main P Q Registro Activación Main actual Registro Activación P actual Registro Activación Q actual 52 Prof. Ma. Laura Cobo Página 52

Alcance Estático Alocación basada en pila Resulta necesario mantener la cadena dinámica de llamadas, en orden de poder resolver las referencias no locales. Es por ello que el registro de activación necesita mantener más información que en el modelo anterior. Registro de activación de la unidad puntero de retorno enlace dinámico 53 Prof. Ma. Laura Cobo Página 53

Alcance Estático Alocación basada en pila program main call P End main Programa subroutine Q. EndQ subroutine P call Q EndP main P Q actual Puntero retorno Puntero retorno actual actual 54 Prof. Ma. Laura Cobo Página 54

Alcance Estático Alocación basada en pila Activación de una unidad, pasos a realizar: Crear el registro de activación Guardar puntero de retorno Guardar enlace dinámico Actualizar actual Actualizar IP 55 Prof. Ma. Laura Cobo Página 55

Alcance Estático Alocación basada en pila Retorno de una unidad, paso a realizar: Actualizar actual utilizando el enlace dinámico. Actualizar IP utilizando el puntero de retorno. Destruir el registro de activación Este modelo admite Recursividad. En caso de utilizarlo, en la cadena dinámica aparecen más de un registro de activación asociados a la misma unidad. 56 Prof. Ma. Laura Cobo Página 56

Alcance Estático Alocación basada en pila unidad declaraciones Tabla de símbolos registro de activación de la unidad Objetos de datos del Sistema Bloque ejecutable Objetos de datos asociados a las declaraciones en P 57 Prof. Ma. Laura Cobo Página 57

Alcance Estático Alocación basada en pila Acceso al entorno local estructura de bloques anidados Program main Var i,j: real; Procedure q var j,k,l: real;. endq. End main Identificador Tipo Anid. Desplaz. i real 0 0 j real 0 1 j real 1 2 k real 1 3 l real 1 4 58 Prof. Ma. Laura Cobo Página 58

Alcance Estático Alocación basada en pila Acceso al entorno local estructura de bloques anidados Program main Var i,j: real; Procedure q var j,k,l: real;., k:=j; endq. End main Segmento de código Actual a Registro de activación de Q Ptr. Ret Enlace dinámico j k l Actual+3 SET Actual+3,D[Actual+2] 59 Prof. Ma. Laura Cobo Página 59

Alcance Estático Alocación basada en pila Acceso al entorno global estructura de bloques anidados Program main.. Procedure q var j,k,l: real;. i endq Procedure p Var i: real;. i End P End main RA main main P Q RA de P Ptr. Ret Enlace dinámico I Actual RA de Q Ptr. Ret Enlace dinámico j k l 60 Prof. Ma. Laura Cobo Página 60

Alcance Estático Alocación basada en pila Acceso al entorno global estructura de bloques anidados - recursividad Program main Procedure p vari: real; main P P Q Procedure q i End q Endp End main RA main RA de P Ptr. Ret Enlace dinámico RA de P Ptr. Ret Enlace dinámico RA de Q Ptr. Ret Enlace dinámico RA de actual i i 61 Prof. Ma. Laura Cobo Página 61

Alcance Estático Alocación basada en pila Si se resuelven los accesos no locales, en lenguajes con estructuras de bloques anidados, se debe mantener información sobre el enlace estático de la unidad. Una forma de hacerlo, es manteniéndolo en el registro de activación de la unidad Registro de activación de la unidad puntero de retorno enlace dinámico enlace estático 62 Prof. Ma. Laura Cobo Página 62

Alcance Estático Alocación basada en pila Acceso al entorno global estructura de bloques anidados Program main Var i,j: real; Procedure q var j,k,l: real; i endq. End main Identificador Tipo Anid. Desplaz. i real 0 0 j real 0 1 j real 1 3 k real 1 4 l real 1 5 La distancia entre el uso y el nivel de anidamiento de la declaración es 1 63 Prof. Ma. Laura Cobo Página 63

Alcance Estático Alocación basada en pila Acceso al entorno global estructura de bloques anidados Program main Var i,j: real; Procedure q var j,k,l: real; i endq. End main main P Q RA main El acceso al entorno global se logra con D[Actual+2] i j.. El acceso a la variable i con D[D[Actual+2]+0] RA de Q Ptr. Ret Enlace dinámico j k l RA de actual 64 Prof. Ma. Laura Cobo Página 64

Alcance Estático Alocación basada en pila Acceso al entorno global estructura de bloques anidados Program main Var i,j: real; Procedure q var j,k,l: real;., k:=i+j; endq. End main Actual Registro de activación de Q Ptr. Ret Enlace dinámico Enlace estático Segmento de código j k l Actual+3 SET Actual+4,D[D[Actual+2]+3]+D[actual+3] 65 Prof. Ma. Laura Cobo Página 65

Alcance Estático Alocación basada en pila Acceso al entorno global estructura de bloques anidados Si la distancia es uno, como en el ejemplo, la situación se resuelve con una indirección; sin embargo claramente la distancia puede ser mayor. La cantidad de indirecciones involucradas es igual a la distancia entre el uso y la declaración. A mayor cantidad de indirecciones, mayoreselcosto 66 Prof. Ma. Laura Cobo Página 66

Alcance Estático Alocación basada en pila Alocación de memoria Para trabajar con la pila de datos y tener el control de los registros de activación vamos a contar con dos registros rápidos: - actual: mantiene una referencia al comienzo del registro de activación correspondiente a la unidad que se encuentra en ejecución. - libre: mantiene una referencia al área de datos a partir de donde la misma está disponible para su uso. La alocación de memoria sigue un comportamiento de pila 67 Prof. Ma. Laura Cobo Página 67

Alcance Estático Alocación basada en pila Alocación semi-estática de memoria En compilación se determina: - El espacio requerido para mantener cada variable local a una unidad. - El tamaño del registro de activación - El desplazamiento de cada variable local dentro del registro de activación. - La distancia entre la unidad que referencia a una variable y la unidad que contiene la declaración. 68 Prof. Ma. Laura Cobo Página 68

Alcance Estático Alocación basada en pila Alocación semi-estática de memoria En compilación se determina: - La asociación entre cada variable local del código y cada objeto de dato del registro de activación a través del par: [dirección base RA + desplazamiento]. - La asociación entre cada variable global del código y cada objeto de dato en la Pila. La dirección base considera la distancia entre la declaración y la referencia, utilizando la cadena estática. 69 Prof. Ma. Laura Cobo Página 69

Alcance Estático Alocación basada en pila Activación de una unidad a. Guardar el puntero de retorno: se realiza a través de la siguiente instrucción Pila[libre,0] IP + T Siendo T la cantidad de instrucciones que se van a saltear dentro de la unidad llamadora (como mínimo hay que saltear la instrucción JUMP que realiza la transferencia de control, si hay pasaje de parámetros hay que saltear las instrucciones vinculadas y otras) b. Guardar enlace dinámico: Pila[libre,1] actual 70 Prof. Ma. Laura Cobo Página 70

Alcance Estático Alocación basada en pila Activación de una unidad c. Guardar el enlace estático: se realiza a través de la siguiente instrucción Pila[libre,2] expresión de cálculo de EE Analizaremos la expresión de cálculo de EE a contiuación. d. Actualizar actual: e. Actualizar libre: actual libre libre libre + S Siendo S el tamaño del registro de activación (objetos de datos del sistema, parámetros y variables locales). Este tamaño es calculado por el compilador 71 Prof. Ma. Laura Cobo Página 71

Alcance Estático Alocación basada en pila f. Actualizar IP: se realiza a través de la siguiente instrucción IP direccióndelsegmentodecódigodelaunidadinvocada(cc) La traducción requiere: a. Guardar el puntero de retorno b. Guardar enlace dinámico c. Guardar enlace estático d. Actualizar actual e. Actualizar libre f. Actualizar IP 72 Prof. Ma. Laura Cobo Página 72

Cálculo del enlace estático Program Principal Procedure Q Procedure R endr endq Procedure P End P End Principal Hay tres situaciones posibles: 1. Dos unidades (diferentes entre si) P y Q, ambas del mismo nivel léxico donde PQ. 2. Una unidad, Q, invoca a otra que está declarada dentro de ella, R. QR 3. Una unidad, R, invoca a una unidad que la contiene. RQ Prof. Ma. Laura Cobo Página 73

Cálculo del enlace estático Program Principal Procedure Q Procedure R endr endq Procedure P End P End Principal Situación 1:PQ. En este caso, la distancia entre la unidad llamadora y la llamada es igual a cero(ambas tienen el mismo nivel léxico) por lo tanto en enlace estático de P es el enlace estático de Q también. Enlace estático de Q PILA[ACTUAL,2] Prof. Ma. Laura Cobo Página 74

Cálculo del enlace estático Program Principal Procedure Q Procedure R endr endq Procedure P End P End Principal Situación 2:QR. En este caso, la distancia entre la unidad llamadora y la llamada es igual a uno por lo tanto en enlace estático de R es la dirección del registro de activación delaunidadllamadora,esdecirq. Enlace estático de R ACTUAL Prof. Ma. Laura Cobo Página 75

Cálculo del enlace estático Program Principal Procedure Q Procedure R endr endq Procedure P End P End Principal Situación 3:RQ. En este caso, la distancia entre la unidad llamadora y la llamada es igual a negativa, -1. en este caso debe existir una instancia de Q suspendida anteriormente, ya que no habría instancia de Rsin alguna instancia de Q. existe por lo tanto una forma de recursión cruzada involucrada. Se debe recorrer la cadena estática tantos niveles como intervienen en la distancia Enlace estático de Q PILA[PILA[ACTUAL,2],2] Prof. Ma. Laura Cobo Página 76