Синтаксичний аналіз без повернення назад

При виводу ланцюжка ω в G на кожному кроку безпосереднього виведення коли ми беремо до уваги виділений нами нетермінал (в залежності від стратегії виведення), виникає питання, яку альтернативу для Синтаксичний аналіз без повернення назад - 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 мова ведеться про наступну ситуацію:

Синтаксичний аналіз без повернення назад - student2.ru S

       
  Синтаксичний аналіз без повернення назад - student2.ru   Синтаксичний аналіз без повернення назад - student2.ru

Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru ω1 A ω2

       
  Синтаксичний аналіз без повернення назад - student2.ru   Синтаксичний аналіз без повернення назад - student2.ru

ω1 X Y

Мал. 5

Зафіксуємо стратегію виводу: далі будемо розглядати лише лівосторонню стратегію виводу Синтаксичний аналіз без повернення назад - 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 , якщо дія двох лівосторонніх виводів виду:

1) Синтаксичний аналіз без повернення назад - student2.ru

2) Синтаксичний аналіз без повернення назад - 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 -граматик:

1) Не існує алгоритма, який перевіряє належність КС-граматики класу Синтаксичний аналіз без повернення назад - student2.ru -граматик.

2) Існує алгоритм, який для конкретного Синтаксичний аналіз без повернення назад - student2.ru перевіряє, чи є задана граматика Синтаксичний аналіз без повернення назад - student2.ru -граматикою.

3) Якщо граматика є Синтаксичний аналіз без повернення назад - student2.ru -граматикою, то вона є Синтаксичний аналіз без повернення назад - student2.ru -граматикою, ( Синтаксичний аналіз без повернення назад - student2.ru ).

4) Клас Синтаксичний аналіз без повернення назад - student2.ru -граматик — це підклас КС-граматик, який не покриває його.

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

Синтаксичний аналіз без повернення назад - student2.ru

Мова, яку породжує наведена вище граматика Синтаксичний аналіз без повернення назад - student2.ru . Візьмемо виведення наступного ланцюжка Синтаксичний аналіз без повернення назад - student2.ru ; за означенням LL(K)-граматики Синтаксичний аналіз без повернення назад - 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 -граматики.

Означення. Синтаксичний аналіз без повернення назад - 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

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

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

Визначимо значення функції Синтаксичний аналіз без повернення назад - student2.ru для кожного Синтаксичний аналіз без повернення назад - student2.ru .

П1. Синтаксичний аналіз без повернення назад - student2.ru для всіх Синтаксичний аналіз без повернення назад - student2.ru .

П2. Синтаксичний аналіз без повернення назад - student2.ru

в інших випадках - невизначено.

Пn.

Синтаксичний аналіз без повернення назад - student2.ru

в інших випадках - невизначено.

Пm. Синтаксичний аналіз без повернення назад - student2.ru для всіх Синтаксичний аналіз без повернення назад - student2.ru .

Очевидно, що:

- послідовність Синтаксичний аналіз без повернення назад - student2.ru — монотонно зростаюча;

- Синтаксичний аналіз без повернення назад - student2.ru — послідовність, обмежена зверху.

Тоді покладемо Синтаксичний аналіз без повернення назад - student2.ru для кожного Синтаксичний аналіз без повернення назад - student2.ru .

Приклад: Знайти множину Firstk(Ai) для нетерміналів граматики з наступною схемою правил:

S -> BA

A -> +BA | ε

B -> DC

C -> *DC | ε

D -> (S) | a

Нехай k=2.

Fn\Ai S A B C D
F0 -- { ε } -- { ε } {a}
F1 -- { ε } {a} { ε, *a} {a}
F2 {a} {ε, +a} {a, a*} { ε, *a} {a}
F3 {a, a+, a*} {ε, +a} {a, a*} { ε, *a} {a, (a}
F4 {a, a+, a*} {ε, +a} {a, a*, (a} { ε, *a, *(} {a, (a}
F5 {a, a+, a*, (a} {ε, +a, +(} {a, a*, (a} { ε, *a, *(} {a, (a}
F6 {a, a+, a*, (a} {ε, +a, +(} {a, a*, (a} { ε, *a, *(} {a, (a, ((}
F7 {a, a+, a*, (a} {ε, +a, +(} {a, a*, (a, ((} { ε, *a, *(} {a, (a, ((}
F8 {a, a+, a*, (a, ((} {ε, +a, +(} {a, a*,(a, ((} { ε, *a, *(} {a, (a, ((}
F9 {a, a+, a*, (a, ((} {ε, +a, +(} {a, a*, (a, ((} { ε, *a, *(} {a, (a, ((}

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

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

Синтаксичний аналіз без повернення назад - student2.ru (1)

Вище сформульована умова для Синтаксичний аналіз без повернення назад - student2.ru -граматик може бути перефразована з урахуванням визначення множини Синтаксичний аналіз без повернення назад - student2.ru :

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

Синтаксичний аналіз без повернення назад - student2.ru , де Синтаксичний аналіз без повернення назад - student2.ru (2).

Оскільки Синтаксичний аналіз без повернення назад - student2.ru , то умова (2) є конструктивною умовою і може бути використана для перевірки, чи КС-граматика є Синтаксичний аналіз без повернення назад - 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 -граматики (k>1), які не є сильними Синтаксичний аналіз без повернення назад - 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

Висновок: вище наведена граматика не є сильною Синтаксичний аналіз без повернення назад - student2.ru -граматикою. Перевіримо цю ж граматику на властивість Синтаксичний аналіз без повернення назад - student2.ru -граматики. Тут ми маємо два різні варіанти виводу з S:

а) Синтаксичний аналіз без повернення назад - student2.ru

Синтаксичний аналіз без повернення назад - student2.ru

б) Синтаксичний аналіз без повернення назад - student2.ru

Синтаксичний аналіз без повернення назад - student2.ru

Висновок: наведена вище граматика є Синтаксичний аналіз без повернення назад - student2.ru -граматикою.

Алгоритм. ОбчисленняСинтаксичний аналіз без повернення назад - student2.ru .

Для побудови алгоритму пошуку множини Синтаксичний аналіз без повернення назад - student2.ruрозглянемо наступні приклади на синтаксичному дереві, які дозволять перейти до узагальнень.Подивимося на синтаксичне дерево висоти 1 для правила Синтаксичний аналіз без повернення назад - student2.ru S

Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru

Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru ω1 A ω2

Мал. 6

Тоді Синтаксичний аналіз без повернення назад - student2.ru .

Далі розглянемо дерево висоти 2:

S

Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru

 
  Синтаксичний аналіз без повернення назад - student2.ru

Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru Синтаксичний аналіз без повернення назад - student2.ru ω1 AJ ω2

       
  Синтаксичний аналіз без повернення назад - student2.ru   Синтаксичний аналіз без повернення назад - student2.ru

ω3 A ω4

Мал. 7.

Тоді Синтаксичний аналіз без повернення назад - student2.ru . В силу вищесказаного, будемо знаходити значення функції Синтаксичний аналіз без повернення назад - student2.ru , тобто будемо розглядати всілякі дерева, які можна побудувати, починаючи з аксіоми Синтаксичний аналіз без повернення назад - student2.ru .

П0. Синтаксичний аналіз без повернення назад - student2.ru . Очевидно, за 0 кроків ми виведемо S, після якої знаходиться Синтаксичний аналіз без повернення назад - student2.ru . У інших випадках Синтаксичний аналіз без повернення назад - student2.ru — невизначено Синтаксичний аналіз без повернення назад - student2.ru .

П1. Синтаксичний аналіз без повернення назад - student2.ru . В інших випадках Синтаксичний аналіз без повернення назад - student2.ru — невизначено.

….

Пn Синтаксичний аналіз без повернення назад - student2.ru . В інших випадках Синтаксичний аналіз без повернення назад - student2.ru — невизначено.

….

Настане крок Пm, коли Синтаксичний аналіз без повернення назад - 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

…. Пn

Синтаксичний аналіз без повернення назад - student2.ru

Тоді множина Синтаксичний аналіз без повернення назад - student2.ru — множина Синтаксичний аналіз без повернення назад - student2.ru -нетерміналів.

Приклад. Для граматики G з схемою правил Р знайдемо множину Синтаксичний аналіз без повернення назад - student2.ru -нетерміналів:

Синтаксичний аналіз без повернення назад - student2.ru

Синтаксичний аналіз без повернення назад - student2.ru = Синтаксичний аналіз без повернення назад - student2.ru

Синтаксичний аналіз без повернення назад - student2.ru

Синтаксичний аналіз без повернення назад - student2.ru

Синтаксичний аналіз без повернення назад - student2.ru

Синтаксичний аналіз без повернення назад - student2.ru

Таким чином, множина Синтаксичний аналіз без повернення назад - student2.ru -нетерміналів для наведеної вище граматики - Синтаксичний аналіз без повернення назад - student2.ru

Алгоритм.Тестування нетермінала Синтаксичний аналіз без повернення назад - student2.ru на ліву рекурсію. Для кожного нетермінала Аi побудуємо наступну послідовність множин S0, S1, ….

Синтаксичний аналіз без повернення назад - student2.ru , починаємо з нетерміналу Аi.

Синтаксичний аналіз без повернення назад - student2.ru

….

Синтаксичний аналіз без повернення назад - student2.ru

….

Синтаксичний аналіз без повернення назад - student2.ru

Тоді якщо Синтаксичний аналіз без повернення назад - student2.ru , то Синтаксичний аналіз без повернення назад - student2.ru — ліворекурсивний нетермінал.

Приклад. Для граматики G з схемою правил Р знайдемо множину ліворекурсивних нетерміналів:

Синтаксичний аналіз без повернення назад - student2.ru

1. Виконаємо процедуру тестування для кожного нетермінала окремо:

- наприклад, для нетермінала S:

Синтаксичний аналіз без повернення назад - student2.ru

Запропонуємо декілька прийомів, що дають можливість при побудові Синтаксичний аналіз без повернення назад - student2.ru граматик уникнути лівої рекурсії. Розглянемо граматику зі схемою правил Синтаксичний аналіз без повернення назад - student2.ru , яка має ліворекурсивний нетермінал Синтаксичний аналіз без повернення назад - student2.ru . Замінимо схему правил новою схемою з трьома правилами

Синтаксичний аналіз без повернення назад - student2.ru

Синтаксичний аналіз без повернення назад - student2.ru .

Приклад: Для граматики G з схемою правил Р для кожного нетермінала знайдемо множину Синтаксичний аналіз без повернення назад - student2.ru (k=1):

S -> BA

A -> +BA | ε

B -> DC

C -> *DC | ε

D -> (S) | a

З прикладу, що наведено раніше множини First1(A) ,будуть такими:

First1(S)= First1(B)= First1(D)={(,a}, First1(A)={+, ε }, First1(C)={*, ε }.

δn\Ai S A B C D
δ0 { ε } -- -- -- --
δ 1 { ε } { ε } {+, ε } -- --
δ 2 { ε } {ε} {+, ε } {+, ε }  
δ 3 { ε } {ε} {+, ε } {+, ε } {*, +, ε }
δ 4 { ε, ) } {ε} {+, ε } {+, ε } {*, +, ε }
δ 5 { ε, ) } {ε, )} {+, ε } {+, ε, )} {*, +, ε }
δ 6 { ε, ) } {ε, )} {+, ε , )} {+, ε } {*, +, ε , )}
δ 7 { ε, ) } {ε, )} {+, ε , )} {+, ε , )} {*, +, ε , )}

Таким чином, Follow1(S)= { ε, ) }, Follow1(A)= {ε, )}, Follow1(B)= {+, ε, )}, Follow1(C)= {+, ε , )}, Follow1(D)= {*, +, ε , )}.

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