knu/csc/appl-math/c3s2/sys-prog

синтез і аналіз мовних процесорів

Зміст:

Побудова -синтаксичного аналізатора

Повернемось до умови, при якій граматика буде -граматикою, а саме: для довільного виведення та правила маємо , де .

Оскільки — конструктивна множина, спробуємо побудувати всілякі множини , які задовольняють попередньо сформульованій умові.

Визначимо наступну множину:

Опишемо алгоритм пошуку цієї множини:

  1. , в інших випадках — невизначено.

  2. , в інших випадках — невизначено.

  3. , в інших випадках — невизначено.

  4. , .

Тоді .

Виходячи з означення , умови для -граматики будуть наступними: для довільного -правила вигляду маємо:

Як наслідок, з алгоритму пошуку видно, що

Таблиці керування

Для побудови синтаксичного аналізатора для -граматики необхідно побудувати множину таблиць, що забезпечать нам безтупиковий аналіз вхідного ланцюжка (програми) за час , де

Побудову множини таблиць для управління -аналізатором почнемо з таблиці, яка визначає перший крок безпосереднього виводу в граматиці : де — номер правила вигляду а , і , і нарешті . Зрозуміло, що в інших випадках (якщо такого правила немає абощо) не визначена.

Неформально, коли в магазині автомата знаходиться аксіома , то нас цікавить перших термінальних символів, які можна вивести з (аксіома — поняття “програма”) при умові, що після неї (програми) буде досягнуто EOF.

Імена інших таблиць визначаються так: де

Наступні таблиці визначаються так: де — номер правила вигляду а , і , і нарешті . Зрозуміло, що в інших випадках (якщо такого правила немає абощо) не визначена.

Імена інших таблиць визначаються так: де

Приклад

Побудувати множину таблиць управління для -граматики з наступною схемою правил:

Для вищенаведеної граматики множини будуть такі: а множини будуть такі:

Побудуємо першу таблицю . Для -правила відповідні множини будуть такі:

Таблиця визначається так:

 
  , 1         , 2

Нова таблиця управління . Для -правила відповідні множини будуть такі:

Таблиця визначається так:

 
, 3 , 3       , 4  

Нова таблиця управління де . Для таблиці та -правила множини будуть такі

 
, 2 , 1          

Наступна таблиця де Для таблиці та -правила множини будуть такі:

Таблиця визначається так:

 
, 3 , 3 , 4        

Нова таблиця оскільки

Ми визначили чотири таблиці-рядки (а їх кількість для довільної -граматики визначається як де — кількість елементів множини

Об’єднаємо рядки-таблиці в єдину таблицю та виконаємо перейменування рядків:

 
  , 1         , 2
, 3 , 3       , 4  
, 2 , 1          
, 3 , 3 , 4        

Алгоритм

Синтаксичний аналізатор для -граматики

  1. Прочитати лексем з вхідного файла програми (звичайно, інколи менше ніж ). В магазин занести таблицю .

  2. Загальний крок:

    • Якщо на вершині магазина знаходиться таблиця , то елемент таблиці визначає ланцюжок, який заміщає на вершині магазина.

    • Якщо на вершині магазина перша поточна лексема з прочитаних лексем рівна , то з вершини магазина зняти та прочитати з вхідного файла додатково одну лексему (звичайно, якщо це можливо).

    • Якщо досягли кінця вхідного файла програми та магазин порожній, то програма не має синтаксичних помилок.

    • В інших випадках — синтаксична помилка.

Контрольні запитання

  1. Наведіть визначення множини .

  2. Опишіть алгоритм побудови .

  3. Опишіть алгоритм побудови таблиць керування (або рядків великої результуючої таблиці керування).

  4. Якою формулою визначається кількість рядків таблиці керування?

  5. Опишіть алгоритм синтаксичного аналізу для -граматики.

(традиційні відповіді можна переглянути у коментарях у вихідному коді цієї сторінки)

Назад до лекцій

Назад на головну