Компилятор выполняет преобразование языка: ввод осуществляется на языке A, а вывод - на языке B (и обычно к типу языков и результату преобразования предъявляются некоторые требования).Чтобы сделать это, входные данные проходят через различные этапы внутри компилятора - эти этапы образуют конвейер.
Наиболее часто используемое разделение состоит из 3 этапов: внешний конец - средний конец - внутренний конец
внешний интерфейс отвечаетдля анализа входного языка и выполнения синтаксических и семантических проверок (чтобы убедиться, что входная программа соответствует спецификации языка A), а затем преобразует его в промежуточный язык.Средний конец берет промежуточное представление и обычно выполняет несколько (не зависящих от языка) шагов оптимизации (хотя это можно пропустить).После завершения Middle End полученная преобразованная программа на промежуточном языке передается на сервер, который преобразует ее в язык B, обычно также выполняет некоторые оптимизации, специфичные для языка B.
Каждый из трех этапов также состоит из нескольких этапов.И все вместе формирует конвейер компилятора, так как это в основном то, как программы проходят через систему, преобразующуюся по пути.