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.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

Unidad 15 Características de C++ no relacionadas con el DOO.
DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
Complejidad Computacional
Abstracción de Datos Arrays.
Tablas. Descripción general Introducción a las tablas Creación de tablas Uso de tablas.
CLASE 3 SOFTWARE DEL MICROPROCESADOR
Arquitectura de Computadores I
Prototipo de compilador didáctico del lenguaje LC99
Direcciones, Arreglos y Argumentos de Funciones
Funciones. Programación, Algoritmos y Estructuras de Datos.
Tipos de Datos Básicos y Estructurados
Excepciones Las excepciones son señales (en forma de objeto) que se generan en ejecución en casos de errores, para que puedan ser gestionadas en el programa.
Procesadores de Lenguajes I
FUNCIONES EN C.
INFORMATICA I Arreglos 1 CLASE 17.
Informática II Prof. Dr. Gustavo Patiño MJ
Programación en C (Segunda Parte) DATSI, FI, UPM José M. Peña
Tema 1. Introducción a la programación (Lenguaje java).
Funcionamiento, programación
Introducción al Lenguaje C (ANSI)
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Teoría de lenguajes y compiladores
Ismael Camarero1. 2 ¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria.
Controla tu entorno con un microcontrolador PIIISA /2/2014
Curso Práctica 3 1 Funciones CONTENIDO Consideraciones sobre funciones Estructura de un programa en C Uso de funciones Paso de parámetros Punteros.
Tema 3. Optimización de Código
¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No.
Vectores en java.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Funciones en lenguaje C
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.

Modificadores.
Clases y objetos La unidad fundamental de programación OO son las clases. Conjunto de métodos y semántica Qué se va a hacer POO Clase: que define la implementación.
Tema 3 Entrada y Salida.
TIPOS DE INSTRUCCIONES Y ESTRUCTURAS DE CONTROL
Nombre, Alcance y Asociaciones (Bindings). Agenda Definición Nombre y Bindings Binding Time Importancia del Binding Time Eventos relacionados a la Asociación.
Semana 5 Subprogramas..
1 LENGUAJES LOGICOS IMPLEMENTACION CALCULO DE PREDICADOS PROLOG.
3.1 Declaración de tablas en C
M.C. Juan Carlos Olivares Rojas
INGENIERIA EN SISTEMAS COMPUTACIONALES
TABLAS Definición. El tipo tabla permite definir objetos formados por un conjunto de elementos del mismo tipo. Ejemplos. El tipo tabla se utiliza para.
Capítulo 1 “Elementos de Programación”
Clase 10: Estructuras de datos y arreglos.
Descomposición Modular. Funciones
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
Asignación de Espacio No Contiguo
El lenguaje de programación C - Vectores y matrices -
Computación II Unidad X Manejo de Excepciones. Presentación de la Unidad Objetivos: –Saber manejar situaciones inesperadas dentro de un programa –Comprender.
Informática Ingeniería en Electrónica y Automática Industrial
NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En.
EXPRESIONES Y SENTENCIAS
FUNCIONES Conceptos básicos. Retorno de una función Clases de funciones. Paso de parámetros. Funciones y arrays.
TEORIA DE LA INFORMACION INGENIERO ANYELO QUINTERO.
Control de Flujo.
Programación en C para electrónicos
EI, Profesor Ramón Castro Liceaga Agosto de 2005 UNIVERSIDAD LATINA (UNILA) PROGRAMACION ORIENTADA A OBJETOS EN JAVA (Optativa) ESTRUCTURA DEL LENGUAJE.
Los punteros Programación modular.
Términos algoritmo diseñar algoritmo implementar algoritmo
Teoría de lenguajes y compiladores
Manejo Excepciones Profesor Elian Rojas Berroca 11/02/2015.
Conceptos y Lenguaje Imperativo
MEMORIA DINÁMICA.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
PROGRAMACION DE APLICACIONES EN MEMORIA DEL COMPUTADOR = ALGORITMOS Y ESTRUCTURAS DE DATOS.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Katty Evangelina Hipólito Chi.   Aunque cada maquina tiene un lenguaje ensamblador distinto, el proceso de ensamblador tiene suficiente similitudes.
SISTEMAS ELECTRÓNICOS 3ºGIERM1 1. Introducción 2. Tipos de datos 3. Estructuras típicas de programación 4. Manejo de bits Tema 7. Programación de microcontroladores.
Transcripción de la presentación:

Compiladores II ( /04/ :03) Tema 2. Generación de Código para Estructuras Complejas Lecciones 3 y 4

Compiladores II ( /04/ :03) 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.

Compiladores II ( /04/ :03) 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

Compiladores II ( /04/ :03) 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.

Compiladores II ( /04/ :03) 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.

Compiladores II ( /04/ :03) 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.

Compiladores II ( /04/ :03) 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.

Compiladores II ( /04/ :03) 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.

Compiladores II ( /04/ :03) 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

Compiladores II ( /04/ :03) 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

Compiladores II ( /04/ :03) Goto asignado, calculado

Compiladores II ( /04/ :03) Excepciones