Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсова1.doc
Скачиваний:
8
Добавлен:
10.12.2018
Размер:
273.92 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

«ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ»

ЧЕРНІВЕЦЬКИЙ ФАКУЛЬТЕТ

КАФЕДРА ІНФОРМАЦІЙНИХ СИСТЕМ

КУРСОВА РОБОТА

З системного програмного забезпечення

Тема: Таблиці ідентифікаторів. Організація таблиць ідентифікаторів

Виконала:

Студентка ІІІ-го курсу, групи ЧКІ 99-А

Коваленко Катерина Олександрівна

Науковий керівник:

Бурага Алеодор Борисович

Чернівці - 2011

Зміст

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

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

  3. Побудова таблиць ідентифікаторів за методом бінарного дерева.

  4. Хеш-функції і хеш-адресація.

  5. Принципи роботи хеш-функцій.

  6. Побудова таблиць ідентифікаторів на основі хеш-функцій.

  7. Побудова таблиць ідентифікаторів за методом ланцюжків.

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

  9. Список використаної літератури.

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

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

У будь-якому випадку компілятор повинен мати можливість зберігати всі знайдені ідентифікатори та пов'язані з ними характеристики протягом усього процесу компіляції, щоб мати можливість використовувати їх на різних фазах компіляції.Для цієї мети, як було сказано вище, в компіляторах використовуються спеціальні сховища даних, що називаються таблицями символів, або таблицями ідентифікаторів.

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

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

□ для змінних:

- ім'я змінної;

- тип даних змінної;

- область пам'яті,пов'язана зі змінною;

□ для констант:

- назва константи (якщо вона є);

- значення константи;

- тип даних константи (якщо потрібно);

□ для функцій:

- ім'я функції;

- кількість і типи формальних аргументів функції;

- тип повертається результату;

- адреса коду функції.

Наведений вище склад збереженої інформації, звичайно ж, є тільки зразковим. Інші приклади такої інформації вказані в [17, 32, 50]. Конкретне наповнення таблиць ідентифікаторів залежить від реалізації компілятора. Крім того, не вся інформація, що зберігається в таблиці ідентифікаторів, заповнюється компілятором відразу - він може кілька разів виконувати звернення до даних в таблиці ідентифікаторів на різних фазах компіляції. Наприклад, імена змінних можуть бути виділені на фазі лексичного аналізу, типи даних для змінних - на фазі синтаксичного розбору, а область пам'яті пов'язується зі змінною тільки на фазі підготовки до генерації коду. Незалежно від реалізації компілятора принцип його роботи з таблицею ідентифікаторів залишається одним і тим же - на різних фазах компіляції компілятор змушений багаторазово звертатися до таблиці для пошуку інформації і запису нових даних.

Звідси можна зробити висновок, що таблиці ідентифікаторів повинні бути організовані таким чином, щоб компілятор мав можливість максимально швидкого пошуку потрібного йому елемента [23].