lang | title | author |
---|---|---|
pl |
Lista 3 |
Jerry Sky |
Podać gramatyki bezkontekstowe generujące następujące języki
zbiór wszystkich słów nad alfabetem
${0,1}$ , w których liczba zer jest nie mniejsza niż liczba jedynek i nie większa niż trzykrotna liczba jedynek.
Mamy język
Rozważmy przypadek brzegowy
Zasadniczo, w tym słowie każdej jedynce da się przyporządkować od
Możemy wypisać wszystkie takie ciągi atomowe, spełniające ten stosunek liczby jedynek do liczby zer:
$10$ $01$ $001$ $010$ $100$ $0001$ $0010$ $0100$ $1000$
gdzie pomiędzy znakami powyższych ciągów możemy znowu znaleźć kolejne instancje takich ciągów.
Zatem gramatyka
zbiór wszystkich słów nad alfabetem
${(,)}$ , gdzie nawiasy są dobrze rozstawione, tzn. każdy lewy nawias ma odpowiadający mu prawy nawias i pary odpowiadających nawiasów są odpowiednio zagnieżdżone.
Mamy język
Znowu możemy mieć
Zatem mamy gramatykę $G = ({S}, {(,)}, P, S)$ gdzie
Niech
$G$ będzie gramatyką $$ S \to aS | aSbS | \epsilon $$Udowodnić, że $$ L(G) = {x: \text{każdy przedrostek ma co najmniej tyle symboli } a \text{, co symboli } b} $$
Zaczynamy od
$S \to aS$ $S \to aSbS$ $S \to \epsilon$
W pierwszym przypadku nasz „licznik” literek
W drugim przypadku mamy wszystko stałe — do obu „liczników” dodajemy jeden.
W trzecim przypadku „liczników” nie zmieniamy.
Za każdym razem, kiedy budujemy dane słowo (a co za tym idzie jego przedrostek) „licznik” literek
Znaleźć gramatykę bezkontekstową bez symboli bezużytecznych równoważną z gramatyką
$G = \left( {S, A, B, C, D}, {a,b,c}, P, S \right)$ , gdzie$P$ jest postaci $$ \begin{aligned} S &\to AB | CA\ A &\to a\ B &\to BC | AB\ C &\to aB | b\ D &\to DB | c \end{aligned} $$
Stosujemy algorytm usuwania symboli bezużytecznych: najpierw szukamy wszystkich nieterminali, które wytwarzają ciąg składających się wyłącznie z terminali (pośrednio lub bezpośrednio): $$ N' = {A,C,D}^* \Rightarrow {A,C,D,S}^* \Rightarrow {S,A,C,D} $$
Czyli usuwamy wszystkie produkcje z
Następnie szukamy wszystkich nieterminali, które możemy otrzymać z
Czyli usuwamy zbędną produkcję $D$, która jest nieosiągalna.
Mamy nową gramatykę
Niech
$G$ będzie gramatyką generującą poprawnie zbudowane formuły rachunku zdań ze zmiennymi zdaniowymi$p$ i$q$ . Symbolami terminalnymi w$G$ są$p,q,(,),\neg,\Rightarrow$ , a produkcjami$S \to \neg S | (S \Rightarrow S) | p | q$ .Znajdź gramatykę w postaci normalnej Chomsky’ego generującą ten sam język.
Dla uzyskanej gramatyki w postaci normalnej Chomsky’ego znajdź równoważną gramatykę w postaci normalnej Greibach.
Najpierw przekształcamy do postaci normalnej Chomsky’ego.
Narazie mamy:
Produkcję
$S \to AS$ $A \to \neg$
Produkcję
$S \to BC$ $B \to ($ $C \to SD$ $D \to EF$ $E \to \Rightarrow$ $F \to SG$ $G \to )$
Teraz przekształcamy do postaci normalnej Greibach.
Narazie mamy:
$S \to p|q$ $A \to \neg$ $B \to ($ $E \to \Rightarrow$ $G \to )$
Produkcję $S \to AS$ zastępujemy przez
Produkcję
Produkcję
Pozostają do przekształcenia produkcje
$C \to pD | qD | \neg SD | (CD$ $F \to pG | qG | \neg SG | (CG$
Usuwamy już niepotrzebne produkcje
Ostatecznie mamy produkcje: $$ \begin{aligned} S &\to p | q | \neg S | (C\ C &\to pD | qD | \neg SD | (CD\ D &\to \Rightarrow F\ F &\to pG | qG | \neg SG | (CG\ G &\to ) \end{aligned} $$
Znaleźć gramatykę w postaci normalnej Greibach równoważną z następującą gramatyką bezkontekstową: $$ \begin{aligned} S &\to AA | 0\ A &\to SS | 1\ \end{aligned} $$ z nieterminalami
$S$ i$A$ oraz terminalami$0$ i$1$ .
Mamy produkcje: $$ \begin{aligned} A_1 &\to A_2 A_1 | 0\ A_2 &\to A_1 A_1 | 1\ \end{aligned} $$
Ponieważ prawe strony produkcji
Do produkcji $A_2 \to A_2 \underbrace{A_2 A_1}{\alpha_1} | \underbrace{0 A_1}{\beta_1} | \underbrace{1}_{\beta_2}$ wykorzystujemy lemat z wykładu.
Otrzymujemy zatem: $$ \begin{aligned} A_2 &\to \overbrace{0 A_1}^{\beta_1} | \overbrace{1}^{\beta_2} | \overbrace{0 A_1 B}^{\beta_1 B} | \overbrace{1 B}^{\beta_2 B}\ B &\to \underbrace{A_2 A_1}{\alpha_1} | \underbrace{A_2 A_1 B}{\alpha_1 B} \end{aligned} $$
Ponieważ wszystkie produkcje z
Teraz wystarczy tylko zamienić
Pokazać, że jeśli wszystkie produkcje gramatyki bezkontekstowej mają postać
$A \to wB$ lub$A \to w$ , gdzie$A$ i$B$ są symbolami nieterminalnymi a w słowem złożonym tylko z symboli terminalnych, to język generowany przez tą gramatykę jest regularny.
Mamy
- gramatykę
$G = (N,T,P,S)$ , gdzie$P = \left{ A \to wB \lor A \to w:\enspace w \in T^+ \land A,B \in N \right}$
- NFA
$M = \left(Q, T, \delta, S, {q_F}\right)$ , gdzie$Q = N \cup {q_F}$
Cel: pokazać, że
Definiujemy funkcję przejścia:
Stanami są nieterminale, bo nieterminale oznaczają, że słowo się jeszcze nie skończyło — tak samo, jak w automacie, gdzie tylko jeden (ten dodatkowy) stan
$\delta(A, w) = {B: (A \to wB) \in P}$ -
$\delta(A, w) = {q_F}$ , jeśli$(A \to w) \in P$ , bo jeśli nieterminal przechodzi na sam ciąg terminali oznacza to zamknięcie wyprowadzania słowa
Istotne jest zauważyć, że skoro w gramatyce dla pewnego słowa
mamy pewne wyprowadzenie
to również przy pomocy funkcji przejścia
Czyli jesteśmy w stanie „wystrugać” sobie takie samo słowo używając obu języków
Pokazać, że jeśli język jest regularny, to istnieje gramatyka bezkontekstowa generująca ten język, w której wszystkie produkcje mają postać
$A \to aB$ lub$A \to a$ , gdzie$A$ i$B$ są symbolami nieterminalnymi a$a$ symbolem terminalnym.
Mamy
- DFA (odpowiadający wyrażeniu regularnemu)
$M = (Q, \Sigma, \delta, S, F)$ - gramatykę
$G = (Q, \Sigma, P, S)$ gdzie$P = \left{ A \to aB:\enspace a \in T \land A \in N \land (B \in N \lor B = \epsilon) \right}$
Cel: pokazać, że
I znowu tłumaczymy zapis automatowy na gramatyczny, definiujemy produkcję
-
$A \to aB$ jeśli$B \notin F$ (nie jest stanem akceptującym, nie można zakończyć wyprowadzenia słowa) -
$A \to a$ jeśli$B \in F$ oth.
oczywiście
Analogicznie do zadania 6.1. jesteśmy w stanie przetłumaczyć przejścia w automacie na przejścia w wyprowadzaniu słowa w gramatyce.
Należy zauważyć, że skoro w automacie dla pewnego słowa
to również w gramatyce
a wynika to z budowy zbioru produkcji, który przed chwilą zdefiniowaliśmy. (tutaj, w celu zobrazowania analogii, można na końcu jeszcze dopisać nieterminal $B$, który przechodzi na $\epsilon$)
Czyli jesteśmy w stanie „wystrugać” sobie takie samo słowo używając obu języków