Gráficas
estructura del programa
AST · DAG
Compiladores
x = (a + b) * (c - d)⟶t1 = a + b · t2 = c - d · …
Hoja de ruta
Ubicación en el compilador
Propósito
Rol de la IR
Representaciones
estructura del programa
AST · DAG
secuencia de instrucciones
t1 = b - c t2 = a * t1
push a push b push c sub mul
TAC · código de pila
grafo + código lineal
CFG: bloques básicos con TAC
Foco del tema
Como máximo un operador a la derecha y hasta tres direcciones.
Una dirección puede ser:
a, x4, 3.14t1, t2x = y op z | operación binaria |
x = op y | operación unaria (minus) |
x = y | copia |
goto L | salto incondicional |
ifFalse x goto L | salto condicional |
if x < y goto L | salto con comparación |
param x · call p, n | llamada a procedimiento |
x = y[i] · x[i] = y | arreglos |
x = &y · x = *y | direcciones y punteros |
Demo 1 · Estructura
Demo 2 · Del árbol al código
Demo 3 · Subexpresiones comunes
Demo 4 · Estructuras de datos
Cara a cara
| Criterio | Cuádruplas | Triples | Triples indirectos |
|---|---|---|---|
| Campos | op, arg1, arg2, result | op, arg1, arg2 | triples + lista de punteros |
| Referencia a un resultado | por nombre (temporal) | por posición (n) | por posición, vía la lista |
| Memoria | mayor | menor | intermedia |
| Al reordenar / optimizar | no cambia nada | renumerar referencias | solo se reordena la lista |
Por eso los compiladores que optimizan mucho prefieren cuádruplas o triples indirectos.
Demo 5 · Control de flujo
Demo 6 · Ciclos
Buenas prácticas y problemas comunes
Demasiados temporales
Reutilizar temporales libres y usar el DAG para no recalcular.
Copias innecesarias
t3 = t1 * t2; x = t3 → asignar directo: x = t1 * t2.
Ignorar precedencia o asociatividad
Generar el TAC desde el AST, nunca desde el texto plano.
Saltar a una etiqueta que aún no existe
Backpatching: dejar el destino pendiente y completarlo después.
Mezclar tipos (int + float)
Conversión explícita: t1 = inttofloat i.
Reordenar triples rompe referencias
Usar cuádruplas o triples indirectos si se va a optimizar.
Mini app
Escribe una expresión algebraica → obtén su AST, TAC, cuádruplas y triples.
Actividad interactiva
5 retos rápidos sobre lo que acabamos de ver. Gana quien más acierte… y más rápido.
Para llevar
La IR es el puente entre front-end y back-end: m × n → m + n.
TAC: un operador y hasta tres direcciones por instrucción, usando temporales.
El AST se traduce a TAC en postorden; el DAG evita recalcular subexpresiones.
Cuádruplas nombran resultados; triples usan posiciones; los indirectos facilitan reordenar.
El control de flujo se traduce con saltos y etiquetas.
Fuentes
Compiladores