6
Código intermedio Código intermedio Nombre: Nadia Berenice Nombre: Nadia Berenice Leos Hernández Leos Hernández

Código intermedio

  • Upload
    yaya

  • View
    500

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Código intermedio

Código intermedioCódigo intermedioNombre: Nadia Berenice Leos Nombre: Nadia Berenice Leos

Hernández Hernández

Page 2: Código intermedio

Código intermedio Código intermedio

es un codigo abstracto independiente de es un codigo abstracto independiente de la máquina para la que se generará el la máquina para la que se generará el

código objeto. código objeto.

Page 3: Código intermedio

El código intermedio ha de cumplir El código intermedio ha de cumplir dos requisitos importantes dos requisitos importantes

ser fácil de producir a ser fácil de producir a partir del análisis partir del análisis sintácticosintáctico

ser fácil de traducir al ser fácil de traducir al lenguaje objeto lenguaje objeto

Page 4: Código intermedio

Implementación de los tercetos Implementación de los tercetos

Los tercetos fueron implementados a Los tercetos fueron implementados a través de herencia. Diseñamos través de herencia. Diseñamos

una clase padre c_terceto, que una clase padre c_terceto, que contenía los campos comunes a todos contenía los campos comunes a todos los tercetos (todos), y que declaraba los tercetos (todos), y que declaraba una serie de métodos virtuales como una serie de métodos virtuales como show y generar_codigo. show y generar_codigo.

Cada objeto hijo de la clase c_terceto, Cada objeto hijo de la clase c_terceto, implementa cada uno de esos implementa cada uno de esos métodos, de manera que acabada la métodos, de manera que acabada la optimización del código intermedio, optimización del código intermedio, solo tenemos que ir llamando al solo tenemos que ir llamando al método generar_codigo del terceto método generar_codigo del terceto contenido en la lista. contenido en la lista.

Page 5: Código intermedio

Tercetos empleadosTercetos empleados BRANCHBRANCH genera el salto cuando la condición no se cumple. genera el salto cuando la condición no se cumple. PUSHPUSH solamente se usa para introducir los parámetros antes de solamente se usa para introducir los parámetros antes de

una llamada a función o a constructor. una llamada a función o a constructor. RETRET se emplea para indicar el valor a devolver por la subrutina. se emplea para indicar el valor a devolver por la subrutina. PUSHNPUSHN y y POPNPOPN se emplean para indicar al generador de código se emplean para indicar al generador de código

final el número de temporales que van a ser necesarios (PUSHN) o final el número de temporales que van a ser necesarios (PUSHN) o los que han dejado de serlo (POPN). los que han dejado de serlo (POPN).

PROMPTPROMPT y y DOCWRIDOCWRI fueron implementados como tercetos aparte fueron implementados como tercetos aparte para mejorar la claridad de los listados de los tercetos. En realidad, para mejorar la claridad de los listados de los tercetos. En realidad, podíamos haberlos implementado a través de los tercetos podíamos haberlos implementado a través de los tercetos PUSHPUSH, , CALLCALL y y RETRET. .

CTE_CADCTE_CAD no van insertados junto con el resto de tercetos, sino no van insertados junto con el resto de tercetos, sino que van en una lista auxiliar especial, que contiene todas las que van en una lista auxiliar especial, que contiene todas las cadenas utilizadas por el proceso de compilación. cadenas utilizadas por el proceso de compilación.

Page 6: Código intermedio

for

Do

Función

While

break

Switch

If else

Bloque

Estructuras de control