Podać definicję gramatyki LL(1).
Niech:
jest klasy LL(1) dla każdej pary wywodów lewostronnych:
jeżeli FIRST1(x) = FIRST1(y) to
Nieformalnie: Gramatyka LL(1) w wywodzie lewostronnym ma własność taką, że zawsze pierwszy symbol słowa końcowego w sposób jednoznaczny określa regułę (produkcję), jaką należy zastosować.
Dla gramatyki:
zbudować tablicę parsera LL(1) i sprawdzić, czy ciąg należy do gramatyki.
Podpowiedź: być może z tą gramatyką coś najpierw trzeba zrobić.
Usunięcie lewostronnej rekursji
Usunięcie lewostronnej faktoryzacji
Wyznaczenie zbiorów FIRST i FOLLOW
| FIRST | FOLLOW | |
|---|---|---|
| a | $, ] | |
| @, | $, ] | |
| a | @, $, ] | |
| [, | @, $, ] |
Tworzenie tablicy parsera
| a | @ | [ | ] | $ | |
|---|---|---|---|---|---|
| - 1 | |||||
| - 2 | - 5 | - 5 | |||
| - 3 | |||||
| - 6 | - 4 | - 6 | - 6 |
Sprawdzenie ciągu
| stos | symbole | produkcje |
|---|---|---|
| #S | a[a@]@$ | |
| #S'L | a[a@]@$ | 1 |
| #S'L'a | a[a@]@$ | 1, 3 |
| #S'L' | [a@]@$ | 1, 3 |
| #S']S[ | [a@]@$ | 1, 3, 4 |
| #S']S | a@]@$ | 1, 3, 4 |
| #S']S'L | a@]@$ | 1, 3, 4, 1 |
| #S']S'L'a | a@]@$ | 1, 3, 4, 1, 3 |
| #S']S'L' | @]@$ | 1, 3, 4, 1, 3 |
| #S']S' | @]@$ | 1, 3, 4, 1, 3, 6 |
| #S']S'@ | @]@$ | 1, 3, 4, 1, 3, 6, 2 |
| #S']S' | ]@$ | 1, 3, 4, 1, 3, 6, 2 |
| #S'] | ]@$ | 1, 3, 4, 1, 3, 6, 2, 5 |
| #S' | @$ | 1, 3, 4, 1, 3, 6, 2, 5 |
| #S'@ | @$ | 1, 3, 4, 1, 3, 6, 2, 5, 2 |
| #S' | $ | 1, 3, 4, 1, 3, 6, 2, 5, 2 |
| # | $ | 1, 3, 4, 1, 3, 6, 2, 5, 2, 5 |
Zadany ciąg należy do tej gramatyki.
Mamy daną gramatykę i zbudowaną tablicę parsera SLR(1). Mamy sprawdzić tylko, czy zadany ciąg należy do tej gramatyki.
| a | b | # | S | A | B | ||
|---|---|---|---|---|---|---|---|
| 0 | s2 | s3 | r1 | 1 | 1 | ||
| 1 | s2 | s3 | acc | 4 | 1 | ||
| 2 | s5 | s3 | 4 | ||||
| 3 | r5 | r5 | r2 | ||||
| 4 | r3 | r3 | r1 | ||||
| 5 | s5 | s3 | 6 | ||||
| 6 | r4 | r4 |
Ciąg do sprawdzenia:
| stos | symbole | wejście | akcja |
|---|---|---|---|
| 0 | abaabb# | przesunięcie | |
| 0 2 | a | baabb# | przesunięcie |
| 0 2 3 | ab | aabb# | redukcja |
| 0 2 4 | aB | aabb# | redukcja |
| 0 1 | A | aabb# | przesunięcie |
| 0 1 2 | Aa | abb# | przesunięcie |
| 0 1 2 5 | Aaa | bb# | przesunięcie |
| 0 1 2 5 3 | Aaab | b# | redukcja |
| 0 1 2 5 6 | AaaB | b# | redukcja |
| 0 1 2 4 | AaB | b# | redukcja |
| 0 1 1 | AA | b# | przesunięcie |
| 0 1 1 3 | AAb | # | redukcja |
| 0 1 1 4 | AAS | # | redukcja |
| 0 1 4 | AS | # | redukcja |
| 0 | S | # | akceptacja |
Zadany ciąg należy do tej gramatyki.