Automty grmtiky Romn Brták, KTIML rtk@ktiml.mff.cuni.cz http://ktiml.mff.cuni.cz/~rtk Úvod do formálních grmtik Grmtiky, všichni je známe, le co to je? Popis jzyk pomocí prvidel, podle kterých se vytvářejí všechny řetězce dného jzyk. Původně pro popis přirozených jzyků <vět> <podmětná část> <přísudková část> Zdání syntxe vyšších progrmovcích jzyků od do Algolu 60 Bckus-Nurov normální form (BNF) <číslo> :== <číslo ez zn.> +<číslo ez zn.> -<číslo ez zn.> <číslo ez zn.> :== <číslice> <číslice><číslo ez znm>. <číslice> :== 0 2 3 4 5 6 7 8 9
Příkldy grmtik ) Grmtik správných uzávorkování V VV (V) () Výrz (()())(()) je generován posloupností přepisů: V VV (V)V (VV)V (()V)V (()())V (()())(V) (()())(()) 2) Grmtik generující všechny výrzy s opercemi + *, závorkmi jedinou konstntou c. V T+V T T F*T F F (V) c Výrz c+c*c+c je generován posloupností přepisů: V T+V F+V c+v c+t+v c+f*t+v c+c*t+v c+c*f+v c+c*c+v c+c*c+t c+c*c+f c+c*c+c Přepisovcí systémy - zákldní pojmy Přepisovcím (produkčním) systémem nzýváme dvojici R=(V,P), kde V - konečná eced P - konečná množin přepisovcích prvidel přepisovcí prvidlo (produkce) je uspořádná dvojice (u,v), kde u,v V* (zprvidl píšeme u v) Říkáme, že w se přímo přepíše n z (píšeme w z), jestliže: u,v,x,y V* tž. w=xuy, z=xvy (u v) P. Říkáme, že w se přepíše n z (píšeme w *z), jestliže: u,,u n V* w=u u 2... u n =z. Posloupnost u,,u n nzýváme odvozením (derivcí). Pokud i j u i u j, potom hovoříme o minimálním odvození. 2
Přepisovcí systémy Příkld: V = {0,} P = {0 0, 0 0} 000 * 000 dostneme z 000 000 000 000 * 000 dostneme z 000 000 000 liovolné slovo přepíše n liovolné jiné slovo (se stejným počtem výskytů 0 ) Produkční systémy slouží jko progrmovcí nástroj v UI progrm = systém produkcí dt = slov v ecedě OPS5, TOPS Constrint Hndling Rules (CHR) Definite Cluse Grmmrs (DCG) Formální (genertivní) grmtiky Genertivní grmtikou nzýváme čtveřici G=(V N,V T,S,P): V N - konečná množin neterminálních symolů V T - konečná množin terminálních symolů oě ecedy jsou neprázdné disjunktní! S V N -počáteční neterminální symol P - systém produkcí u v, kde u,v (V N V T )* u oshuje lespoň jeden neterminální symol. Jzyk L(G) generovný grmtikou G definujeme tkto: L(G) = {w w V T * & S *w}. Grmtiky G G 2 jsou ekvivlentní, jestliže L(G )=L(G 2 ). Příkld: G = ({S},{0,},S,{S 0S,S 0}), L(G) = {0 i i i } 3
Chomského hierrchie Klsifikce grmtik podle tvru přepisovcích prvidel. grmtiky typu 0 (rekurzivně spočetné jzyky L 0 ) prvidl v oecné formě grmtiky typu (kontextové jzyky L ) pouze prvidl ve tvru αxβ αwβ, X V N, α,β (V N V T )*, w (V N V T ) + jedinou výjimkou je prvidlo S λ, potom se le S nevyskytuje n prvé strně žádného prvidl grmtiky typu 2 (ezkontextové jzyky L 2 ) pouze prvidl ve tvru X w, X V N, w (V N V T )* grmtiky typu 3 (regulární/prvé lineární jzyky L 3 ) pouze prvidl ve tvru X wy, X w, X,Y V N, w V T * Uspořádnost Chomského hierrchie Chomského hierrchie definuje uspořádání tříd jzyků: L 0 L L 2 L 3 Dokonce vlstní podmnožiny (později): L 0 L L 2 L 3 L 0 L (rekurzivně spočetné jzyky zhrnují kontextové jzyky) oecná prvidl prvidl tvru αxβ αwβ L 2 L 3 (ezkontextové jzyky zhrnují regulární jzyky) X w, w (V N V T )* X wy, X w, Y V N, w V T * L L 2 (kontextové jzyky zhrnují ezkontextové jzyky) αxβ αwβ, w >0 vs. X w w 0 prolém s prvidly tvru X λ Můžeme z ezkontextových grmtik vyřdit prvidl X λ? 4
Nevypouštějící ezkontextové grmtiky Bezkontextová grmtik G je nevypouštějící právě tehdy, když nemá prvidl ve tvru X λ. Vět: Ke kždé ezkontextové grmtice G existuje nevypouštějící ezkontextová grmtik G tková, že L(G ) = L(G) - {λ} (jzyky se liší mximálně o prázdné slovo). Je-li λ L(G), potom existuje BKG G 2 tk, že L(G 2 ) = L(G) jediné prvidlo s λ n prvé strně je S λ S (počáteční neterminál) se nevyskytuje n prvé strně žádného prvidl G 2 (tedy L L 2 ). Příkld: G: S 0S λ G :S 0S 0 G 2 : S S λ, S 0S 0 Převod n nevypouštějící BKG ne, jk se zvit prvidel ve tvru X λ? Zákldní myšlenk: - prvidlo X λ se používá pro vyhození X ze slov - co když X do slov vůec nezřdíme?, Y uxv, X λ,, Y uv, ) Nejprve zjistíme neterminály, které se přepisují n λ: U = {X X V N & X *λ} Proč tk silně (nestčilo y X λ místo X *λ)? Řešení derivcí X X Y Y Y Z Z Z λ λ Iterční lgoritmus pro získání U: U = {X X V N & (X λ) P} přímý přepis U i+ = {X X V N & (X w) P, w U i *} přepis po i+ krocích U U 2 V N + stilizce ( k U k = U k+ = ) + U=U k 5
Převod n nevypouštějící BKG - pokrčování 2) Úprv prvidel do P dáme prvidl tvru X u tková, že: u λ v P je prvidlo X v Y v 2 v m Y m v m+, Y i U, v i ((V N -U) V T )* u vzniká z (v Y v 2 v m Y m v m+ ) vypuštěním některých (všech, žádného) symolů Y i. 3) Ještě L(G ) = L(G) - {λ} zřejmé: G je nevypouštějící BKG, L(G ) L(G), λ L(G ) nechť w L(G) w λ, tj. S *w, pokud se použilo prvidlo z P-P, pk má tvr X λ v derivci před ním muselo ýt užito prvidlo Y uxv uděláme novou derivci s Y uv ez X λ 4) Zývá situce λ L(G) G 2 = (V N {S },V T,S,P {S λ, S S}) Příkld - nevypouštějící BKG S Sc A A Ac λ ) Nejprve zjistíme neterminály, které se přepisují n λ: U = {A,S} 2) Uprvíme prvidl: S Sc A S c (vzniklo z S Sc vypuštěním S) A Ac (prvidlo A λ nepřevádíme) A c (vzniklo z A Ac vypuštěním A) Původní grmtik přijímá jzyk { i j c k i+j=k}. Převedená grmtik přijímá jzyk { i j c k i+j=k, k>0}. 6
Chomského hierrchie grmtiky typu 0 (rekurzivně spočetné jzyky L 0 ) prvidl v oecné formě grmtiky typu (kontextové jzyky L ) pouze prvidl ve tvru αxβ αwβ, X V N, α,β (V N V T )*, w (V N V T ) + jedinou výjimkou je prvidlo S λ, potom se le S nevyskytuje n prvé strně žádného prvidl grmtiky typu 2 (ezkontextové jzyky L 2 ) pouze prvidl ve tvru X w, X V N, w (V N V T )* grmtiky typu 3 (regulární/prvé lineární jzyky L 3 ) pouze prvidl ve tvru X wy, X w, X,Y V N, w V T * Grmtiky typu 3 regulární jzyky pouze prvidl ve tvru X wy, X w, X,Y V N, w V T * Podívejme se n derivce generovné grmtikmi typu 3 P: S 0S A λ, A 0A B, B 0B S S 0S 0A 0B 00B 00S 00 Pozorování: kždé slovo derivce oshuje právě jeden neterminál tento neterminál je vždy umístěn zcel vprvo plikcí prvidl X w se derivce uzvírá krok derivce = generuje symol(y) +změní neterminál Ide vzthu grmtiky konečného utomtu: neterminál = stv konečného utomtu prvidl = přechodová funkce 7
Převod konečného utomtu n grmtiku L F L L 3 Důkz: L=L(A) pro nějký konečný utomt A=(Q,X,δ,q 0,F) definujme grmtiku G=(Q,X,q 0,P), kde prvidl mjí tvr p q, když δ(p,)=q p λ, když p F ještě L(A)=L(G)? ) λ L(A) q 0 F (q 0 λ) P λ L(G) 2) n L(A) q 0,,q n Q tž. δ(q i, i+ )=q i+, q n F (q 0 q n q n n ) je derivce pro n n L(G) QED A co nopk? prvidl X Y kódujeme do přechodové funkce X λ je konec le co prvidl X n Y, X Y, X n? Příkld převodu KA n grmtiku A B 0A λ B 0C D C 0E A D 0B C E 0D E 0 A B 0 0 C D 0 0 E Příkldy derivcí: A 0A 0 (0) A B 0C 0A 0 (5) A B 0C 0A 00A 00 (0) A B D C A (5) L= { w w {0,}* & w je inární zápis čísl dělitelného 5} 8
Stndrdizce prvidel regulární grmtiky Ke kždé grmtice G=(V N,V T,S,P) typu 3 existuje ekvivlentní grmtik G, která oshuje pouze prvidl ve tvru: X Y X λ. Důkz: definujme G =(V N,V T,S,P ), kde prvidl P získáme tkto P P X Y X Y X λ X λ X n Y X Y 2, Y 2 2 Y 3,, Y n n Y Z n Z Z, Z 2 Z 2,, Z n λ (Y 2,,Y n, Z,,Z n jsou nové neterminály - pro kždé prvidlo jiná sd) zývá X Y definujme U(X) = {Y Y V N & X * Y} efektivní postup U = {Y (X Y) P}, U i+ = U i {Y (Z Y) P, Z U i } X Y X w pro všechn Y w z P Y U(X) Příkld stndrdizce regulární grmtiky Originální S X S Y Y Y Y Y X Y X X X λ Převedená S S S S 2 S 2 S 3 S 3 X S Y Y Y Z Y Y Y Y Y Y Y 2 Y 2 X Y Z Z Z 2 Z 2 Z 3 Z 3 λ X X X λ, L={ w w=u w=uv w=u, u,v {,}* } S S S 2 S 3 X, Y Y Y 2, Z Z 2 Z 3 9
Převod grmtiky n konečný utomt L L 3 L F Důkz: L=L(G) pro nějkou grmtiku G=(V N,V T,S,P) typu 3 oshující pouze prvidl ve tvru: X Y X λ definujme nedeterministický konečný utomt A=(V N,V T,δ,{S},F), kde: F={ X (X λ) P} δ(x,) ={ Y (X Y) P} ještě L(G)=L(A)? ) λ L(G) (S λ) P S F λ L(A) 2) n L(G) existuje derivce (S X n X n n ) X 0,,X n V N tž. δ(x i, i+ ) X i+, X 0 =S, X n F n L(A) Levé ( prvé) lineární grmtiky Grmtiky typu 3 nzýváme tké prvé lineární (neterminál je vždy vprvo). Odoně - grmtik G je levá lineární, jestliže má pouze prvidl tvru X Yw, X w, X,Y V N, w V T * (neterminál je vždy vlevo). Vět: Jzyky generovné levou lineární grmtikou jsou právě regulární jzyky. Důkz: otočením prvidel dostneme prvou lineární grmtiku X Yw, X w převedeme n X w R Y, X w R získná grmtik generuje jzyk L R víme, že regulární jzyky jsou uzvřené n reverzi tudíž protože L R je regulární, je i L (=(L R ) R ) regulární tkto lze získt všechny regulární jzyky 0
Lineární grmtiky ( jzyky) Můžeme levě právě lineární prvidl používt njednou? Dlší zoecnění - grmtik je lineární, jestliže má pouze prvidl tvru X uyv, X w, X,Y V N, u,v,w V T * (n prvé strně vždy mximálně jeden neterminál). Lineární jzyky jsou právě jzyky generovné lineárními grmtikmi. Zřejmě: regulární jzyky lineární jzyky Pltí tké: regulární jzyky lineární jzyky? NE! {0 n n n } není regulární jzyk, le je lineární (S 0S 0) Pozorování: lineární prvidl lze rozložit n levě prvě lineární prvidl S 0A, A S