Phase vs Pass у компіляторі
Загалом компілятор - це комп’ютерна програма, яка читає програму, написану однією мовою, яку називають мовою-джерелом, і перекладає її на іншу мову, яку називають цільовою мовою. Традиційно мова-джерело була мовою високого рівня, такою як C ++, а цільова мова - мовою низького рівня, такою як мова мовлення. Так, загалом компіляторів можна розглядати як перекладачів, які перекладають з однієї мови на іншу. Pass і Phase - два терміни, які часто використовуються при компіляторах. Кількість пропусків компілятора - це кількість разів, коли він переходить над джерелом (або деякою формою його представлення). Компілятор розбивається на частини для зручності побудови. Фаза часто використовується для виклику такої єдиної незалежної частини компілятора.
Що таке пропуск у компіляторі?
Стандартний спосіб класифікації компіляторів - це кількість "проходів". Зазвичай компіляція є відносно трудомістким процесом, і спочатку комп’ютери не мали достатньо пам'яті, щоб вмістити таку програму, яка б виконала повну роботу. Через це обмеження апаратних ресурсів на ранніх комп’ютерах компілятори були розбиті на більш дрібні підпрограми, які виконали свою часткову роботу, перебравши вихідний код (зробивши «пропуск» над джерелом чи іншою його формою) та провели аналіз , перетворення та завдання перекладу окремо. Отже, залежно від цієї класифікації, компілятори позначаються як однопрохідні або багатопрохідні компілятори.
Як випливає з назви, компілятори з одним проходом збираються в один прохід. Простіше написати однопрохідний компілятор, а також вони виконуються швидше, ніж багатопрохідні компілятори. Тому навіть у той час, коли у вас були обмеження ресурсів, мови були розроблені таким чином, щоб вони могли бути складені в один прохід (наприклад, Pascal). З іншого боку, типовий багатопрохідний компілятор складається з декількох основних етапів. Перший етап - сканер (також відомий як лексичний аналізатор). Сканер зчитує програму і перетворює її в рядок жетонів. Другий етап - парсер. Він перетворює рядок лексем у дерево розбору (або абстрактне синтаксичне дерево), яке фіксує синтаксичну структуру програми. Наступним етапом є інтерпретація семантики синтаксичної структури. За цим слідують етапи оптимізації коду та етап остаточного генерування коду.
Що таке фаза у компіляторі?
Термін фаза часто виникає, коли ви говорите про побудову компілятора. Спочатку компіляторами були всі прості фрагменти єдиного, монолітного програмного забезпечення, написаного однією людиною для складання простої мови. Але коли вихідний код мови для перекладу стає складним і великим, компілятор був розбитий на кілька (відносно незалежних) фаз. Перевага наявності різних фаз полягає в тому, що розробка компілятора може бути розподілена між командою розробників. Крім того, він покращує модульність і повторне використання, дозволяючи замінити фази на поліпшені або додаткові фази (такі як подальша оптимізація), що додаються до компілятора. Процес поділу компіляції на етапи був впроваджений проектом PQCC (Project Quality Compiler-Compiler) в Університеті Карнегі Дині. Вони ввели терміни передній, середній і задній кінці. Більшість компіляторів мають щонайменше дві фази. Але зазвичай задній і передній кінець інкапсулюють ці фази.
Яка різниця між Phase та Pass у компіляторі?
Phase і Pass - два терміни, які використовуються в області компіляторів. Пропуск - це один раз, коли компілятор передає (проходить) джерельний код або якесь інше його представлення. Зазвичай більшість компіляторів мають щонайменше дві фази, які називаються передній і задній кінці, тоді як вони можуть бути або однопрохідними, або багатопрохідними. Phase використовується для класифікації компіляторів відповідно до побудови, тоді як pass використовується для класифікації компіляторів відповідно до того, як вони працюють.