El Frontend traduce el código verificado a una Representación Intermedia (IR). Esta IR es un lenguaje genérico, independiente del lenguaje fuente y de la máquina destino.
Portabilidad: Facilita que un compilador funcione en distintas máquinas (PCs, móviles) solo cambiando el Backend.
Optimización: Es mucho más fácil optimizar esta IR que el código fuente original o el código máquina final.
El más usado es el Código de Tres Direcciones (TAC). Cada instrucción tiene, como máximo, tres operandos (direcciones).
Expresión:
Código TAC:
Esta es la última fase. Traduce la IR optimizada al lenguaje ensamblador o código máquina que la CPU puede ejecutar. Debe conocer íntimamente la arquitectura de la máquina destino.
Selección de Instrucciones: Elige las instrucciones de máquina más rápidas y eficientes para cada operación de la IR.
Asignación de Registros: Decide qué variables se guardan en los registros de la CPU (memoria ultra-rápida) y cuáles en la RAM (más lenta) para maximizar la velocidad.
Ordenamiento de Instrucciones: Reordena el código máquina para optimizar el rendimiento en las arquitecturas de CPU modernas.