Ein moderner Compiler ist typischerweise in drei Phasen strukturiert: Front-End, Middle-End und Back-End. Das Front-End analysiert den Quellcode, prüft ihn auf Korrektheit und erstellt eine Zwischendarstellung (IR). Das Middle-End führt Optimierungen an dieser IR durch. Das Back-End übersetzt dann die optimierte IR in Zielmaschinencode für eine bestimmte CPU-Architektur.
