La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Compiladores II (96-97 06/04/2015 16:03)- 2.1 - Tema 2. Generación de Código para Estructuras Complejas Lecciones 3 y 4.

Presentaciones similares


Presentación del tema: "Compiladores II (96-97 06/04/2015 16:03)- 2.1 - Tema 2. Generación de Código para Estructuras Complejas Lecciones 3 y 4."— Transcripción de la presentación:

1 Compiladores II (96-97 06/04/2015 16:03)- 2.1 - Tema 2. Generación de Código para Estructuras Complejas Lecciones 3 y 4

2 Compiladores II (96-97 06/04/2015 16:03)- 2.2 - Arrays de tamaño variable Un array se considera de tamaño variable cuando en tiempo de ejecución se establecen sus dimensiones. Cuestiones –Donde guardarlo –Cálculo de la posición de los elementos del array Arrays locales de Tamaño variable int f(int n) { int a[n]; float b[2*n];... } –Como guardar el array de tamaño variable Un array de tamaño variable se guarda con una cabecera que contiene sus dimensiones y un apuntador al espacio de la pila que contiene sus elementos.

3 Compiladores II (96-97 06/04/2015 16:03)- 2.3 - Arrays de Tamaño Variable en la Pila Los elementos del array se guardan al final del bloque de activación de la función n n*2 Otras variables Elementos del array a Elementos del array b ED PC Argumentos B SP No varía el código de salida de la función SP=B B=*SP++ Ret

4 Compiladores II (96-97 06/04/2015 16:03)- 2.4 - Case. Selección por: –Seleccionar una rama de ejecución a partir de ver si un valor de una expresión es igual a una constante. Formas de implementación: –Comparaciones secuenciales –Tabla de saltos Indice como selector Pares valor-dirección –Arbol de selección –Otras: tabla hash, etc.

5 Compiladores II (96-97 06/04/2015 16:03)- 2.5 - Goto y Otros Saltos Salto local sin modificar la pila –Salto a etiqueta –Salida de estructuras de control Salto no local –Salto a etiqueta predeclarada –Salto sin declaración de etiqueta Excepciones –Bloques de excepción –Tabla de intervalos de código Salto local sin modificar la pila –El tamaño de la pila es el mismo para el código fuente como el código destino –Código generado: Instrucción de salto incondicional del procesador El destino del salto es una etiqueta –Hay que verificar que la etiqueta exista –Y que el tamaño de la pila no varie para el código fuente y destino Modificación del tamaño de la pila –Declaración de variables locales void f() { goto mal; if (…) { int j=10; mal:... – Poner un argumento en la pila –Instrucciones Try Catch –Etc.

6 Compiladores II (96-97 06/04/2015 16:03)- 2.6 - Salto Local sin Modificar la Pila Condición a verificar –El tamaño de la pila es el mismo para el código fuente como el código destino Código generado –Instrucción de salto incondicional del procesador Salto a etiqueta –Considerar que el ámbito donde es válida una etiqueta no puede haber variaciones del tamaño de la pila. Ámbitos válidos en C: –función –instrucción Ámbitos válidos en LISP: –Ninguno. Razón: en medio del cálculo de los argumentos de una función se puede producir un salto.

7 Compiladores II (96-97 06/04/2015 16:03)- 2.7 - Salida de estructuras de control Instrucciones –break –continue Normalmente el tamaño de la pila es el mismo para el código fuente como el código destino Problema: –Ha donde hay que saltar –Uso de la tabla de símbolo u otra pila para guardar las etiquetas de salto.

8 Compiladores II (96-97 06/04/2015 16:03)- 2.8 - Detección de la Modificación del Tamaño de la Pila Etiquetas predeclaradas –Cada instrucción que modifica el tamaño de la pila pone en la tabla de símbolos una marca.

9 Compiladores II (96-97 06/04/2015 16:03)- 2.9 - Salto local con modificación de la pila –La pila se menor para el código destino que para el código fuente, pero se mantiene la misma base del bloque de activación

10 Compiladores II (96-97 06/04/2015 16:03)- 2.10 - Salto entre funciones –La pila se menor para el código destino que para el código fuente y puede variar la base del bloque de activación

11 Compiladores II (96-97 06/04/2015 16:03)- 2.11 - Goto asignado, calculado

12 Compiladores II (96-97 06/04/2015 16:03)- 2.12 - Excepciones


Descargar ppt "Compiladores II (96-97 06/04/2015 16:03)- 2.1 - Tema 2. Generación de Código para Estructuras Complejas Lecciones 3 y 4."

Presentaciones similares


Anuncios Google