lang | title | author | date | keywords |
---|---|---|---|---|
pl |
Gramatyki bezkontekstowe |
Jerry Sky |
2020-10-29 |
wykład, jftt, pwr, definicja, przykład, język, gramatyka, bezkontekstowa, bezkontekstowy, język, Greibach, Greibacha, Chomsky, Chomskyego, twierdzenie, d-d, dowód, wyprowadzenie, drzewo, postać, normalna |
- 1. DEF
- 2. Relacja wyprowadzenia $\underset{G}{\Rightarrow}$
- 3. DEF: Język generowany przez $G$
- 4. Drzewo wyprowadzania
- 5. Twierdzenie o istnieniu drzewa wyprowadzenia dla gramatyki $G$
- 6. DEF: Symbole bezużyteczne
- 7. Lemat o usuwaniu symboli bezużytecznych#1
- 8. Lemat o usuwaniu symboli bezużytecznych#2
- 9. Twierdzenie#2
- 10. Twierdzenie#3
- 11. Twierdzenie#4
- 12. Postać normalna Chomsky’ego
- 13. Postać normalna Greibach
Gramatyka bezkontekstowe
-
$N$ — skończony zbiór zmiennych (nieterminale) -
$T$ — skończony zbiór symboli końcowych (terminale, alfabet) -
$P$ — skończony zbiór produkcji postaci$A \to \alpha$ , gdzie$A \in N$ oraz$\alpha \in (N \cup T)^*$ -
$S \in N$ — symbol początkowy
Jeśli
(
Notacja:
- Będziemy pisać tylko
$\Rightarrow$ gdy gramatyka jest oczywista. -
$\Rightarrow^*$ — zwrotne i przechodnie domknięcie$\Rightarrow$ .
Język
Wyprowadzenie słowa
Drzewo o następujących własnościach
- każdy wierzchołek ma etykietę z
$N \cup T \cup {\varepsilon}$ - korzeń ma etykietę
$S$ (symbol początkowy) - wierzchołki wewnętrzne mają etykiety z
$N$ - jeżeli wierzchołek wewnętrzny ma etykietę $A$ a jego potomkowie od lewej mają kolejno etykiety
$X_1, \dots, X_n$ to$A \to X_1 \dots X_n$ jest produkcją w$P$
Jeśli konkatenacja wszystkich liści czytanych od lewej do prawej daje
kontynuacja przykładu wcześniejszego
Mamy:
- gramatykę
$E \to (E + E) | (E * E) | id$ - chcemy uzyskać
$id + id * id$
Jak widać, możemy uzyskać dwa drzewa dla tego słowa w tej gramatyce.
Oznacza to, że gramatyka jest niejednoznaczna.
Niech
«Indukcja względem liczby wierzchołków wewnętrznych w drzewie.»
Jeżeli w każdym kroku wyprowadzenia stosujemy produkcję do nieterminala leżącego najbardziej na lewo (prawo), to wyprowadzenie nazywamy lewostronnym (prawostronnym). Jeżeli
kontynuacja przykładu wcześniejszego
- Lewostronne wyprowadzenie:
$E \Rightarrow \underline{E} + E \Rightarrow id + E \Rightarrow id + E * E \Rightarrow id + id * E \Rightarrow id + id * E$ - Prawostronne wyprowadzenie:
$E \Rightarrow E + \underline{E} \Rightarrow E + E * E \Rightarrow E + E * id \Rightarrow E + id * id \Rightarrow id + id * id$
Jeśli
Symbol
otherwise
Niech
- każdy symbol pojawia się w wyprowadzeniu jakiegoś słowa z
$L$ - nie ma produkcji postaci
$A \to B$ (produkcje jednostkowe), gdzie$A, B \in N$
Co więcej, jeśli
Dla dowolnej gramatyki bezkontekstowej
$N_S \gets \emptyset$ $N_n \gets \left{ A: (A \to w) \in P \land w \in T^* \right}$ -
while
$N_S \neq N_n$ :$N_S \gets N_n$ $N_n \gets N_S \cup \left{ A: (A \to \alpha) \in P \land \alpha \in (T \cup N_S)^* \right}$
$N' \gets N_n$ $P' \gets \left{ (A \to \alpha) \in P: A \in N_n \land \alpha \in (T \cup N_S)^* \right}$
Dla dowolnej gramatyki bezkontekstowej
$N' \gets {S}$ -
while
można zmienić$N'$ :- Jeśli
$A \in N'$ oraz$A \gets \alpha_1|\dots|\alpha_n$ to dodaje wszystkie nieterminale z$\alpha_1,\dots,\alpha_n$ do$N'$ a terminale do$T'$
- Jeśli
- Do
$P'$ przenieś tylko te produkcje z$P$ , które zawierają symbole z$N' \cup T' \cup {\varepsilon}$ .
Każdy niepusty język bezkontekstowy jest generowany przez gramatykę bezkontekstową niezawierającą symboli bezużytecznych.
Jeżeli
Symbole bezużyteczne usunęliśmy dzięki poprzedniemu twierdzeniu.
Dla każdego nieterminala
Następnie usuwamy wszystkie
Każdy język bezkontekstowy niezawierający
Jeżeli dla nieterminala
to dla każdej niejednostkowej produkcji
Następnie usuwamy produkcje jednostkowe.
Dowolny język bezkontekstowy niezawierający
Niech
Dla pozostałych produkcji wykonujemy następujące operacje:
- Jeśli po prawej stronie występuje terminal
$a$ to dodajemy do$N$ nowy nieterminal$C_a$ a do produkcji$C_a \to a$ i zastępujemy$a$ przez$C_a$ . - Teraz jeśli prawa strona produkcji jest dłuższa niż
$1$ to zawiera tylko nieterminale. Jeśli jest postaci$A \to B_1\dots B_n$ dla$n > 2$ , to tworzymy nowe nieterminale$D_1,\dots,D_{n-2}$ i zastępujemy tę produkcję przez$A \to B_1 D_1, D_1 \to B_2 D_2, \dots, D_{n-3} \to B_{n-2}D_{n-2}, D_{n-2} \to B_{n-1}B_n$ .
Mamy:
$S \to bA|aB$ $A \to bAA|aS|a$ $B \to aBB|bS|b$
Wówczas, postać normalna Chomsky’ego:
$S \to C_b A | C_a B$ $A \to C_b D_A | C_a S | a$ $B \to C_a D_B | C_b S | b$ $C_a \to a$ $C_b \to b$ $D_A \to AA$ $D_B \to BB$
Produkcje są postaci
Określmy jako
Niech
Niech
Niech
Dowód po strukturze drzewa wyprowadzenia.
Niech
Niech
W wyprowadzeniu lewostronnym ciąg produkcji postaci
Ponieważ transformacja ta jest obustronna to
Każdy język bezkontekstowy
Niech
Załóżmy, że
Modyfikujemy produkcje tak, aby jeśli produkcja jest postaci
-
for
$k \gets 1$ to
$n$ :
Po wykonaniu tego algorytmu mamy gramatykę równoważną o produkcjach w postaci:
-
$A_i \to A_j \gamma$ , gdzie zawsze$i < j$ -
$A_i \to a \gamma$ , gdzie$a \in T$ -
$B_i \to \gamma$ , dzie$\gamma \in (N \cup {B_1, \dots, B_{i-1}})^*$ .
Zauważmy, że
Teraz rozważmy
Łatwo zauważyć, że
Mamy:
$A_1 \to A_2 A_3$ $A_2 \to A_3 A_1 | b$ $A_3 \to A_1 A_2 | a$
Nie pasuje
Dalej nie pasuje, więc ponownie z Lemat#1 otrzymujemy
Teraz mamy
Teraz odpowiednio podstawiając zgodnie z Lemat#1 otrzymujemy:
$A_3 \to a | aB_3 | b A_3 A_2 | b A_3 A_2 B_3$ $A_2 \to a A_1 | a B_3 A_1 | b A_3 A_2 A_1 | b A_3 A_2 B_3 A_1 | b$ $A_1 \to a A_1 A_3 | a B_3 A_1 A_3 | b A_3 A_2 A_1 A_3 | b A_3 A_2 B_3 A_1 A_3 | b A_3$ $B_3 \to a A_1 A_3 A_3 A_2 \| a B_3 A_1 A_3 A_3 A_2 \| b A_3 A_2 A_1 A_3 A_3 A_2 \| b A_3 A_2 B_3 A_1 A_3 A_3 A_2 \| bA_3 A_3 A_2 \|a A_1 A_3 A_3 A_2 B_3 \| a B_3 A_1 A_3 A_3 A_2 B_3 \| b A_3 A_2 A_1 A_3 A_3 A_2 B_3 \| b A_3 A_2 B_3 A_1 A_3 A_3 A_2 B_3 \| b A_3 A_3 A_2 B_3$