Úvod do formáln lních grmtik Automty grmtiky Romn Brták, KTIML rtk@ktiml.mff.cuni.cz http://ktiml.mff.cuni.cz/~rtk 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 6 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> :== 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í.
Přepisovcí systémy Příkld: V = {,} P = {, } * dostneme z * dostneme z liovolné slovo přepíše n liovolné jiné slovo (se stejným počtem výskytů ) 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 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},{,},S,{S S,S }), L(G) = { i i i } Chomského hierrchie Klsifikce grmtik podle tvru přepisovcích prvidel. grmtiky typu (rekurzivně spočetné jzyky L ) 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 L L 2 L 3 Dokonce vlstní podmnožiny (později): L L L 2 L 3 L 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 > vs. X w w prolém s prvidly tvru X λ Můžeme z ezkontextových grmtik vyřdit prvidl X λ?
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 S λ G :S S G 2 : S S λ, S S 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 uxv, 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 Převod n nevypouštějící BKG - pokrčov 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>}.
Chomského hierrchie grmtiky typu (rekurzivně spočetné jzyky L ) 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 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 S A λ, A A B, B B S S S A B B S 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 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,F) definujme grmtiku G=(Q,X,q,P), kde prvidl mjí tvr p q, když δ(p,)=q p λ, když p F ještě L(A)=L(G)? ) λ L(A) q F (q λ) P λ L(G) 2) n L(A) q,,q n Q tž. δ(q i, i+ )=q i+, q n F (q 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 p KA n grmtiku A B A λ B C D C E A D B C E D E A Příkldy derivcí: A A () A B C A (5) A B C A A () A B D C A (5) L= { w w {,}* & w je inární zápis čísl dělitelného 5} B C D E
Stndrdizce prvidel regulárn rní grmtiky Příkld stndrdizce regulárn 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) 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 Převod grmtiky n konečný 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,,X n V N tž. δ(x i, i+ ) X i+, X =S, X n F n L(A) Levé ( prvé) ) lineárn 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
Lineárn 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! { n n n } není regulární jzyk, le je lineární (S S ) Pozorování: lineární prvidl lze rozložit n levě prvě lineární prvidl S A, A S