Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
spz / шпори.doc
Скачиваний:
100
Добавлен:
23.02.2016
Размер:
1.56 Mб
Скачать

Поняття проходу. Багатопрохідні і однопрохідні компілятори.

Реальні компілятори як правило виконують трансляцію тексту початкової програми за декілька проходів. Прохід – це процес послідовного читання компілятором даних з зовнішньої пам’яті, їх обробки і розміщення результату в зовнішню пам’ять. Частіше всього один прохід включає в себе виконання однієї або декількох фаз компілятора. Результатом проміжних проходів є внутрішнє представлення початкової програми а результатом останнього проходу є результуюча об’єктна програма. При зменшенні кількості проходів збільшується кількість роботи компілятора і зменшується об’єм пам’яті. Чим складніша граматика, тим більше проходів виконує компілятор. Реальні компілятори проходять від 2 до 5 проходів.

Не 2.2. Таблиці ідентифікаторів. Призначення та особливості побудови таблиць ідентифікаторів.

Організація таблиці ідентифікаторів. Призначення і особливості побудови.

Перевірка правильності семантики і генерації коду вимагають знання характеристик змінних, констант, функцій і інших елементів, що зустрічаються в програмі, вхідною мовою. Усі ці елементи як правило позначаються ідентифікаторами. Виділення ідентифікаторі а також інших елементів вхідною мовою відбуваються на фазі лексичного аналізу. Їх характеристики визначаються на інших фазах. Склад можливих характеристик залежать від мови. Тому компілятор повинен мати можливість зберігати всі знайдені ідентифікатори та їх характеристики на протязі всього процесу компіляції, щоби мати можливість використовувати їх на різних фазах. Для цієї мети у компіляторі використовуються спеціальні сховища даних, які називаються таблиця ідентифікаторів або таблицю символів. Будь-яка таблиця ідентифікаторів складається з набору полів, кількість яких рівна кількістю полів знайдених в програмі. Кожний елемент містить інформацію про поле (ім’я, тип, область пам’яті).

ім’я

тип

область пам’яті

Для констант:

Назва

значення

тип

Для функцій:

Ім’я

Функції

Ім’я і типи формальних параметрів

Тип результату

Адреса коду

функції

Найпростіші методики побудови таблиць ідентифікаторів.

Найпростіший спосіб таблиць ідентифікаторів полягає, щоб додавати елементи в порядку їх надходження. Тоді таблиця ідентифікаторів буде являти собою не впорядкований масив інформації. Пошук потрібного елемента в таблицю буде полягати послідовному порівнянні шуканого елемента, з кожного елемента таблиці доки не буде знайдено потрібний. Якщо за одиницю прийняти час, що затрачується на порівняння двох елементів, то для таблиці, що містить N елементів, в середньому буде виконано N/2 порівняння.

Заповнення таблиці виконується шляхом додавання нового елемента і час заповнення не буде залежити від кількості елементів у таблиці, а час пошуку буде залежити від N. Але пошук в таблиці ідентифікаторів є операція, яке виконується найчастіше, тому використання таблиці заповненою в порядку надходження є неефективною. – це спосіб в порядку надходження.

Пошук може бути виконано більш ефективно, якщо елементи таблиці відсортовані за якоюсь ознакою. В нашому випадку – це за алфавітом. Тоді по відсортованому списку ефективним буде метод бінарного пошуку (логарифмічний). Символ, який варто знайти порівнюється з елементом (N+1)/2. якщо цей елемент не є шуканим, то ми повинні переглянути тільки блок елементів, або від 1 до (N+1)/2 – 1 або (N-1)/2 – N. тому максимальне число порівнянь буде 1+log2(N) a T=O/log2(N); при N=128 у впорядкованому 8 порівнянь, а в непорядковому необхідно виконати 64 порівнянь.

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

При додаванні кожного нового елементу в таблицю спочатку потрібно визначити місце куди потрібно помістити елемент, а потів виконати перенос частини ін формації в таблиці. Тоді час на заповнення такої таблиці: T=O(N+log2N)-k*O(N2). К –к оефіцієнт… таким чином при організації логарифмічного пошуку таблиці ідентифікаторів ми отримуємо істотне скорочення часу потрібного елемента і оскільки додавання нових елементів в таблицю відбувається істотно менше ніж звертання до них, то цей метод більш ефективним нід метод організації невпорядкованої таблиці.

Соседние файлы в папке spz