Як ця граматика LL (1)?


12

Це питання з Книги Драконів. Це граматика:

SAaAbBbBa
Aε
Bε

Питання задає питання, як показати, що це LL (1), але не SLR (1).

Щоб довести, що це LL (1), я спробував побудувати його таблицю розбору, але я отримую кілька виробництв у комірці, що суперечить.

Скажіть, будь ласка, як це LL (1), і як це довести?


6
Я не дуже знайомий з граматиками, але, здається, мова цієї граматики є кінцевою. L={ab,ba}
Нейц

@Nejc: Так, це здається так!
Виняк Гарг

Відповіді:


11

Спочатку давайте дамо номер вашим постановкам.

1 2 3 4SAaAb
SBbBa
Aε
Bε

Давайте обчислимо перше і слідуємо множинам спочатку. Для невеликих прикладів, таких як ці, достатньо використання інтуїції щодо цих наборів.

FIRST(S)={a,b}FIRST(A)={}FIRST(B)={}FOLLOW(A)={a,b}FOLLOW(B)={a,b}

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

    a | b |
-----------
S | 1 | 2 |
A | 3 | 3 |
B | 4 | 4 |

Оскільки конфліктів немає, граматика є .LL(1)

Тепер для таблиці . По-перше, автомат.SLR(1)LR(0)

state 0SAaAbSBbBaABA1B5
state 1SAaAba2
state 2SAaAbAA3
state 3SAaAbb4
state 4SAaAbb
state 5SBbBab6
state 6SBbBaBB7
state 7SBbBaa8
state 8SBbBa

І тоді таблиця (я припускаю, що за може бути дотримано все, що завгодно).SLR(1)S

    a     | b     | A | B |
---------------------------
0 | R3/R4 | R3/R4 | 1 | 5 |
1 | S2    |       |   |   |
2 | R3    | R3    | 3 |   |
3 |       | S4    |   |   |
4 | R1    | R1    |   |   |
5 |       | S4    |   |   |
6 | R4    | R4    |   | 7 |
7 | S8    |       |   |   |
8 | R2    | R2    |   |   |

У стані 0 виникають конфлікти, тому граматика не є . Зверніть увагу , що якщо був використаний замість цього, то обидва конфлікти будуть вирішені правильно: в стані 0 на випередження прийме R3 і на упреждающей вибірці він вважатиме R4.SLR(1)LАLR(1)а LАLR(1)б

Це породжує цікаве запитання, чи є граматика але не , що є таким випадком, але нелегко знайти приклад.LL(1)LАLR(1)


Дякую! Я правильно сконструював Перший і наступний, але помилився, будуючи таблицю.
Vinayak Garg

10

Якщо вас не запитують, вам не доведеться будувати таблицю LL (1), щоб довести, що це граматика LL (1). Ви просто обчислюєте набори FIRST / FOLLOW, як робив Алекс:

СПОЧАТКУ(S)=а,бСПОЧАТКУ(А)=εСПОЧАТКУ(Б)=εПОСЛУГИ(А)=а,бПОСЛУГИ(Б)=а,б

І тоді, за визначенням, граматика LL (1) повинна:

  1. Якщо та це два різні правила граматики, то це повинно бути, що ім'я . Отже, два набори не мають жодного спільного елемента.АаАбFIRST(a)FIRST(b)=
  2. Якщо для будь-якого нетермінального символу вас є , це має бути . Отже, якщо є нульове виробництво для нетермінального символу, то набори FIRST і FOLLOW не можуть мати жодного спільного елемента.AΑεFIRST(A)FOLLOW(A)=

Отже, для даної граматики:

  1. У нас оскільки а і вони не мають загальних елементів.FIRST(AaAb)FIRST(BbBa)=FIRST(AaAb)={a}FIRST(BbBa)={b}
  2. FIRST(A)FOLLOWА)= оскільки а , і тепер оскільки а .СПОЧАТКУ(А)={а,б}ПОСЛУГИ(А)=СПОЧАТКУ(Б)ПОСЛУГИ(Б)=СПОЧАТКУ(Б)={ε}ПОСЛУГИ(Б)={а,б}

Щодо аналізу SLR (1), я думаю, що він є бездоганним!


Ласкаво просимо! Щоб покращити цю відповідь, чому б ви не застосували те, що ви заявляєте, до граматики?
Рафаель

Радий бути тут !! Відповів на ваш запит, і я думаю, що я дав ґрунтовне пояснення!
Етан

Дякую! Зауважте, що ми можемо використовувати LaTeX тут, як я редагував для вашої математики.
Рафаель

Вау Дякую! це чудове пояснення. Але я думаю, що в додатку є якась помилка. Чи не перший (A) = {epsilon}? Я думаю, ви поміняли ПЕРШОГО та НАСЛІДОГО.
Vinayak Garg

ПЕРШИЙ (A) - це справді епсилон, але оскільки ви хочете обчислити ПЕРШИЙ набір правого члена, A -> ε просто показує, що у нас порожнє виробництво і перший символ термінала, який ви бачите (і, отже, ПЕРШИЙ набір його) - символ терміналу a. Сподіваюся, це допомогло!
Ітан

0

Шукайте достатню умову, завдяки якій граматика LL (1) (підказка: подивіться ПЕРШІ множини).

Шукайте необхідну умову, якій повинні відповідати всі граматики SLR (1) (підказка: подивіться набори FOLLOW).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.