Generador de código intermedio


Esta fase del compilador no es necesariamente una parte separada del mismo. La mayoría de los compiladores generan código como parte del proceso de análisis sintáctico, ya que requieren el árbol de sintaxis. Si este no se construye físicamente, el analizador sintáctico debe recorrer un árbol implícito. En lugar de generar código ensamblador directamente, los compiladores crean un código intermedio, más similar al ensamblador, donde las operaciones no involucran más de dos operandos.

Este código intermedio no corresponde a ninguna máquina real, sino a una máquina abstracta, definida de manera lo más general posible para poder ser traducida a cualquier máquina real. El objetivo es reducir la cantidad de programas necesarios para construir traductores y facilitar la transportabilidad entre distintas máquinas.

Se dice que la generación de código se realiza en tres direcciones.Es decir, se refiere a un enfoque que descompone una instrucción en tres partes: una operación, dos operandos y un resultado. Este modelo permite representar de forma más clara y detallada los cálculos y manipulación de datos. Las tres direcciones son:

  1. Operación: El tipo de acción que se realiza (por ejemplo, suma, multiplicación).
  2. Operandos: Los valores o variables sobre los que se realiza la operación.
  3. Resultado: El valor de salida de la operación.

Ahora explicaremos cómo ocurre el proceso de generación de código:

1. Entrada del análisis semántico

Se recibe el árbol sintáctico generado por la fase previa. Este árbol representa la estructura jerárquica de las operaciones en el programa. Por ejemplo:

Para la expresión resultado = num1 + num2, el árbol sintáctico sería:

En la Figura9, se representa un pequeño árbol sintáctico sencillo que muestra una suma, de acuerdo con los ejemplos previos de la calculadora básica.

Figura9. Árbol de una suma. Elaborado por el autor. 23/Nov/2024
Figura9. Árbol de una suma. Elaborado por el autor. 23/Nov/2024

El análisis semántico verifica:

  • Tipos de datos correctos (por ejemplo, num1 y num2 son números).
  • Operadores válidos (por ejemplo, +, -, /).
  • Reglas del lenguaje (por ejemplo, no dividir por cero).

2. Generación de instrucciones intermedias

A partir del árbol sintáctico, se crean instrucciones en un formato independiente de la máquina, como el Código de Tres Direcciones (TAC). Este código divide la expresión en pasos simples.

Para la expresión resultado = num1 + num2, en la Figura 10 se muestra cómo es el proceso para la generación de código.

Figura10. Proceso de generación de código. Elaborado por el autor. 23/Nov/2024.
Figura10. Proceso de generación de código. Elaborado por el autor. 23/Nov/2024.
  • Proceso de la Figura 10:

Cargar el primer operando:
Se carga el valor de la variable num1 en un registro temporal t1.

Cargar el segundo operando:
Se carga el valor de la variable num2 en un registro temporal t2.

Sumar ambos operandos:
Se realiza la suma entre los registros temporales t1 y t2, guardando el resultado en t3.

Almacenar el resultado:
El valor contenido en t3 se almacena en la variable resultado.

Y finaliza generando el código de esta manera: 

Figura11.Generador de código intermedio de la suma.Elaborado por el autor.23/Nov/2024
Figura11.Generador de código intermedio de la suma.Elaborado por el autor.23/Nov/2024

La imagen 11 muestra un código pequeño  o secuencia de pasos para sumar dos números. Aquí te explico qué hace cada línea:

  1. t1 = num1: Se asigna el valor del número 1 a una variable temporal llamada t1. Esto es como poner el primer número en una caja temporal.
  2. t2 = num2: Se asigna el valor del número 2 a otra variable temporal llamada t2. El segundo número se coloca en otra caja.
  3. t3 = t1 + t2: Se suman los valores de las dos cajas temporales (t1 y t2) y el resultado se guarda en una tercera caja llamada t3. Aquí se realiza la suma.
  4. resultado = t3: El valor final de la suma (que está en la caja t3) se copia a una variable llamada "resultado". Este es el resultado final de la operación.

Te proporciono el siguiente video que explica más a detalle el tema. 

Autor. (2024, diciembre 8). Generación de código intermedio. YouTube. https://youtu.be/--Smz4YYbPM

Referencias:

Aho, A. V. (2007). Compilers: Principles, Techniques, & Tools. Pearson.

Universidad Nacional del Santa. (n.d.). Generación de código intermedio. https://biblioteca.uns.edu.pe/saladocentes/archivoz/publicacionez/sesion_vi_3u____generacion_de_cod_inter.pdf 

¡Crea tu página web gratis! Esta página web fue creada con Webnode. Crea tu propia web gratis hoy mismo! Comenzar