Зміст:
Побудова -синтаксичного аналізатора
Повернемось до умови, при якій граматика буде -граматикою, а саме: для довільного виведення та правила маємо , де .
Оскільки — конструктивна множина, спробуємо побудувати всілякі множини , які задовольняють попередньо сформульованій умові.
Визначимо наступну множину:
Опишемо алгоритм пошуку цієї множини:
-
, в інших випадках — невизначено.
-
, в інших випадках — невизначено.
-
, в інших випадках — невизначено.
-
, .
Тоді .
Виходячи з означення , умови для -граматики будуть наступними: для довільного -правила вигляду маємо:
Як наслідок, з алгоритму пошуку видно, що
Таблиці керування
Для побудови синтаксичного аналізатора для -граматики необхідно побудувати множину таблиць, що забезпечать нам безтупиковий аналіз вхідного ланцюжка (програми) за час , де
Побудову множини таблиць для управління -аналізатором почнемо з таблиці, яка визначає перший крок безпосереднього виводу в граматиці : де — номер правила вигляду а , і , і нарешті . Зрозуміло, що в інших випадках (якщо такого правила немає абощо) не визначена.
Неформально, коли в магазині автомата знаходиться аксіома , то нас цікавить перших термінальних символів, які можна вивести з (аксіома — поняття “програма”) при умові, що після неї (програми) буде досягнуто EOF.
Імена інших таблиць визначаються так: де
Наступні таблиці визначаються так: де — номер правила вигляду а , і , і нарешті . Зрозуміло, що в інших випадках (якщо такого правила немає абощо) не визначена.
Імена інших таблиць визначаються так: де
Приклад
Побудувати множину таблиць управління для -граматики з наступною схемою правил:
Для вищенаведеної граматики множини будуть такі: а множини будуть такі:
Побудуємо першу таблицю . Для -правила відповідні множини будуть такі:
Таблиця визначається так:
, 1 | , 2 |
Нова таблиця управління . Для -правила відповідні множини будуть такі:
Таблиця визначається так:
, 3 | , 3 | , 4 |
Нова таблиця управління де . Для таблиці та -правила множини будуть такі
, 2 | , 1 |
Наступна таблиця де Для таблиці та -правила множини будуть такі:
Таблиця визначається так:
, 3 | , 3 | , 4 |
Нова таблиця оскільки
Ми визначили чотири таблиці-рядки (а їх кількість для довільної -граматики визначається як де — кількість елементів множини
Об’єднаємо рядки-таблиці в єдину таблицю та виконаємо перейменування рядків:
, 1 | , 2 | ||||||
, 3 | , 3 | , 4 | |||||
, 2 | , 1 | ||||||
, 3 | , 3 | , 4 |
Алгоритм
Синтаксичний аналізатор для -граматики
-
Прочитати лексем з вхідного файла програми (звичайно, інколи менше ніж ). В магазин занести таблицю .
-
Загальний крок:
-
Якщо на вершині магазина знаходиться таблиця , то елемент таблиці визначає ланцюжок, який заміщає на вершині магазина.
-
Якщо на вершині магазина перша поточна лексема з прочитаних лексем рівна , то з вершини магазина зняти та прочитати з вхідного файла додатково одну лексему (звичайно, якщо це можливо).
-
Якщо досягли кінця вхідного файла програми та магазин порожній, то програма не має синтаксичних помилок.
-
В інших випадках — синтаксична помилка.
-
Контрольні запитання
-
Наведіть визначення множини .
-
Опишіть алгоритм побудови .
-
Опишіть алгоритм побудови таблиць керування (або рядків великої результуючої таблиці керування).
-
Якою формулою визначається кількість рядків таблиці керування?
-
Опишіть алгоритм синтаксичного аналізу для -граматики.
(традиційні відповіді можна переглянути у коментарях у вихідному коді цієї сторінки)