Traducción a Formatos Intermedios



Descargar 78,06 Kb.
Página1/6
Fecha de conversión20.03.2017
Tamaño78,06 Kb.
  1   2   3   4   5   6

Traducción a Formatos Intermedios

Resumen

  • Oscar Bonilla Universidad Galileo
  • 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

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
  • Arbol
  • de
  • Parseo
  • Representación intermedia de alto nivel
  • Representación intermedia de bajo nivel
  • Código de Máquina

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.

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

Ejemplos de Representación de Objetos y Ejecución de Programas

Ejemplo: Vector Class

  • Oscar Bonilla Universidad Galileo
  • class vector {
  • int v[];
  • void add(int x) {
  • int i;
  • i = 0;
  • while (i < v.length) { v[i] = v[i]+x; i = i+1; }
  • }
  • }

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

Representando Objetos Vector

  • Primer Word apunta a información de la clase
    • Tabla de métodos
  • Siguiente Word tiene campos (fields)
  • Método add para vector
  • 3
  • 7
  • 4
  • 8
  • Invocando el Método Add
  • vect.add(1);
  • Crear Activation Record
  • 3
  • 7
  • 4
  • 8
  • 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
  • Invocando el Método Add
  • vect.add(1);
  • Crear Activation Record
    • this va al stack
    • Parámetros al stack
  • 1
  • x
  • this
  • Método Add para Vector
  • 3
  • 7
  • 4
  • 8
  • Invocando el Método Add
  • vect.add(1);
  • Crear Activation Record
  • 1
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 7
  • 4
  • 8

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;
  • }
  • 1
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 7
  • 4
  • 8
  • 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;
  • }
  • 1
  • 0
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 7
  • 4
  • 8
  • 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;
  • }
  • 1
  • 0
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 7
  • 4
  • 8
  • void add(int x) {
  • int i;
  • i = 0;
  • while (i < v.length)
  • v[i] = v[i]+x;
  • i = i+1;
  • }
  • 1
  • 0
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 7
  • 4
  • 8
  • 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;
  • }
  • 1
  • 0
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 7
  • 4
  • 8
  • Ejecutando el Método Add
  • 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;
  • }
  • 1
  • 0
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 7
  • 4
  • 8
  • 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;
  • }
  • 1
  • 0
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 7
  • 4
  • 8
  • 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;
  • }
  • 1
  • 0
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 7
  • 4
  • 8
  • 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;
  • }
  • 1
  • 0
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 7
  • 4
  • 8
  • 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;
  • }
  • 1
  • 0
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 7
  • 4
  • 8
  • 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;
  • }
  • 1
  • 0
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 8
  • 4
  • 8
  • 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;
  • }
  • 1
  • 0
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 8
  • 4
  • 8
  • 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;
  • }
  • 1
  • 1
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 8
  • 4
  • 8
  • 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;
  • }
  • 1
  • 3
  • x
  • i
  • this
  • Método Add para Vector
  • 3
  • 8
  • 5
  • 9
  1   2   3   4   5   6


La base de datos está protegida por derechos de autor ©absta.info 2016
enviar mensaje

    Página principal