види трансляторів

Мова процесорів (машинний код) зазвичай є низькорівневим. Існують платформи, що використовують в якості машинного мову високого рівня (наприклад, iAPX-432), але вони є винятком із правила в силу складності і дорожнечі. Транслятор, який перетворює програми в машинний мову, який приймає і виконуваний безпосередньо процесором, називається компілятором.

Гідність компілятора: програма компілюється один раз і при кожному виконанні не потрібно додаткових перетворень. Відповідно, не потрібна наявність компілятора на цільовій машині, для якої компілюється програма. Недолік: окремий етап компіляції уповільнює написання і налагодження та ускладнює виконання невеликих, нескладних або разових програм.

Інший метод реалізації - коли програма виконується за допомогою інтерпретатора взагалі без трансляції. Інтерпретатор програмно моделює машину, цикл вибірки-виконання якої працює з командами на мовах високого рівня, а не з машинними командами. Таке програмне моделювання створює віртуальну машину, що реалізовує мову. Цей підхід називається чистою інтерпретацією. Чистий інтерпретація застосовується як правило для мов з простою структурою (наприклад, АПЛ або Лісп). Інтерпретатори командного рядка обробляють команди в скриптах в UNIX або в пакетних файлах (.bat) в MS-DOS також як правило в режимі чистої інтерпретації.

Гідність чистого інтерпретатора: відсутність проміжних дій для трансляції спрощує реалізацію інтерпретатора і робить його зручніше у використанні, в тому числі в діалоговому режимі. Недолік - інтерпретатор повинен бути в наявності на цільовій машині, де повинна виконуватися програма.

Існують компромісні між компіляцією і чистої інтерпретацією варіанти реалізації мов програмування, коли інтерпретатор перед виконанням програми транслює її на проміжний мову (наприклад, в байт-код або p-код), більш зручний для інтерпретації (тобто мова йде про інтерпретаторі з вбудованим транслятором) . Такий метод називається змішаною реалізацією. Прикладом змішаної реалізації мови може служити Perl. Цей підхід поєднує як гідності компілятора й інтерпретатора (велика швидкість виконання і зручність використання), так і недоліки (для трансляції та зберігання програми на проміжному мовою потрібні додаткові ресурси; для виконання програми на цільовій машині повинен бути представлений інтерпретатор). Також, як і в випадку компілятора, змішана реалізація вимагає, щоб перед виконанням вихідного тексту, не містив помилок (лексичних, синтаксичних і семантичних).

Трансляція і інтерпретація - різні процеси: трансляція займається перекладом програм з однієї мови на іншу, а інтерпретація відповідає за виконання програм. Однак, оскільки метою трансляції як правило є підготовка програми до інтерпретації, то ці процеси зазвичай розглядаються разом. Наприклад, мови програмування часто характеризуються як «компільовані» або «інтерпретовані», в залежності від того, переважає при використанні мови компіляція або інтерпретація. Причому практично всі мови програмування низького рівня і третього покоління, на кшталт асемблера, Сі або Модули-2, є модульна, а більш високорівневі мови, на зразок Python або SQL, - інтерпретуються.

З іншого боку, існує взаємопроникнення процесів трансляції та інтерпретації: інтерпретатори можуть бути компілює (в тому числі з динамічним компіляцією), а в трансляторах може вимагатися інтерпретація для конструкцій метапрограмування (наприклад, для макросів в мові асемблера, умовної компіляції в Сі або для шаблонів в C ++).