Clase digital 14. Generación de código intermedio: Expresiones

Portada » Clase digital 14. Generación de código intermedio: Expresiones

Generación de código intermedio: Expresiones

Introducción

¡Hola! 

Me complace enormemente saber de ti, espero que compartas mi emoción y te sumes con gran actitud y ánimo a esta clase. 

En esta sesión aprenderemos sobre 

Sin entrar más en detalles,… ¡Comencemos!

¡Mucho éxito!

Desarrollo del tema

Generación de Código Intermedio

  • La generación de código intermedio es la interfaz entre el front-end y el back-end de un compilador.
  • Idealmente los detalles del lenguaje están confinados al front-end.
  • Los detalles de la máquina objetivo están confinados al back-end.
  • La entrada del generador de código intermedio es un árbol sintáctico que incluye tipos y atributos.
  • La salida del generador de código intermedio es una representación intermedia (IR) que es independiente del lenguaje fuente y de la máquina objetivo.

¿Cuál es el objetivo del generador de código intermedio? Generar código de una máquina abstracta.

El código intermedio debe ser fácil de generar.

Código de Tres Direcciones:

  • Es una forma de representar el código intermedio.
    • Cada código tiene a lo más un operador
      y puede tener hasta tres direcciones.
  • Cada dirección puede corresponder a:
    • Nombre
    • Constante
    • Variable temporal
  • Ejemplo:

Cada código intermedio se puede representar como: Código de Tres Direcciones.

El código intermedio debe ser fácil de traducir.

Estructura de datos para implementar código intermedio: 

  • Cuádruples
    • Tiene cuatro campos: 

op, arg1, arg2 y resultado

  • Triples
    • No usan variables temporales.
    • Hacen referencias a instrucciones.
  • Triples indirectas.
    • Usan una lista de punteros a triples.

Forma de Asignación Simple Estática:

  • Facilita algunas optimizaciones.
  • Difiere de un código de tres direcciones.

En que todas las asignaciones son a variables diferentes.

Generación de Código para Expresiones:

Traducción Incremental:

Es una técnica que evita el uso de bloques de código como atributos.
Esta asume que el código intermedio generado se va acumulando en un bloque de código único en el orden correcto.

Direccionamiento de Elementos de Arreglos:

Acciones Semánticas para Arreglos:

Conversiones entre Tipos:

De ampliación.

De reducción.

Conversión para Evaluación de Expresiones:

Cómo se pueden solucionar las ambigüedades en las reglas de expresiones: Definiendo precedencia y asociatividad de operadores.

Conclusión

Para recordar:

¡Te felicito por tu logro! Te invito a continuar con tu proceso formativo realizando y mandando la actividad asignada a esta clase. “Perseverar es sinónimo de tenacidad, no decaigas sigue perseverando en tu educación”. No olvides revisar el material de apoyo y si quedan dudas, consulta a tu asesor. Te encuentro en la siguiente clase. Hasta luego.

Fuentes de información