Entornos de tiempo de ejecución en el diseño del compilador

Una traducción necesita relacionar el texto fuente estático de un programa con las acciones dinámicas que deben ocurrir en tiempo de ejecución para implementar el programa. El programa consta de nombres para procedimientos, identificadores, etc., que requieren mapeo con la ubicación de memoria real en tiempo de ejecución. El entorno de tiempo de ejecución es un estado de la máquina de destino, que puede incluir bibliotecas de software, variables de entorno, etc., para proporcionar servicios a los procesos que se ejecutan en el sistema.

PROBLEMAS DEL IDIOMA DE ORIGEN:

Árbol de activación

Un programa consta de procedimientos, una definición de procedimiento es una declaración que, en su forma más simple, asocia un identificador (nombre del procedimiento) con una declaración (cuerpo del procedimiento). Cada ejecución del procedimiento se denomina activación del procedimiento. El tiempo de vida de una activación es la secuencia de pasos presentes en la ejecución del procedimiento. Si ‘a’ y ‘b’ son dos procedimientos, entonces sus activaciones no se superpondrán (cuando se llama a uno después del otro) o anidadas (procedimientos anidados). Un procedimiento es recursivo si una nueva activación comienza antes de que finalice una activación anterior del mismo procedimiento. Un árbol de activación muestra la forma en que el control entra y sale de las activaciones. Las propiedades de los árboles de activación son: –

  • Cada Node representa una activación de un procedimiento.
  • La raíz muestra la activación de la función principal.
  • El Node del procedimiento ‘x’ es el padre del Node del procedimiento ‘y’ si y solo si el control fluye del procedimiento x al procedimiento y.

Ejemplo: considere el siguiente programa de Quicksort

main() {

      Int n;
      readarray();
      quicksort(1,n);
}

quicksort(int m, int n) {

     Int i= partition(m,n);
     quicksort(m,i-1);
     quicksort(i+1,n);
}

El árbol de activación para este programa será: 1Primero la función principal como root, luego las llamadas principales readarray y quicksort. Quicksort a su vez llama a la partición y ordenación rápida de nuevo. El flujo de control en un programa corresponde a un primer recorrido en profundidad de pedido anticipado del árbol de activación que comienza en la raíz.

PILA DE CONTROL Y REGISTROS DE ACTIVACIÓN

La pila de control o pila de tiempo de ejecución se utiliza para realizar un seguimiento de las activaciones de procedimientos en vivo, es decir, los procedimientos cuya ejecución no se ha completado. Un nombre de procedimiento se inserta en la pila cuando se llama (comienza la activación) y aparece cuando regresa (finaliza la activación). La información necesaria para una única ejecución de un procedimiento se gestiona mediante un registro o trama de activación. Cuando se llama a un procedimiento, se inserta un registro de activación en la pila y, tan pronto como el control vuelve a la función de llamada, se extrae el registro de activación. 

2

 Un registro de activación general consiste en lo siguiente:

  • Variables locales: contienen los datos que son locales a la ejecución del procedimiento.
  • Valores temporales : almacena los valores que surgen en la evaluación de una expresión.
  • Estado de la máquina: contiene la información sobre el estado de la máquina justo antes de la llamada de función.
  • Enlace de acceso (opcional): se refiere a los datos no locales que se encuentran en otros registros de activación.
  • Enlace de control (opcional): apunta al registro de activación de la persona que llama.
  • Valor de retorno: utilizado por el procedimiento llamado para devolver un valor al procedimiento de llamada
  • Parámetros reales

3

Pila de control para el ejemplo de clasificación rápida anterior:

4

SUBDIVISIÓN DE LA MEMORIA DE TIEMPO DE FUNCIONAMIENTO

El almacenamiento en tiempo de ejecución se puede subdividir para contener:

  • Código de destino: el código del programa, es estático ya que su tamaño se puede determinar en tiempo de compilación
  • Objetos de datos estáticos
  • Objetos de datos dinámicos: montón
  • Objetos de datos automáticos: pila

5

TÉCNICAS DE ASIGNACIÓN DE ALMACENAMIENTO

I. Asignación de almacenamiento estático

  • Para cualquier programa, si creamos una memoria en tiempo de compilación, la memoria se creará en el área estática.
  • Para cualquier programa, si creamos una memoria solo en tiempo de compilación, la memoria se crea solo una vez.
  • No es compatible con la estructura de datos dinámica, es decir, la memoria se crea en tiempo de compilación y se desasigna después de la finalización del programa.
  • El inconveniente de la asignación de almacenamiento estático es que no se admite la recursividad.
  • Otro inconveniente es que el tamaño de los datos debe conocerse en el momento de la compilación.

Por ejemplo, FORTRAN fue diseñado para permitir la asignación de almacenamiento estático. 

II. Asignación de almacenamiento de pila

  • El almacenamiento se organiza como una pila y los registros de activación se empujan y extraen cuando la activación comienza y finaliza, respectivamente. Los locales están contenidos en los registros de activación, por lo que están vinculados al almacenamiento nuevo en cada activación.
  • La recursividad es compatible con la asignación de pilas

tercero Asignación de almacenamiento en montón

  • La asignación y desasignación de memoria se puede realizar en cualquier momento y en cualquier lugar, según los requisitos del usuario.
  • La asignación de almacenamiento dinámico se utiliza para asignar memoria dinámicamente a las variables y recuperarla cuando ya no se necesitan las variables.
  • Se admite la recursividad.

activation_5

PASO DE PARÁMETROS: El medio de comunicación entre procedimientos se conoce como paso de parámetros. Los valores de las variables de un procedimiento de llamada se transfieren al procedimiento llamado mediante algún mecanismo.

Terminología básica :

  • Valor R:  El valor de una expresión se llama su valor r. El valor contenido en una sola variable también se convierte en un valor r si aparece en el lado derecho del operador de asignación. El valor R siempre se puede asignar a alguna otra variable.
  • Valor L:  la ubicación de la memoria (dirección) donde se almacena la expresión se conoce como el valor L de esa expresión. Siempre aparece en el lado izquierdo si el operador de asignación. 

activation_6

  •  i.Parámetro formal:  las variables que toman la información pasada por el procedimiento de llamada se denominan parámetros formales. Estas variables se declaran en la definición de la función llamada. ii.Parámetro actual:  las variables cuyos valores y funciones se pasan a la función llamada se denominan parámetros actuales. Estas variables se especifican en la llamada de función como argumentos.

Diferentes formas de pasar los parámetros al procedimiento:

  • Llamada por valor: en la llamada por valor, el procedimiento de llamada pasa el valor r de los parámetros reales y el compilador lo coloca en el registro de activación del procedimiento llamado. Los parámetros formales contienen los valores pasados ​​por el procedimiento de llamada, por lo que los cambios realizados en los parámetros formales no afectan a los parámetros reales.

activation_7

  • Llamada por referencia En la llamada por referencia, los parámetros formales y reales se refieren a la misma ubicación de memoria. El valor l de los parámetros reales se copia en el registro de activación de la función llamada. Por lo tanto, la función llamada tiene la dirección de los parámetros reales. Si los parámetros reales no tienen un valor l (p. ej., i+3), se evalúan en una nueva ubicación temporal y se pasa la dirección de la ubicación. Cualquier cambio realizado en el parámetro formal se refleja en los parámetros reales (porque los cambios se realizan en la dirección). 

activation_8

  • Call by Copy Restore En call by copy restore, el compilador copia el valor en parámetros formales cuando se llama al procedimiento y los vuelve a copiar en parámetros reales cuando el control regresa a la función llamada. Los valores r se pasan y, al regresar, el valor r de los formales se copia en el valor l de los reales.

activation_9

  • Llamada por nombre En la llamada por nombre, los parámetros reales se sustituyen por formales en todos los lugares donde aparecen formales en el procedimiento. También se conoce como evaluación perezosa porque la evaluación se realiza en parámetros solo cuando es necesario.

activation_10

Este artículo es una contribución de Parul Sharma . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *