68 2.5 Säännöllisten kielten rjoituksist Minkä thns kkoston formlej kieliä (= päätösongelmi, tunnistusongelmi) on ylinumeroituv määrä kun ts säännöllisiä lusekkeit (= merkkijonoj) on numeroituv määrä Näin ollen kikki kielet eivät voi oll säännöllisiä Onko olemss intuitiivist esimerkkiä kielestä, jok ei ole säännöllinen? Tspinoisten sulkujonojen kieli L sulut = { ( k ) k k 0 } 69 Luse 1.70 (Pumppuslemm) Olk. A säännöllinen kieli. Tällöin on olemss p 1s.e. mikä thns w A, w p, voidn jk osiin w = x y z s.e. x y p, y 1j x y i z A i = 0, 1, 2, Todistus. Olk. M= (Q,,,q 0,F)jokin A:n tunnistv deterministinen äärellinen utomtti s.e. Q = p. Automtin tunnistess merkkijono w A, w p, sen täytyy kulke w:n p:tä ensimmäistä merkkiä käsitellessään jonkin tiln kutt vähintään kksi kert. Olkoon q ensimmäinen sellinen til. 1
70 Vlitn x on M:n käsittelemä w:n lkuos sen tulless q:hun ensimmäisen kerrn, y on se os w:n loppuosst, jonk M käsittelee ennen seurv pluutn tiln q j z on loput merkkijonost w. Selvästi x y p, y 1j x y i z A kikill i = 0, 1, 2, x q y z Huomio: Pumppuslemm ei sno, että voisimme vlit x:n j y:n hlumllmme tvll. 71 simerkki Oletetn, että L sulut olisi säännöllinen. Pumppuslemmn mukn on tällöin olemss jokin p, jot pidempiä merkkijonoj voidn pumpt. Vlitn w = ( p ) p, jolloin w = 2p > p. Lemmn perusteell w voidn jk pumpttvksi osiin w = xyz s.e. xy p j y 1. On siis oltv x = ( i i p-1, y = ( j j 1j z = ( p-(i+j) ) p. Oletuksen perusteell xy k z L sulut kikill k = 0, 1, 2,, mutt esim. xy 0 z = xz = ( i ( p-(i+j) ) p = ( p-j ) p L sulut, sillä p-j p kosk j 1. Siten L sulut ei voi oll säännöllinen 2
72 3. Kontekstittomt kielet Tspinoisten sulkumerkkijonojen kieli ei ole säännöllinen Toislt se on kuvttviss seurvin muunnossäännöin 1.S j 2.S (S) Nämä produktiosäännöt tuottvt kielen L sulut merkkijonot symbolist S S ² (S) ² ((S)) ² (((S))) ¹ ((( ))) = ((( ))) 73 Kuvttv merkkijono tuotetn korvmll välikesymboleit yksi kerrlln nnettujen sääntöjen mukn Symboli ympäröivän merkkijonon rkenne ei määrää käytettyä muunnossääntöä kontekstiton kielioppi Usein käytetään lyhennysmerkintää A w 1 w k kuvmn välikesymboliin A liittyviävihtoehtoisi sääntöjä A w 1,, A w k S (S) 3
74 Yksinkertiset ritmeettiset lusekkeet ( = expression, T = term j F = fctor) + T T T T F F F () Lusekkeen ( + ()) tuottminen T T F F F () F ( + T) F (T + T) F (F + T) F ( + T) F ( + F) F ( + ()) F ( + (T)) F ( + (F)) F ( + ()) F ( + ()) 75 Määritelmä Kontekstiton kielioppi on nelikko G = (V,, R, S), missä V on kieliopin muuttujien eli välikemerkkien joukko, on kieliopin päätemerkkien joukko, se on pisteviers V:n knss, V on G:n kkosto, R V (V )* on kieliopin sääntöjen joukko j S V on kieliopin lähtösymboli (A, w) R merk. A w 4
76 Olk. G = (V,, R, S) j merkkijonot u, v, w (V )* j A w produktio R:ssä uav tuott suorn merkkijonon uwv kieliopiss G, uav G uwv Merkkijono u tuott merkkijonon v kieliopiss G, u G v, jos on olemss jono u 1, u 2,, u k (V )* (k 0)s.e. u G u 1 G u 2 G G u k G v k = 0: u G u millä thns u (V )* 77 u (V )* on G:n lusejohdos, jos S G u Pelkistä päätemerkeistä koostuv lusejohdos w * on G:n luse G:n tuottm kieli koostuu luseist L(G) = { w * S G w } Formli kieli L * on kontekstiton, jos se voidn tuott kontekstittomll kieliopill 5
78 Kontekstiton kielioppi on oikelle linerinen, jos kikki sen produktiot ovt muoto A ti A B Luse Jokinen säännöllinen kieli voidn tuott oikelle linerisell kontekstittomll kieliopill Luse Jokinen oikelle linerinen kontekstiton kieli on säännöllinen Näin ollen siis oikelle linerisill kieliopeill voidn tuott täsmälleen säännölliset kielet Kuitenkin on olemss kontekstittomi kieliä, jotk eivät ole säännöllisiä; esim. tspinoisten sulkumerkkijonojen muodostm kieli Näin ollen kontekstittomt kielet ovt säännöllisten kielten ito yliluokk 79 Moniselitteisyys Lähtösymbolist S merkkijonoon w johtv suorien johtojen jono S w 1 w k w snotn w:n johdoksi Aritmeettisten lusekkeiden kieliopiss luse + voidn joht monin tvoin: 1. +T T+T F+T +T +F + 2. +T +F T+F F+F F+ + 3. +T +F + T+ F+ + Välikkeiden lventmisjärjestyksen iheuttmt erot bstrhoituvt pois trksteltess jäsennyspuit 6
80 T F + T F 81 Kontekstiton kielioppi G on moniselitteinen, jos jollkin G:n luseell on kksi erilist jäsennyspuut Muuten kielioppi on yksiselitteinen Kieli, jonk tuottvt kieliopit ovt kikki moniselitteisiä, on luonnostn moniselitteinen sim. kieli { i b j c k i = j j = k } on luonnostn moniselitteinen Vihtoehtoinen kielioppi yksinkertisille ritmeettisille lusekkeille + () 7
82 + + + 83 Chomskyn normlimuoto Kontekstiton kielioppi on Chomskyn normlimuodoss (CNF), jos välikkeistä enintään S on tyhjentyvä, produktiot ovt muoto A BC ti A (pitsi mhd. S ) j lähtösymboli S ei esiinny minkään produktion oikell puolell Luse 2.9 Mistä thns kontekstittomst kieliopist voidn muodost ekvivlentti CNF-kielioppi. Todistus Konstruktio etenee viheittin. nsin kieleen lisätään uusi lähtösymboli, sen jälkeen poistetn -produktiot j yksikköproduktiot. 8
84 -produktioiden poistminen Lemm Mistä thns kontekstittomst kieliopist voidn muodost ekvivlentti kielioppi, joss enintään lähtösymboli on tyhjentyvä. Todistus Olk. G = (V,, R, S). G:n tyhjentyvät välikkeet: NULL = { A V A R} Toist kunnes joukko NULL ei enää ksv NULL += { A V A B 1 B k R, B i NULL i = 1,, k } 85 Korvtn kukin G:n produktio A X 1 X k kikkien sellisten produktioiden joukoll, jotk ovt muoto A 1 k, missä X i i X i jos X NULL i jos X NULL i Lopuksi poistetn kikki muoto A olevt produktiot. Jos myös S on poistettvien joukoss, niin otetn kieliopille uusi lähtösymboli S' j sille produktiot S S. 9
86 S A B A B B bab S A B A B B bab bb NULL = { A, B, S } S S S A B A B B bab bb 87 Yksikköproduktioiden poistminen Yksikköproduktio on muoto A B, missä A j B ovt välikkeitä. Lemm Mistä thns kontekstittomst kieliopist voidn muodost ekvivlentti kielioppi, joss ei ole yksikköproduktioit. Todistus Olk. G = (V,, R, S). G:n kunkin välikkeen yksikköseurjt: 1. F(A) = { B V A B R } 2. Kunnes F-joukot eivät enää ksv F(A) += { F(B) A B R } Lopuksi poistetn kikki G:n yksikköproduktiot j lisätään niiden sijn kikki mhdolliset muoto A olevt produktiot, missä B F(A) j B. 10
88 S S S A B A B B bab bb S B bab bb S B bab bb A B B bab bb F(S') = { S, A, B } F(S) = { A, B } F(A) = F(B) = 89 Kun - j yksikköproduktiot on poistettu, niin kikki produktiot ovt muoto A, A X 1 X k, k 2, ti S. Lisätään kielioppiin kutkin vstten välike C j produktio C. Produktiot A X 1 X k, k 2, korvtn produktiojoukoill A X 1 A 1 A 1 X 2 A 2 A k-2 X k-2 A k-1 A k-1 X k-1 X k, missä X X ' i C i jos X V jos X i i 11
90 S B bab bb S B bab bb A B B bab bb S C C S C b S 2 S 2 AC b S C b C b A C A 1 S' C S 1 S 1 BC S' C C S' C b S 2 S 2 AC b S' C b C b S' S C S 1 S 1 BC A 1 BC A C C B C b B 1 B 1 AC b B C b C b C C b b 91 CYK-lgoritmi CNF-muotoon muunnettun kontekstittomn kieliopin merkkijonot voidn jäsentää (n 3 ) jss Cocke-Younger- Ksmi lgoritmill Kontekstittomt kielet voidn siis tunnist tehokksti CYK-lgoritmin toimintperite on dynminen ohjelmointi Osjonoille tulukoidn ne välikemerkit, jotk voivt tuott ko. merkkijonon Jos lopult kieliopin lähtösymboli kuuluu koko merkkijonon tuottvien välikkeiden joukkoon, niin trksteltv merkkijono kuuluu kieleen 12
92 3.1 Pinoutomtit Pinoutomtti on äärellinen utomtti, joll on lisäksi yksi (ääretön) pinon käsiteltävä työnuh Pinon päällimmäiseksi lkioksi voidn lisätä uusi lkio push-opertioll j pinon päällimmäinen lkio voidn poistpop-opertioll Pinoutomtiss siirtymiin liittyy in myös pinon käsittely Työnuh nt utomtille muistin, jonk vull voidn välttää äärellisten utomttien rjoituksi 93 Formlisti pinoutomtti on kuusikko M =(Q,,,, q 0, F), missä Q on tilojen äärellinen joukko, on syötekkosto, on pinokkosto, q 0 Q on lkutil, F Q on lopputilojen joukko j on joukkorvoinen siirtymäfunktio: : Q P(Q ) 13
94 Pinoutomtit ovt yleisessä tpuksess epädeterministisiä: (r, x, ) = { (r 1, b 1 ),, (r k, b k ) } lukemll syötemerkin x j pinomerkin utomtti voi siirtyä tilst r johonkin tiloist r 1,, r k j smll korvt pinon päällimmäisen merkin jollkin merkeistä b 1,,b k. 1. Jos x =, niin utomtti tekee siirtymän syötemerkkiä lukemtt; 2. jos =, niin utomtti ei lue pinomerkkiä, vn kirjoitt uuden merkin pinon päällimmäiseksi lkioksi jättäen vnhn päällimmäisen merkin ennlleen (push); 3. jos j b i =, niin pinon päällimmäinen lkio luetn j poistetn, mutt uutt merkkiä ei kirjoitet pinoon sen tillle (pop) 95 Pinoutomtti M = (Q,,,, q 0, F) hyväksyy merkkijonon w * jos se voidn kirjoitt muotoon w = w 1 w 2 w m, missä kukin w i, j lisäksi on olemss jono tiloj r 0, r 1,, r m Q j merkkijonoj s 0, s 1,, s m * s.e. seurvt kolme ehto pätevät. 1. Lähtötilnteess utomtin til on lkutil j pino on tyhjä: r 0 = q 0 j s 0 = ; 2. (r i+1, b) ( r i, w i+1, ) kikill i { 0,, m-1 }, missä s i = t j s i+1 = bt joillin, b j t *; 3. r m F. 14
96 Tspinoisten sulkumerkkijonojen kieli { ( k ) k k 0 } on kontekstiton kieli, jok ei ole säännöllinen. Se voidn tunnist pinoutomtill M = (Q,,,, q 0, F): Q = {q 0, q 1, q 2, q 3 }, = { (, ) }, = { $, }, q 0 on lkutil, F = { q 0, q 3 } j on: (q 0, (, ) = { (q 1, ) }, (q 1, (, ) = { (q 1, $) }, (q 1, ), $) = { (q 2, ) }, (q 1, ), ) = { (q 3, ) }, (q 2, ), $) = { (q 2, ) }, (q 2, ), ) = { (q 3, ) }, (q,, ) = muill (q,, ) 97 q 0 (, / q 1 (, / $ ), / ), $ / ), $ / q 3 ), / q 2 (q 0, ((())), ) (q 1, (())), ) (q 1, ())), $ ) (q 1, ))), $$ ) (q 2, )), $ ) (q 2, ), ) (q 3,, ) q 3 F, joten ((())) L(M) 15
98 Luse 2.20 Kieli on kontekstiton jos j vin jos se voidn tunnist pinoutomtill. Pinoutomtti M on deterministinen, jos jokisell tilnteell (r, x, ) on enintään yksi mhdollinen seurj (r', x', '), joll (r, x, ) M (r', x', ') pädeterministiset pinoutomtit ovt idosti vhvempi kuin deterministiset. simerkiksi kieltä { ww R w {, b }* } ei void tunnist deterministisellä pinoutomtill Deterministiset kontekstittomt kielet voidn jäsentää tehokkmmin kuin yleiset kontekstittomt kielet 16