Класично компілятор складається з трьох частин: лексичного аналізу, аналізу та генерації коду. Лексичний аналіз розбиває текст програми на мовні ключові слова, імена та значення. Розбирає фігури, як лексеми, що походять з лексичного аналізу, поєднуються в синтаксично правильних для мови твердженнях. Генерація коду приймає структури даних, вироблені парсером, і переводить їх у машинний код або інше представлення. Сьогодні лексичний аналіз та аналіз можуть бути об'єднані в один крок.
Очевидно, що людина, яка пише генератор коду, повинна розуміти цільовий машинний код на дуже глибокому рівні, включаючи набори інструкцій, процесорні трубопроводи та поведінку кешу. Інакше програми, що виробляються компілятором, будуть повільними та неефективними. Вони дуже добре можуть читати і записувати машинні коди, представлені вісімковими або шістнадцятковими числами, але вони, як правило, записують функції для генерування машинного коду, посилаючись внутрішньо на таблиці машинних інструкцій. Теоретично люди, які пишуть лексеру та аналізатор, можуть нічого не знати про генерацію машинного коду. Насправді, деякі сучасні компілятори дозволяють вам підключати власні програми генерації коду, які можуть видавати машинний код для деяких процесорів, про які лексери та аналізатори не чули.
Однак на практиці автори-компілятори на кожному кроці знають багато про різні архітектури процесорів, і це допомагає їм спроектувати структури даних, необхідні для кроку генерації коду.