Generador de código intermedio
El código intermedio es una representación abstracta de un programa que se genera después del análisis léxico y sintáctico, pero antes de la generación de código máquina. Sirve como un paso intermedio en el proceso de compilación.
En este paso:
- El programa se traduce a un conjunto de instrucciones simples.
- Estas instrucciones son más fáciles de interpretar o traducir a lenguaje ensamblador o máquina.
- El código intermedio es independiente de la arquitectura de hardware específica, lo que facilita su portabilidad.
Formas de representar el código intermedio
Código de Tres Direcciones (TAC)
Es una representación basada en operaciones simples, donde cada instrucción tiene como máximo tres operandos:
- Un destino (el resultado de la operación).
- Dos operandos (pueden ser variables, constantes o temporales).
- Un operador (como
+,-,*,/, etc.).
| Figura 11 Ejemplo general (en TAC). |
| Figura 12 Ejemplo general (en pseudocódigo de pila). |
Representación en Árboles de Sintaxis Abstracta (AST)
El código se organiza como un árbol donde los nodos representan operadores, y las hojas, operandos. Este enfoque es útil para análisis y optimización.Se muestra un ejemplo en la siguiente figura:
| Figura 13 Ejemplo general (AST). |
Nuestro lenguaje en español
Recordemos la gramática que hemos definido en el mini lenguaje para las asignaciones y expresiones:| Figura 14 Gramática lenguaje en español. |
Generación de Código Intermedio con Ejemplos
Asignación simple:Paso 1: Identificar las partes de la asignación
xes el lado izquierdo (variable asignada).x + 1es una expresión que necesita evaluación.- El operador de asignación
=indica que el resultado debe almacenarse enx.
Paso 2: Generar código intermedio (TAC)
- Evaluamos
x + 1y almacenamos el resultado en un temporalt1. - Asignamos el valor de
t1ax.
Construcción del Código Intermedio
La construcción del código intermedio requiere recorrer el Árbol de Sintaxis Abstracta (AST) generado durante el análisis sintáctico.
Pasos:
Recorrido en postorden del AST:
Procesamos primero las hojas (operandos) y luego los nodos internos (operadores).Generación de temporales:
Cada operación genera un temporal para almacenar resultados intermedios.Emisión de instrucciones TAC o de pila:
Las instrucciones se generan en el orden en que se recorren los nodos.
Comentarios
Publicar un comentario