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

Скориставшись означенням синтаксичний аналіз на основі -граматик - student2.ru -граматики, сформулюємо умови для синтаксичний аналіз на основі -граматик - student2.ru -граматики: граматика синтаксичний аналіз на основі -граматик - student2.ru буде синтаксичний аналіз на основі -граматик - student2.ru -граматикою тоді і тільки тоді, коли кожного А-правила виду синтаксичний аналіз на основі -граматик - student2.ru

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

- якщо синтаксичний аналіз на основі -граматик - student2.ru

Означення. Таблиця синтаксичний аналіз на основі -граматик - student2.ru управління LL(1)-синтаксичним аналізатором визначається таким чином:

1. синтаксичний аналіз на основі -граматик - student2.ru — це номер правила виду синтаксичний аналіз на основі -граматик - student2.ru такого, що синтаксичний аналіз на основі -граматик - student2.ru

2. синтаксичний аналіз на основі -граматик - student2.ru — "виштовхнути" для всіх синтаксичний аналіз на основі -граматик - student2.ru

3. синтаксичний аналіз на основі -граматик - student2.ru — "допустити"

4. в інших випадках синтаксичний аналіз на основі -граматик - student2.ru — невизначено.

Побудуємо таблицю управління для наступної граматики:

синтаксичний аналіз на основі -граматик - student2.ru (1) синтаксичний аналіз на основі -граматик - student2.ru синтаксичний аналіз на основі -граматик - student2.ru
синтаксичний аналіз на основі -граматик - student2.ru (2) синтаксичний аналіз на основі -граматик - student2.ru синтаксичний аналіз на основі -граматик - student2.ru
синтаксичний аналіз на основі -граматик - student2.ru (3) синтаксичний аналіз на основі -граматик - student2.ru  
синтаксичний аналіз на основі -граматик - student2.ru (4)    
синтаксичний аналіз на основі -граматик - student2.ru (5) синтаксичний аналіз на основі -граматик - student2.ru синтаксичний аналіз на основі -граматик - student2.ru
синтаксичний аналіз на основі -граматик - student2.ru (6) синтаксичний аналіз на основі -граматик - student2.ru синтаксичний аналіз на основі -граматик - student2.ru
синтаксичний аналіз на основі -граматик - student2.ru (7) синтаксичний аналіз на основі -граматик - student2.ru  
синтаксичний аналіз на основі -граматик - student2.ru (8)    

Знайдемо множини синтаксичний аналіз на основі -граматик - student2.ru .

Правило Номер правила синтаксичний аналіз на основі -граматик - student2.ru
синтаксичний аналіз на основі -граматик - student2.ru (1) синтаксичний аналіз на основі -граматик - student2.ru
синтаксичний аналіз на основі -граматик - student2.ru (2) синтаксичний аналіз на основі -граматик - student2.ru
синтаксичний аналіз на основі -граматик - student2.ru (3) синтаксичний аналіз на основі -граматик - student2.ru
синтаксичний аналіз на основі -граматик - student2.ru (4) синтаксичний аналіз на основі -граматик - student2.ru
синтаксичний аналіз на основі -граматик - student2.ru (5) синтаксичний аналіз на основі -граматик - student2.ru
синтаксичний аналіз на основі -граматик - student2.ru (6) синтаксичний аналіз на основі -граматик - student2.ru
синтаксичний аналіз на основі -граматик - student2.ru (7) синтаксичний аналіз на основі -граматик - student2.ru
синтаксичний аналіз на основі -граматик - student2.ru (8) синтаксичний аналіз на основі -граматик - student2.ru

При побудові таблиці синтаксичний аналіз на основі -граматик - student2.ru управління синтаксичний аналіз на основі -граматик - student2.ru -синтаксичним аналізатором достатньо лише побудувати першу її частину, тобто синтаксичний аналіз на основі -граматик - student2.ru , оскільки "діагональ" таблиці синтаксичний аналіз на основі -граматик - student2.ru та синтаксичний аналіз на основі -граматик - student2.ru визначаються стандартно.

Ai a ( ) + * синтаксичний аналіз на основі -граматик - student2.ru
S        
A      
B        
C    
D        

Алгоритм.Побудова синтаксичний аналіз на основі -граматик - student2.ru - синтаксичного аналізатора на основі таблиці управліннясинтаксичний аналіз на основі -граматик - student2.ru :

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

….

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

- Якщо на вершині стека лексема синтаксичний аналіз на основі -граматик - student2.ru , то з вершини стека зняти синтаксичний аналіз на основі -граматик - student2.ru та прочитати нову поточну лексему.

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

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

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

- синтаксичний аналіз на основі -граматик - student2.ru виду синтаксичний аналіз на основі -граматик - student2.ru , такого, що синтаксичний аналіз на основі -граматик - student2.ru

- синтаксичний аналіз на основі -граматик - student2.ru за умови, що

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

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

- прочитати додатково одну лексему;

- на основі двох вхідних лексем вибрати необхідне правило або сигналізувати про синтаксичну помилку;

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

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

Наши рекомендации