Зміст:
Синтаксичний аналіз на основі -граматик
Згідно визначення -граматики, граматика буде граматикою тоді і тільки тоді, коли для кожного -правила вигляду виконуються умови
-
для довільних .
-
якщо для якогось , то для усіх .
Таблиця де , керування -синтаксичним аналізатором визначається наступним чином:
-
— номер правила вигляду такого, що .
-
містить інструкцію
pop
для аналізатора яка позначає необхідність перенести символ з пам’яті аналізатору у поле результату. -
містить інструкцію
accept
для аналізаторп яка позначає що опрацьоване слово необхідно допустити (повернутиtrue
абощо). -
В інших випадках невизначено, чи радше містить інструкцію
reject
для аналізатора яка позначає що опрацьоване слово необхідно недопустити (повернутиfalse
абощо).
Приклад
Розглянемо вже добре відому нам граматику зі схемою
і пронумеруємо її правила таким чином:
Нагадаємо що для цієї граматики а також
Знайдемо множини як використовуючи результати минулої лекції.
При побудові таблиці керування -синтаксичним аналізатором достатньо лише побудувати першу її частину, тобто ту яка з , оскільки решта таблиці визначається стандартно:
1 | 1 | |||||
3 | 2 | 3 | ||||
4 | 4 | |||||
6 | 6 | 5 | 6 | |||
8 | 7 |
Алгоритм
Побудуємо -синтаксичний аналізатор на основі таблиці керування :
-
Прочитаємо поточну лексему з вхідного файла, у стек магазинного автомата занесемо аксіому .
-
Загальний крок роботи:
-
Якщо на вершині стека знаходиться нетермінал , то активізувати рядок таблиці, позначений . Елемент визначає номер правила, права частина якого заміняє на вершині стека.
-
Якщо на вершині стека лексема , то з вершини стека зняти та прочитати нову поточну лексему.
-
Якщо стек порожній та досягли кінця вхідного файла, то вхідна програма синтаксично вірна.
-
В інших випадках — синтаксична помилка.
-
Майже -граматики
У деяких випадках досить складно (а інколи й принципово неможливо побудувати -граматику для реальної мови програмування. При цьому -властивість задовольняється майже для всіх правил — лише декілька правил створюють конфлікт, але для цих правил задовольняється сильна -властивість. Тоді таблиця визначається в такий спосіб:
-
вигляду , такого, що
-
за умови, що
Програма, яка виконує додатковий аналіз вхідного ланцюжка, повинна:
-
прочитати додатково одну лексему;
-
на основі двох вхідних лексем вибрати необхідне правило або сигналізувати про синтаксичну помилку;
-
у випадку, коли правило вибрано, необхідно повернути додатково прочитану лексему у вхідний файл.
Звичайно, необхідно модифікувати алгоритм -синтаксичного аналізатора.
При цьому підпрограма аналізу конфліктної ситуації повинна додатково прочитати нову вхідну лексему, далі скориставшись контекстом з двох лексем, визначити номер правила, яке замість нетермінала на вершині стека та повернути додатково прочитану лексему у вхідний файл.
Контрольні запитання
-
Які дві умови повинна задовольняти граматика щоб бути -граматикою?
-
Що таке таблиця керування синтаксичного аналізатора на основі -граматики?
-
Який автомат і яка таблиця використовуються в алгоритмі роботи -синтаксичного аналізатора?
-
Опишіть алгоритм роботи -синтаксичного аналізатора.
-
Як необхідно модифікувати таблицю керування для сильної -граматики яка є майже -граматикою?
-
Як необхідно модифікувати алгоритм роботи синтаксичного аналізатора для сильної -граматики яка є майже -граматикою?
(традиційні відповіді можна переглянути у коментарях у вихідному коді цієї сторінки)