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


12

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

S→AaAb∣BbBa
A→ε
B→ε

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

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

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


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

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

Відповіді:


11

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

1 2 3 4S→AaAb
S→BbBa
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 0S→∙AaAbS→∙BbBaA→∙B→∙A⟹1B⟹5
state 1S→A∙aAba⟹2
state 2S→Aa∙AbA→∙A⟹3
state 3S→AaA∙bb⟹4
state 4S→AaAb∙b
state 5S→B∙bBab⟹6
state 6S→Bb∙BaB→∙B⟹7
state 7S→BbB∙aa⟹8
state 8S→BbBa∙

І тоді таблиця (я припускаю, що за може бути дотримано все, що завгодно).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.