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

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

Зміст:

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

Згідно визначення -граматики, граматика буде граматикою тоді і тільки тоді, коли для кожного -правила вигляду виконуються умови

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

  1. — номер правила вигляду такого, що .

  2. містить інструкцію pop для аналізатора яка позначає необхідність перенести символ з пам’яті аналізатору у поле результату.

  3. містить інструкцію accept для аналізаторп яка позначає що опрацьоване слово необхідно допустити (повернути true абощо).

  4. В інших випадках невизначено, чи радше містить інструкцію reject для аналізатора яка позначає що опрацьоване слово необхідно недопустити (повернути false абощо).

Приклад

Розглянемо вже добре відому нам граматику зі схемою

і пронумеруємо її правила таким чином:

Нагадаємо що для цієї граматики а також

Знайдемо множини як використовуючи результати минулої лекції.

При побудові таблиці керування -синтаксичним аналізатором достатньо лише побудувати першу її частину, тобто ту яка з , оскільки решта таблиці визначається стандартно:

 
1 1        
    3 2   3
4 4        
    6 6 5 6
8 7        

Алгоритм

Побудуємо -синтаксичний аналізатор на основі таблиці керування :

  1. Прочитаємо поточну лексему з вхідного файла, у стек магазинного автомата занесемо аксіому .

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

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

    • Якщо на вершині стека лексема , то з вершини стека зняти та прочитати нову поточну лексему.

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

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

Майже -граматики

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

Програма, яка виконує додатковий аналіз вхідного ланцюжка, повинна:

Звичайно, необхідно модифікувати алгоритм -синтаксичного аналізатора.

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

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

  1. Які дві умови повинна задовольняти граматика щоб бути -граматикою?

  2. Що таке таблиця керування синтаксичного аналізатора на основі -граматики?

  3. Який автомат і яка таблиця використовуються в алгоритмі роботи -синтаксичного аналізатора?

  4. Опишіть алгоритм роботи -синтаксичного аналізатора.

  5. Як необхідно модифікувати таблицю керування для сильної -граматики яка є майже -граматикою?

  6. Як необхідно модифікувати алгоритм роботи синтаксичного аналізатора для сильної -граматики яка є майже -граматикою?

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

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

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