Компілятор кожної мови є окремою програмою, яка отримує початковий текст і породжує вихід на мові асемблера. Всі компілятори мають загальну внутрішню структуру: front end, який проводить синтаксичний розбір і породжує абстрактне синтаксичне дерево, і back end, який конвертує дерево в Register Transfer Language (RTL), виконує різні оптимізації, потім породжує програму на мові асемблера, використовуючи архітектурно-залежне зіставлення зі зразком.