Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по СПО [укр. язык].DOC
Скачиваний:
30
Добавлен:
02.05.2014
Размер:
526.85 Кб
Скачать

Макроалгоритм та структури даних лексичного аналізатора.

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

лексеми . Якщо виділена лексема не належить ні одному

If a>0 then b:=b+3; - рядок тексту із класу , то фіксується помилка, а якщо лексема

пізнана – визначаємо номер в класі. Індекс встановлюється на позицію кінця розпізнаної лексеми. Далі лексема передається синтаксичному аналізатору.

Структура даних для розпізнавання роздільників та знаків операцій.

Описуємо масив із 256 байт, де елементами будуть роздільники, наприклад, A[“:”,”;”,”,”,”.”,”^”,”|”].

Таблиця зарезервованих слів.

Для розпізнавання лексичним аналізатором зарезервованих слів використовуються такі структури даних:

  1. Упорядкований масив;

  2. Не упорядкований масив;

  3. Бінарне дерево (урівноважене, пронумероване) або список;

  4. Кінцевий автомат (у вигляді таблиці, у вигляді графа з переходами). Приклад таблиці: маємо список зарезервованих слів [by,begin,end,if,in].

  1. Метод розміщень: щоб скористатися цим методом необхідно вибрати хеш-функцію.

Вона може бути:

  • швидкою;

  • компактно розташовувати елементи в пам’яті.

Звідси можна виділити два критерії хеш-функції:

  • час доступу (середня тривалість, визначається в кожному конкретному випадку);

  • об’єм пам’яті.

Наприклад, за хеш-функцію можна взяти: залишок від суми кодів двох перших символів зарезервованого слова розділеної на кількість зарезервованих слів, тобто TRUNK((ORD(a1)+ORD(a2)/N)) – так визначається позиція в масиві відповідного елементу. Якщо маємо два зарезервованих слова з однаковими двома першими символами, тоді приймають одне з трьох рішень:

  1. Послідовне заповнення, тобто в першу вільну комірку. Прийнято рахувати, що 60% пам’яті

повинно бути вільною.

  1. Рехешировка, тобто будується функція другої хешировки, яка використовується коли відповідна комірка заповнена, таким чином маємо іншу адресу та заносимо в комірку, яка відповідає цій адресі.

  2. Використовування списку.

Таблиця ідентифікаторів.

Використовуються наступні структури даних для представлення таблиць ідентифікаторів :

  1. Бінарне дерево .

В такій структурі головну роль грає час трансляції.

  1. Масив масивів.

Всі літери, які утворюють різні ідентифікатори, зберігаються в одному масиві літер, а в кожній структурі запису в таблиці міститься вказівник на початок рядка літер, відповідний конкретному ідентифікаторові, та лічильник кількості в ньому літер. Щоб перевірити , чи знаходиться який–небудь відповідний ідентифікатор в таблиці , необхідно здійснити лише по-літерне порівняння з тими ідентифікаторами, які вже находяться в таблиці та мають відповідну довжину. Час трансляції в цій структурі ролі не грає , а максимально економиться пам’ять.

  1. Метод розміщень(дивитися вище).

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

  • номер ідентифікатора;

  • сам ідентифікатор;

  • вказівник типу;

  • адресу комірки;

  • рівень вложеності (явно чи неявно для таблиці ідентифікаторів , враховуючи блоки та процедури).

Таблиця ідентифікаторів, враховуючи блоки та процедури.

Існує два уявлення:

  1. Для кожної процедури чи блоку є своя таблиця ідентифікаторів. Ведеться стек ,

елемент якого містить номер рівня (при вході в процедуру чи блок – збільшується )

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

виході із процедури або блоку номер рівня зменшується та видаляється вказівник на

таблицю даної процедури чи блоку.

  1. Будується одна таблиця ідентифікаторів, де, крім інформації про ідентифікатор,

маємо вказівник на рівень вложеності для даного ідентифікатора.

Перевага віддається першому підходу.

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.

Соседние файлы в предмете Системное программное обеспечение