1 / 148

Traducción a Formatos Intermedios

Traducción a Formatos Intermedios. Resumen. Metas de Representación de Programas Formato de datos en código en ejecución Tareas de Compilación Tablas de Símbolos Representación de Código de Alto Nivel Eliminando el Control de Flujo Estructurado

flint
Download Presentation

Traducción a Formatos Intermedios

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Traducción a Formatos Intermedios

  2. Resumen • Metas de Representación de Programas • Formato de datos en código en ejecución • Tareas de Compilación • Tablas de Símbolos • Representación de Código de Alto Nivel • Eliminando el Control de Flujo Estructurado • Convirtiendo a un Espacio de Direcciones Plano Oscar Bonilla2Universidad Galileo

  3. Metas de Representación de Programas • Permitir el análisis y transformación del programa • Optimizaciones • Estructurar la traducción a código de máquina • Secuencia de Pasos Representaciónintermedia de alto nivel Representaciónintermedia debajo nivel Arbol de Parseo Código deMáquina Oscar Bonilla3Universidad Galileo

  4. High Level IR • Preserva la estructura de los Objetos • Adecuada para Optimizaciones Orientadas a Objetos • Asignación Inline de Objetos • Optimizaciones de Dynamic Dispatch • Preserva el Control de Flujo Estructurado • Adecuada para Optimizaciones a nivel de Loops • Bloquearse por Cache • Loop Interchange, Fusion, Unrolling, etc. Oscar Bonilla4Universidad Galileo

  5. Low Level IR • Mueve el modelo de datos a un Espacio de Direcciones Plano • Elimina el Control de Flujo Estructurado • Adecuada para tareas de compilación de bajo nivel • Register Allocation • Instruction Selection Oscar Bonilla5Universidad Galileo

  6. Ejemplos de Representación de Objetos y Ejecución de Programas Oscar Bonilla6Universidad Galileo

  7. Ejemplo: Vector Class class vector { int v[]; void add(int x) { int i; i = 0; while (i < v.length) { v[i] = v[i]+x; i = i+1; } } } Oscar Bonilla7Universidad Galileo

  8. Representando Arreglos • Items almacenados contiguamente en memoria • Largo almacenado en la primera Word • Código de Colores • Rojo – generado por el compilador automáticamente • Azul,Amarillo,Rosado– datos o código de programa • Magenta – datos o código de ejecución 3 7 4 8 Oscar Bonilla8Universidad Galileo

  9. Representando Objetos Vector • Primer Word apunta a información de la clase • Tabla de métodos • Siguiente Word tiene campos (fields) • Para vectors, Primer Word es una referencia al array Método add para vector 3 7 4 8 Oscar Bonilla9Universidad Galileo

  10. Invocando el Método Add vect.add(1); • Crear Activation Record Método Add para Vector 3 7 4 8 Oscar Bonilla10Universidad Galileo

  11. Invocando el Método Add vect.add(1); • Crear Activation Record • this va al stack this Método Add para Vector 3 7 4 8 Oscar Bonilla11Universidad Galileo

  12. Invocando el Método Add vect.add(1); • Crear Activation Record • this va al stack • Parámetros al stack this 1 x Método Add para Vector 3 7 4 8 Oscar Bonilla12Universidad Galileo

  13. Invocando el Método Add vect.add(1); • Crear Activation Record • this va al stack • Parámetros al stack • Espacio para locales al stack this 1 x i Método Add para Vector 3 7 4 8 Oscar Bonilla13Universidad Galileo

  14. Ejecutando el Método Add void add(int x) { int i; i = 0; while (i < v.length) v[i] = v[i]+x; i = i+1; } this 1 x i Método Add para Vector 3 7 4 8 Oscar Bonilla14Universidad Galileo

  15. Ejecutando el Método Add void add(int x) { int i; i = 0; while (i < v.length) v[i] = v[i]+x; i = i+1; } this 1 x 0 i Método Add para Vector 3 7 4 8 Oscar Bonilla15Universidad Galileo

  16. Ejecutando el Método Add void add(int x) { int i; i = 0; while (i < v.length) v[i] = v[i]+x; i = i+1; } this 1 x 0 i Método Add para Vector 3 7 4 8 Oscar Bonilla16Universidad Galileo

  17. Ejecutando el Método Add void add(int x) { int i; i = 0; while (i < v.length) v[i] = v[i]+x; i = i+1; } this 1 x 0 i Método Add para Vector 3 7 4 8 Oscar Bonilla17Universidad Galileo

  18. Ejecutando el Método Add void add(int x) { int i; i = 0; while (i < v.length) v[i] = v[i]+x; i = i+1; } this 1 x 0 i Método Add para Vector 3 7 4 8 Oscar Bonilla18Universidad Galileo

  19. Ejecutando el Método Add void add(int x) { int i; i = 0; while (i < v.length) v[i] = v[i]+x; i = i+1; } this 1 x 0 i Método Add para Vector 3 7 4 8 Oscar Bonilla19Universidad Galileo

  20. Ejecutando el Método Add void add(int x) { int i; i = 0; while (i < v.length) v[i] = v[i]+x; i = i+1; } this 1 x 0 i Método Add para Vector 3 7 4 8 Oscar Bonilla20Universidad Galileo

  21. Ejecutando el Método Add void add(int x) { int i; i = 0; while (i < v.length) v[i] = v[i]+x; i = i+1; } this 1 x 0 i Método Add para Vector 3 7 4 8 Oscar Bonilla21Universidad Galileo

  22. Ejecutando el Método Add void add(int x) { int i; i = 0; while (i < v.length) v[i] = v[i]+x; i = i+1; } this 1 x 0 i Método Add para Vector 3 7 4 8 Oscar Bonilla22Universidad Galileo

  23. Ejecutando el Método Add void add(int x) { int i; i = 0; while (i < v.length) v[i] = v[i]+x; i = i+1; } this 1 x 0 i Método Add para Vector 3 7 4 8 Oscar Bonilla23Universidad Galileo

  24. Ejecutando el Método Add void add(int x) { int i; i = 0; while (i < v.length) v[i] = v[i]+x; i = i+1; } this 1 x 0 i Método Add para Vector 3 8 4 8 Oscar Bonilla24Universidad Galileo

  25. Ejecutando el Método Add void add(int x) { int i; i = 0; while (i < v.length) v[i] = v[i]+x; i = i+1; } this 1 x 0 i Método Add para Vector 3 8 4 8 Oscar Bonilla25Universidad Galileo

  26. Ejecutando el Método Add void add(int x) { int i; i = 0; while (i < v.length) v[i] = v[i]+x; i = i+1; } this 1 x 1 i Método Add para Vector 3 8 4 8 Oscar Bonilla26Universidad Galileo

  27. Ejecutando el Método Add void add(int x) { int i; i = 0; while (i < v.length) v[i] = v[i]+x; i = i+1; } this 1 x 3 i Método Add para Vector 3 8 5 9 Oscar Bonilla27Universidad Galileo

  28. Tareas de Compilación • Determinar el Formato de los Objetos y Arrays en Memoria • Determinar el Formato del Stack de Llamada en Memoria • Generar Código para Leer Valores • this, párametros, elementos de arreglo, campos de objetos • Generar Código para Computar Nuevos Valores • Generar Código para Escribir Valores • Generar Código para Construcciones de Control Oscar Bonilla28Universidad Galileo

  29. Ejemplo: Clase Point class point { int c; int getColor() { return(c); } int distance() { return(0); } } Oscar Bonilla29Universidad Galileo

  30. Subclases de Point class cartesianPoint extends point{ int x, y; int distance() { return(x*x + y*y); } } class polarPoint extends point { int r, t; int distance() { return(r*r); } int angle() { return(t); } } Oscar Bonilla30Universidad Galileo

  31. Dynamic Dispatch ¿Qué método distance es ejecutado? • Si p es point return(0) • Si p es cartesianPoint return(x*x + y*y) • Si p es polarPoint return(r*r) • ¡Método Invocado depende del Tipo del Receptor! if (x == 0) { p = new point(); } else if (x < 0) { p = new cartesianPoint(); } else if (x > 0) { p = new polarPoint(); } y = p.distance(); Oscar Bonilla31Universidad Galileo

  32. Implementando Dynamic Dispatch • Mecanismo Básico: Tabla de Métodos Tabla de métodos para objetos point Método getColor para point Método distance para point Tabla de métodospara objetoscartessianPoint Método getColor para point Método distance para cartesianPoint Tabla de métodospara objetospolarPoint Método getColor para point Método distance para polarPoint Método angle para polarPoint Oscar Bonilla32Universidad Galileo

  33. Implementando Object Fields • Cada objeto es un pedazo contiguo de memoria • Campos de la jerarquía de herencia asignados secuencialmente en un pedazo de memoria • Primer word es un pointer a tabla de métodos • Ejemplo: objeto polarPoint Método getColor para point c 2 Método distance para polarPoint r 1 Método angle para polarPoint t 2 Oscar Bonilla33Universidad Galileo

  34. Objetos Point Método getColor para point c 2 Método distance para point Método getColor para point c 1 Método distance para cartesianPoint x 4 y 6 Método getColor para point c 4 Método distance para polarPoint r 1 Método angle para polarPoint t 3 Oscar Bonilla34Universidad Galileo

  35. Invocando Métodos • Compilador numera los métodos en cada jerarquía de herencia • getColor es Método 0 • distance es Método 1 • angle es Método 2 • Los puntos de invocación de Métodos accesan la entrada correspondiente en la tabla de métodos Oscar Bonilla35Universidad Galileo

  36. Tareas de Compilación • Determinar el Formato de Objetos en Memoria • Campos de las clases padres • Campos de la clase actual • Numerar los Métodos y crear la Tabla de Métodos • Métodos de las clases padres • Métodos de la clase actual • Generar Código para los Métodos • Accesos a Campos, Variables Locales y Parámetros • Invocaciones a Métodos Oscar Bonilla36Universidad Galileo

  37. Tablas de Símbolos • Compilador usa información de la Tabla de Símbolos para Producir • Layout de Objetos en Memoria • Tablas de Métodos • Código para accesar los Campos de Objetos, Variables Locales y Parámetros Oscar Bonilla37Universidad Galileo

  38. Tablas de Símbolos durante la traducción del Parse Tree al IR • Tablas de Símbolos mapean identificadores (strings) a Descriptores (información acerca de los identificadores) • Operación Básica: Lookup • Dado un string, encontrar el Descriptor • Implementación Típica: Tabla Hash • Ejemplos • Dado un nombre de clase, encontrar el descriptor de la clase • Dado un nombre de variable, encontrar el descriptor • Descriptor local, descriptor de parámetro, descriptor de campo Oscar Bonilla38Universidad Galileo

  39. Jerarquía de Tablas de Símbolos • Jerarquía viene de • Scopes Anidados • Scope Local dentro del Scope de Campos • Herencia • Clases hijas dentro de una clase padre • Tabla de Símbolos Jerárquica refleja estas jerarquías • Lookup procede hacia arriba en la jerarquía hasta que se encuentre un descriptor Oscar Bonilla39Universidad Galileo

  40. Jerarquía en método add de vector Tabla de Símbolos paraCampos de clase vector v descriptor para campo v Tabla de Símbolospara Parámetros de add x descriptor para parámetro x this descriptor para this Tabla de Símbolospara Locales de add i descriptor para local i Oscar Bonilla40Universidad Galileo

  41. Tabla de Símbolos del Programa • Mapea los nombres de clases a descriptores de clases • Implementación Típica: Tabla Hash vector class descriptor para vector point class descriptor para point cartesianPoint class descriptor para cartesianPoint polarPoint class descriptor para polarPoint Oscar Bonilla41Universidad Galileo

  42. Class Descriptor • Tabla de Símbolos para Métodos • Tabla de Símbolos Padre es la Tabla de Símbolos de la Clase Padre • Tabla de Símbolos para Campos • Tabla de Símbolos Padre es la Tabla de Símbolos de la Clase Padre • Referencia al Descriptor de la Clase Padre Oscar Bonilla42Universidad Galileo

  43. Class Descriptors para point y cartesianPoint class descriptor para point c field descriptor para c getColor method descriptor para getColor x field descriptor para x y field descriptor para y distance method descriptor para distance class descriptor para cartesianPoint Oscar Bonilla43Universidad Galileo

  44. Descriptores de Campo, Parámetro, Local y Tipo • Descriptores de Campo, Parámetro y Local se refieren a Descriptores de Tipo • Descriptores de Tipo Base: int, boolean • Descriptor de Tipo Array, que contiene referencia a descriptor de tipo para elementos del array • Descriptor de Clase • Descriptores de Tipo relativamente simples • Descriptores de Tipo Base y Descriptores de Array guardados en Tabla de Símbolos de Tipos Oscar Bonilla44Universidad Galileo

  45. int int descriptor int [] array descriptor boolean boolean descriptor boolean [] array descriptor class descriptor para vector vector [] array descriptor Ejemplo Tabla de Símbolos de Tipos Oscar Bonilla45Universidad Galileo

  46. Descriptores de Método • Contienen Referencia al Código para el Método • Contienen Referencia a Tabla de Símbolos Local para Variables Locales al Método • Tabla de Símbolos Padre de Tabla de Símbolos Local es la Tabla de Símbolos de Parámetros de los Parámetros del Método Oscar Bonilla46Universidad Galileo

  47. Method Descriptor para Método add field symbol table para vector class Tabla de símbolosde parámetros x parameter descriptor this this descriptor Method descriptor para add Tabla de símbolosde variables locales i local descriptor Código para método add Oscar Bonilla47Universidad Galileo

  48. Resumen de Tablas de Símbolos • Tabla de Símbolos del Programa (Descriptores de Clases) • Descriptores de Clases  Tabla de Símbolos de Campos (Descriptores de Campos)  Tabla de Símbolos para SuperClass  Tabla de Símbolos de Métodos (Descriptores de Métodos)  Tabla de Símbolos de Métodos para Superclass • Descriptores de Métodos  Tabla de Símbolos para Variables Locales (Descriptores de Variable Local)  Tabla de Símbolos de Parámetros (Descriptores de Parámetros)  Tabla de Símbolos de Campos de la Clase Receptora • Descriptores Locales, de Parámetros y de Campos  Descriptores de Tipo en Tabla de Símbolos de Tipo o Descriptores de Clase Oscar Bonilla48Universidad Galileo

  49. class_decl vector field_decl int v [] v field descriptor x parameter descriptor add this this descriptor class descriptor para vector Method descriptor para add i local descriptor Código para método add int int descriptor int [] array descriptor boolean boolean descriptor boolean [] array descriptor vector [] array descriptor Oscar Bonilla49Universidad Galileo

  50. Traduciendo de Parse Trees a Tablas de Símbolos Oscar Bonilla50Universidad Galileo

More Related