Języki i gramatyki bezkontekstowe
Transkrypt
Języki i gramatyki bezkontekstowe
Hierarchia Chomsky‘ego Gramatyki nieograniczone Def. Gramatyką nieograniczoną (albo typu 0) nazywamy uporządkowaną czwórkę G=<V,Σ,P,S> gdzie: % Σ - skończony alfabet symboli końcowych (alfabet, nad którym tworzymy język), % V - skończony alfabet zmiennych gramatyki, rozłączny z Σ, % P - skończony zbiór reguł produkcji, tj napisów postaci β#γ, gdzie β*(V(Σ)+, γ*(V(Σ)*, % wyróżniona zmienna S nazywana symbolem początkowym. A zatem słowo αGβ dla α,β*V* (słowo β daje się wyprowadzić w jednym kroku z α), gdy α=xyz i β=xsz dla pewnych słów s,x,y,z*(V(Σ)* oraz y#s jest regułą produkcji. Tradycyjnie przez G* oznaczymy domknięcie zwrotnoprzechodnie relacji G. Def. Językiem generowanym przez nieograniczoną G jest zbiór: L(G) = {w*Σ*: S*G w}. gramatykę Def. Języki generowane przez gramatyki nieograniczone nazywamy językami rekurencyjnie przeliczalnymi (RP). 1 Twierdzenie. Dla każdego alfabetu Σ istnieje język nie należący do klasy rekurencyjnie przeliczalnych. Dowód. Jest to prosty wniosek z twierdzenia o nieopisywalności wszystkich języków. Wystarczy zauważyć, że każdą gramatykę nieograniczoną można prosto zakodować używając np. alfabetu Γ=Σ({‘,’,1,’(‘,’)’,A,#}. Gramatyki kontekstowe Przypuśćmy, że na produkcje α#β gramatyki typu 0 nałożymy warunek, że β ma być co najmniej tak długie, jak α. Wtedy gramatykę tę nazywamy gramatyką kontekstową, a generowany przez nią język – językiem kontekstowym (CS). Def. Gramatyką kontekstową nazywamy gramatykę typu 0, w której: % dla każdej reguły α#β zachodzi warunek |α|"|β| (reguły są nieskracające), % celem umożliwienia wyprowadzenia słowa pustego dopuszczamy istnienie jednego wyjątku w postaci reguły pustej S#ε (S jest symbolem początkowym), o ile S nie występuje w prawej stronie żadnej reguły. Fakt. Każdą gramatykę kontekstową można algorytmicznie sprowadzić do postaci normalnej, w której wszystkie reguły (być może poza pustą) są postaci α1Aα2#α1βα2, przy czym β&ε oraz α1,β,α2*(V(Σ)*. 2 Produkcje w postaci normalnej wyglądają jak produkcje bezkontekstowe, których możliwość zastosowania jest warunkowana wystąpieniem po obu stronach zmiennej A słów α1 i α2. (lewy i prawy kontekst). Gramatyka bezkontekstowa w postaci normalnej jest więc gramatyką kontekstową z kontekstami pustymi. Twierdzenie. Problem słowa dla języków kontekstowych jest rozstrzygalny. Dowód. Jeśli w=ε, to wystarczy sprawdzić istnienie reguły S#ε. W przeciwnym razie w digrafie o wierzchołkach α*(Σ(V)+ z |α| "|w| i łukach zgodnych z relacją αGβ sprawdzamy istnienie drogi z wierzchołka S do w (jest ona wyprowadzeniem słowa w). Twierdzenie. Problemy pustości i skończoności są dla języków kontekstowych nierozstrzygalne. Dowody niebawem ... Prawie każdy język, jaki możemy sobie wyobrazić, jest językiem kontekstowym. Przykład. Gramatyka kontekstowa dla języka L={anbncn:n*N} 3 Mamy więc Σ={a,b,c} oraz V={S,B,C,F} oraz reguły: (1) S#aSF, (2) S#aF, (3) F#BC, (4) CB#BC, (5) aB#ab, (6) bB#bb, (7) bC#bc, (8) cC#cc Wyprowadzenie dowolnego słowa z L: (n -1) (n) (n -1)n/2 S ─(1) ── ─# a n-1SF n-1 ─(2) ─ ─# a n F n ─(3) ── # a n (BC) n ─(4) ── ─# (5) (6)(n-1) (7) (8)(n-1) n n n n n-1 n n n n n n n! 1 a B C ── ─# a bB C ── ─ ─# a b C ── ─# a b cC ── ─ ─# a n b n c n Należy jeszcze pokazać, że gramatyka nie tworzy żadnych innych słów nad Σ. Rozważmy wyprowadzenie słowa. Możemy zauważyć że na pewno należy po regule (1) zastosować (2), gdyż inaczej nie zniknie zmienna S. Tyle ile razy zastosowaliśmy reguły (1) i (2), trzeba zastosować regułę (3) celem zlikwidowania zmiennej F. Teraz jedyną szansą na usunięcie zmiennych B i C jest ich zamiana na b i c odpowiednio regułami (5),...,(8) – wśród nich oczywiście pierwsza zostanie zastosowana (5), generująca pierwszą literę różną od a. Równolegle można stosować regułę (4) przemieszczającą zmienne B w lewo i C w prawo. Należy zauważyć, że ewentualne pierwsze wygenerowanie przedrostka postaci anbmc..., gdzie n>m oznacza, że w dalszej części frazy istnieje zmienna B, której w żaden sposób nie da się zamienić na literę. 4 Automaty liniowo ograniczone Automatem liniowo ograniczonym (LBA) nazywamy pewną modyfikację niedeterministycznego dwukierunkowego automatu skończonego, który może w trakcie chodzenia po taśmie zapisywać dodatkowe symbole pomocnicze w odwiedzanych komórkach. + S ł o w o , Automat Automat posiada zestaw dodatkowych symboli Γ rozłączny z Σ i zawierający ograniczniki. % Początkowo stawiamy automat na pierwszej komórce taśmy wejściowej. % Automat może "podróżować" po taśmie dowolnie długo, może też z niej spaść. % Akceptacja słowa następuje wtedy, gdy maszyna może trafić w trakcie drogi do stanu akceptującego. % W każdym ruchu automat może zastąpić oglądany właśnie symbol innym z Σ(Γ tj. formalnie funkcja przejścia jest funkcją częściową postaci: δ:Q$(Σ(Γ)# Pfin(Q${Lewo,Stój,Prawo}$(Σ(Γ)). W stanie q widząc symbol a automat niedeterministycznie wybiera z δ(q,a) trójkę postaci: (nowy stan, kierunek ruchu na taśmie, symbol pozostawiany w opuszczanej komórce). Można przyjąć, że ograniczniki są "niezamazywalne". % 5 % Klasa języków kontekstowych = klasa języków akceptowanych przez automaty liniowo ograniczone. % Gramatyki kontekstowe i automaty liniowo ograniczone możemy traktować jak równoważne opisy języków kontekstowych i efektywnie tłumaczyć jeden zapis na drugi. Właściwości zamkniętości języków kontekstowych Twierdzenie. Klasa języków kontekstowych jest efektywnie zamknięta na operacje teoriomnogościowe (,',c. Dowód. Suma – mając dane gramatyki G1 i G2 w postaci normalnej o rozłącznych zbiorach zmiennych tworzymy nową dodając symbol początkowy S i produkcje S#S1, S#S2. % Dopełnienie – trudny (oparty na automacie), więc pomijamy ... % Przekrój - L'M=((Lc)((Mc))c % 6 Hierarchia Chomsky‘ego Cztery klasy języków, generowane przez gramatyki klasy 0 o coraz słabszych ograniczeniach (nazywane odpowiednio językami typu 3, 2, 1, 0): % języki regularne (Reg) – gramatyki lewostronnie liniowe (A#w lub A#wB, gdzie w*Σ* i A,B*V) % języki bezkontekstowe (CF) – gramatyki bezkontekstowe (A#γ, gdzie A*V a γ*(V(Σ)*), % języki kontekstowe (CS) – gramatyki kontekstowe (α#β, gdzie α,β*(V(Σ)+, |α|"|β|, ew. S#ε), % języki rekurencyjnie przeliczalne – gramatyki nieograniczone (α#β, gdzie α*(V(Σ)+, β*(V(Σ)*). Def. Powyższe cztery klasy języków są nazywane hierarchią Chomsky‘ego, który zdefiniował te klasy jako potencjalne modele dla języków naturalnych Twierdzenie o hierarchii. Dla każdego alfabetu Σ o co najmniej dwóch literach zachodzi: Reg ) CF ) CS ) RP przy czym każda z inkluzji jest właściwa. Dowód. Zachodzenie inkluzji jest oczywiste, bowiem każda gramatyka klasy wcześniejszej (ew. w postaci normalnej) jest gramatyką klasy późniejszej. Zawierania są ścisłe, bowiem znamy przykłady języków bezkontekstowych nieregularnych oraz kontekstowych niebezkontekstowych. Przykładem języka rekurencyjnie przeliczalnego niekontekstowego będzie język z nierozstrzygalnym problemem słowa. 7 Klasy języków: Klasa Języki regularne Języki Języki Języki bezkontekstowe kontekstowe rekurencyjnie przeliczalne Typ 3 2 1 0 Rodzaj Gramatyka Gramatyka Gramatyka Gramatyka gramatyki liniowa bezkontekstowa kontekstowa nieograniczona Typ Deterministyczny Niedeterm. Niedeterm. Deterministyczna maszyny automat automat ze automat maszyna akceptującej skończony stosem liniowo Turinga ograniczony Zamkniętość klas na operacje: ”-” oznacza, że klasa nie jest zamknięta na operację, ”+” - że jest i można tę operację przeprowadzić efektywnie. Języki regularne Suma ( Przekrój ' Dopełnienie c + + + Języki Języki Języki bezkontekstowe kontekstowe rekurencyjnie przeliczalne + + + + + + - Problemy decyzyjne: ”+” oznacza rozstrzygalność, ”-” - nierozstrzygalność Problemy: Słowa Pustości Skończoności Zawierania języków Równości języków Języki regularne + + + + + Języki Języki Języki bezkontekstowe kontekstowe rekurencyjnie przeliczalne + + + + - - - 8