Page 20 - 4761
P. 20
2. Компілятор є генератором для мови результуючої програми. Він повинен
побудувати на виході ланцюг вихідної мови за визначеними правилами
запропонованою мовою машинних команд або мовою асемблер. Розпізнавачем
цього ланцюга буде обчислювальна система, під яку створюється результуюча
програма.
Лексичний аналіз – частина компілятора, яка читає літери програми на вхідній мові
і будує з них слова (лексеми) вихідної мови. На вхід лексичного аналізатора поступає
текст вхідної програми, а вихідна інформація передається для подальшої обробки
компілятором на етапі синтаксичного розбору.
Синтаксичний розбір – це основна частина компілятора на етапі аналізу. Вона
виділяє синтаксичні конструкції в тексті вхідної програми, обробленої лексичним
аналізатором.
На цій же фазі компіляції перевіряється синтаксична правильність програми.
Синтаксичний розбір відіграє головну роль – роль розпізнавача тексту вхідної мови
програмування.
Семантичний аналіз – це частина компілятора, яка перевіряє правильність тексту
вхідної програми, з точки зору семантики вхідної мови.
Підготовка до генерації коду – це фаза, на якій компілятором виконуються
попередні дії, безпосередньо пов’язані з синтезом тексту результуючої програми, але які
ще не ведуть до утворення тексту на вихідній мові. Як правило, це дії, пов’язані з
ідентифікацією елементів мови, розподілом пам’яті і т.д.
Генерація коду – це фаза, безпосередньо пов’язана з утворенням команд, які
складають речення вихідної мови і, в цілому, текст результуючої програми. Це основна
фаза на етапі синтезу результуючої програми. Крім безпосереднього утворення тексту
результуючої програми, генерація, як правило, включає в себе оптимізацію – процес,
пов’язаний з обробкою вже готового тексту.
Таблиці ідентифікаторів (ТІ) – це спеціальним чином організовані набори даних,
які служать для збереження інформації про елементи вхідної програми, які потім
використовуються для утворення тексту результуючої програми. ТІ може бути одна або
декілька.
Елементами вхідної програми, інформацію про які потрібно зберігати, є: змінні,
константи, функції і т.д. Конкретний склад набору елементів залежить від вхідної мови,
яка використовується.
Схема поділу процесу на фази може зберігатися не так строго. Наприклад, фаза
лексичного аналізу необов’язково виділяти окремо. Синтаксичний розбір і генерація коду
можуть виконуватись одночасно.
2.4 Поняття проходу. Багатопрохідні і однопрохідні компілятори
Процес компіляції програм складається з декількох фаз. В реальних компіляторах
деякі фази можуть бути розбиті на складові, а деякі – об’єднуватися в одну.
Порядок виконання фаз компілятором може змінюватися в різних варіанта
компілятора. В одному випадку компілятор переглядає текст вхідної програми, виконує
всі фази компіляції і отримує об’єктний код. В другому – він виконує над вхідним текстом
тільки деякі фази компіляції і отримує набір проміжних даних. Ці дані знову
обробляються. Це може відбуватися декілька раз.
Реальні компілятори, як правило, виконують трансляцію тексту вхідної програми за
декілька проходів.
Прохід – це процес послідовного читання компілятором даних із зовнішньої
пам’яті, їх обробки і запис результату роботи в зовнішню пам’ять.
Один прохід включає в себе виконання однієї або декількох фаз компіляції.
18