12.07.2015 Views

Uvodno predavanje Robert Manger, ožujak 2011

Uvodno predavanje Robert Manger, ožujak 2011

Uvodno predavanje Robert Manger, ožujak 2011

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

14.4.<strong>2011</strong>.6.0 Uvod u kontekstno-slobodne gram• U prethodnim poglavljima proučavali smo regularnejezike, koji se mogu opisati RI-ima i prepoznati KA-ima.Vidjeli smo da je porodica regularnih jezika dosta mala.• U ovom dijelu kredemo u potragu za vedom porodicomjezika, opdenitijim načinom njihovog opisivanja isloženijim automatima za njihovo prepoznavanje.• Počinjemo s novim mehanizmom za generiranje riječikoji se zove gramatika. Vidjet demo da gramatike moguopisati vedu porodicu jezika nego RI.• Za sada se ograničavamo na jednu posebnu vrstugramatika, a to su kontekstno-slobodne gramatike.TR-II Kontekstno-slobodni jezici 36.1 Produkcije i izvodi (1)• Gramatika se sastoji od:– skupa varijabli (također se zovu neterminali),– skupa terminala (iz alfabeta),– liste produkcija (ili pravila).• Primjer 6.1. Evo jedne kontekstno-slobodne gramatike:S 0S1S εOvdje je S jedina varijabla, terminali su 0 i 1, postojedvije produkcije. Varijable se pišu velikim slovom.• Kako funkcionira gramatika? Uzme se riječ koja sadrživarijablu, pa se u toj riječi varijabla zamijeni s desnomstranom produkcije.TR-II Kontekstno-slobodni jezici 42


14.4.<strong>2011</strong>.6.1 Produkcije i izvodi (2)• Kažemo da je riječ w sastavljena od samih terminalagenerirana gramatikom ako, krenuvši od polaznevarijable S, primjenjujudi produkcije možemo dodi dow. Niz riječi koje na taj način dobivamo zove se izvodod w.• Primijetimo da se u gramatici gotovo uvijek pojavljujerekurzija. Dakle, produkcije na rekurzivan način opisujugrađu neke riječi.• Ovakva vrsta gramatike s kojom sada radimo zove sekontekstno-slobodna gramatika (KSG). Jezik jekontekstno-slobodan ako su njegove riječi generiranenekom KSG.TR-II Kontekstno-slobodni jezici 56.1 Produkcije i izvodi (3)• Primjer 6.1 (nastavak). Riječ 0011 spada u jezik kojeggenerira prethodno zadana gramatika. Izvod ide ovako:S 0S1 00S11 0011Prva dva koraka koriste prvu produkciju, a zadnji korakdrugu produkciju.Lako se vidi da se jezik koji naša gramatika generirasastoji od svih riječi s jednakim brojem uzastopnih nulai jedinica. Dakle gramatika opisuje dobro nam poznatineregularni jezik: { 0 n 1 n | n≥0 } .• Kradi način zapisivanja gramatike iz Primjera 6.1 je:S 0S1 | εOkomita crta znači “ili”.TR-II Kontekstno-slobodni jezici 63


14.4.<strong>2011</strong>.6.3 Konstrukcija KSG za zadani jezik (1)• Pitamo se kako za zadani jezik konstruirati KSG-u kojaga generira? Nema nekog pouzdanog recepta,služimo se iskustvom i intuicijom. U nastavku slijedinekoliko poučnih primjera.• Primjer 6.3. Evo KSG-e koja generira regularni jezikbinarnih riječi s parnim brojem nula.– Ako je prvi znak 1, tada ostaje paran broj nula.– Ako je prvi znak 0, tada idemo do idude 0, a ono što jeostalo iza opet je riječ s parnim brojem nula.Dakle:S 1S | 0A0S | εA 1A| εTR-II Kontekstno-slobodni jezici 96.3 Konstrukcija KSG za zadani jezik (2)• Primjer 6.3 (nastavak). Isti jezik može imati višegramatika. Sad demo nadi drugu KSG za binarne riječis parnim brojem nula. Uvodimo varijablu T kojagenerira binarne riječi s neparnim brojem nula.S 1S | 0T | εT 1T| 0S• Primjer 6.4. Slijedi KSG za regularni jezik koji odgovaraRI-u 00*11*. Ideja konstrukcije je da je to jezikdobiven konkatenacijom dvaju jezika, u prvom sunizovi nula, a u drugom nizovi jedinica.S CDC 0C | 0D 1D | 1TR-II Kontekstno-slobodni jezici 105


14.4.<strong>2011</strong>.6.3 Konstrukcija KSG za zadani jezik (3)• Primjer 6.5. Sad demo napraviti KSG za komplementod prethodnog jezika { 0 i 1 j | i, j > 0 } . Ideja je da seriječi koje nisu iz prethodnog jezika promatraju kaoone koje imaju jednu od tri “manjkavosti”:– loš redoslijed, negdje postoji 1 ispred 0,– samo nule,– samo jedinice.Dakle imamo produkcije:S A | B | C | εA D10D…(loš raspored)D 0D | 1D | ε … (bilo kakav niz nula i jedinica)B 0B | 0… (same nule)C 1C | 1… (same jedinice)…(jedna od tri manjkavosti ili prazno)TR-II Kontekstno-slobodni jezici 116.3 Konstrukcija KSG za zadani jezik (4)• Da bismo provjerili da se gramatika i opis jezikapodudaraju, moramo provjeriti dvije stvari:– Sve što gramatika proizvodi uklapa se u opis -konzistencija,– Sve što se uklapa u opis može se generirati gramatikom –potpunost.• Primjer 6.6. Promatramo sljededu KSG:S 0S1S | 1S0S | εRiječ 011100 nalazi se u jeziku kojeg gramatikagenerira jer na primjer imamo ovakav izvod:S 0S1S 01S 011S0S 0111S0S0S 01110S0S 011100S 011100Što sadrži ovaj jezik?TR-II Kontekstno-slobodni jezici 126


14.4.<strong>2011</strong>.6.3 Konstrukcija KSG za zadani jezik (5)Sigurno je da svaka generirana riječ mora imati jednakbroj 0 i 1 (konzistencija). No da li se svaka riječ sjednakim brojem 0 i 1 može generirati (potpunost)?Da. Evo zašto.Uzmimo riječ s jednakim brojem 0 i 1. Bez obzira kojim znakomta riječ počinje, na nekom mjestu mora se postidi jednakostizmeđu broja 0 i 1. Ako riječ počinje s 0, tada prvo mjestopostizavanja jednakosti mora biti 1. No tada dio riječi izmeđupočetne 0 i tog 1 opet mora postizavati jednakost, a isto vrijedii za dio riječi iza tog 1. Dakle polaznu riječ možemo razbiti na0w1x, gdje su w i x također u jeziku. Na primjer, razbijanje00101101 izgleda ovako:TR-II Kontekstno-slobodni jezici 136.3 Konstrukcija KSG za zadani jezik (6)Ovime smo pokazali potpunost jer zadana produkcijaradi baš ovakvo razbijanje, pa našu riječ možemogenerirati njenom rekurzivnom primjenom.• Evo jednostavne gramatike koja generira engleskerečenice sastavljene od imenica i glagola.S NP VPNP the NVP V NPV sings | eatsN cat | song | canaryOva gramatika degenerirati “the canarysings the song”, notakođer i “the songeats the cat”.TR-II Kontekstno-slobodni jezici 147


14.4.<strong>2011</strong>.6.4 Stabla izvoda i višeznačnost (1)• Zadana je KSG. Za dvije riječi x i y kažemo da x daje yako je mogude od x dodi do y korištenjem produkcija.Pišemo: x * y. Izvod od y je niz koraka primjeneprodukcija kojima od x dolazimo do y.• Najljeviji izvod je takav izvod gdje se u svakom korakuzamjenjuje najljevija varijabla u tekudoj riječi. UPrimjeru 6.6 izvod riječi 011100 bio je najljeviji. Sličnose definira i najdesniji izvod.• Izvod se može nacrtati kao stablo izvoda.– Korijen tog stabla je označen početnom varijablom.– Unutrašnji čvorovi su označeni varijablama.– Listovi su označeni terminalima.– Djeca čvora su redom s lijeva na desno označena onime štose pojavljuje na desnoj strani korištene produkcije.TR-II Kontekstno-slobodni jezici 156.4 Stabla izvoda i višeznačnost (2)• Postoji 1-1 korespondencija između stabla izvoda inajljevijeg izvoda, odnosno stabla izvoda inajdesnijeg izvoda.• Primjer 6.8. Stabloizvoda za izvod riječi011100 iz Primjera6.6 izgleda ovako. Iztog stabla možemoreproducirati izvodako znamo da je onbio najljeviji.TR-II Kontekstno-slobodni jezici 168


14.4.<strong>2011</strong>.6.4 Stabla izvoda i višeznačnost (3)• Gramatika je jednoznačna ako za svaku riječ iz jezikapostoji jedinstveni najljeviji izvod. Ekvivalentno,gramatika je jednoznačna ako za svaku riječ iz jezikapostoji jedinstveno stablo izvoda.• Na primjer, gramatika iz Primjera 6.6 je višeznačna. Tose doduše ne vidi na riječi koju smo gledali. No riječ0101 ima dva stabla izvoda – nađite ih za vježbu!• Gramatike se primjenjuju kod prevođenja programa.Prevodilac (compiler) provjerava je li programski tekstili aritmetički izraz ispravan tako da pronađe njegovostablo izvoda. To stablo dalje omoguduje pisanjeprijevoda u strojnom jeziku. Više o tome bit de uPoglavlju 10.TR-II Kontekstno-slobodni jezici 176.4 Stabla izvoda i višeznačnost (4)• Primjer 6.9. Slijedi gramatika za aritmetičke izrazesastavljene od operacija množenja i zbrajanja i Startnavarijabla je E.E E + T | T … expressionT T F | F … termF (E) | broj … factorOva gramatika generira izrazepoput 1+(3+2)5 ili 1+23.Stablo izvoda za drugi od ovihizraza izgleda ovako. Stablobilježi ispravan prioritetoperacija: množenje prijezbrajanja.TR-II Kontekstno-slobodni jezici 189


14.4.<strong>2011</strong>.6.5 Ponovo o regularnim jezicima (1)• Pitamo se koji je odnos između regularnih i kontekstno-slobodnihjezika. Odgovor nije iznenađujudi.• Teorem 6.1. Bilo koji regularni jezik može se generiratipomoću neke kontekstno-slobodne gramatike.Dakle, svaki regularni jezik ujedno je i kontekstnoslobodnijezik.• Dokaz teorema. Zasniva se na pretvorbi pripadnog RI uKSG. Pretvorba se obavlja na rekurzivan način.– Ako je polazni jezik unija dvaju dijelova, pišemo produkciju S A | B .– Ako je polazni jezik konkatenacija dvaju dijelova, pišemoprodukciju S CD .– Ako je polazni jezik dobiven zvjezdicom nad dijelom koji sezove E, pišemo produkciju S ES | ε .TR-II Kontekstno-slobodni jezici 196.5 Ponovo o regularnim jezicima (2)• Primjer 6.10. Promatramo RI:(11 00)*11 .Pretvaramo ga u KSG. Na najvišoj razini to jekonkatenacija dvaju dijelova. Prvi od ta dva dijela jezvjezdica nad unijom dvaju manjih dijelova. Premakonstrukciji iz dokaza teorema, to daje ovakvugramatiku:S TUU 11T TV | εV 00 | 11TR-II Kontekstno-slobodni jezici 2010


14.4.<strong>2011</strong>.Sadržaj dijela II6. Kontekstno-slobodne gramatike7. Potisni automati8. Gramatike i ekvivalencije9. Svojstva kontekstno-slobodnih jezika10. Primjene kontekstno-slobodnih gramatikaTR-II Kontekstno-slobodni jezici 217.0 Uvod u potisne automate• U ovom poglavlju uvodimo potisni automat – PA.To je model računanja koji je snažniji od KA.• Glavna razlika između PA i KA je u tome što PA imana raspolaganju neku vrst memorije. No riječ je ostogu, dakle o dosta ograničenoj vrsti memorije.• Druga važna značajka PA je da je on po definicijinedeterministički. Za razliku od KA, nedeterminizamkod PA bitno unapređuje snaguračunanja.TR-II Kontekstno-slobodni jezici 2211


14.4.<strong>2011</strong>.7.1 Način rada PA (1)• Stog (stack) omoguduje pohranjivanje informacijapo principu last-in-first-out. Sve što se dodaje nastog, dodaje se na vrh, a sve što se skida sa stogaskida se s vrha. Automat tijekom svog rada “vidi”samo podatak na vrhu toga.• Operacija dodavanja podatka na vrh stoga zove sePUSH, a operacija skidanja podatka s vrha stogazove se POP.• Potisni automat (pushdown automaton) – PA liči naKA po tome što se u svakom trenutku nalazi ujednom od konačno mnogo stanja. No za razliku odKA, PA raspolaže sa stogom neograničene veličine.TR-II Kontekstno-slobodni jezici 237.1 Način rada PA (2)• PA radi tako da čitaulaznu riječ znakpo znak. Nakončitanja jednogznaka, ovisno o– trenutnom stanju,– znaku na vrhustoga,– pročitanom znakuautomat– mijenja stanje i– izvodi operacijuPOP ili PUSH sjednim znakom.TR-II Kontekstno-slobodni jezici 2412


14.4.<strong>2011</strong>.7.1 Način rada PA (3)• Zbog nedeterminizma (kojeg demo uskoro objasniti)dozvoljava se da PA obavi PUSH ili POP uz eventualnupromjenu stanja, bez da je pročitao znak s ulaza (to suzapravo ε-prijelazi).• Posljedica je da je također mogude čitanje znaka, uzeventualnu promjenu stanja, bez diranja stoga. (Toostvarujemo tako da najprije napravimo PUSH bezčitanja znaka, a zatim čitamo znak i napravimo POP).• Dakle, operacije čitanja ulaznog znaka, promjenestanja, odnosno PUSH ili POP možemo promatrati kaozasebne operacije. To olakšava konstrukciju automatakoji rješava određeni problem.• Formalna definicija PA nalazi se u sljededem poglavlju.TR-II Kontekstno-slobodni jezici 257.2 Crtanje PA pomodu dijagrama toka(1)• PA se može prikazati pomodu usmjerenog grafa sačvorovima i lukovima, slično kao KA. Takav prikazobradit demo u sljededem poglavlju.• U ovom poglavlju crtat demo PA pomodu dijagramatoka kakve poznajemo iz programiranja. Takav prikazje obično čitljiviji jer omoguduje razdvajanje operacijačitanja ulaznih znakova od operacija sa stogom.• Na dijagramu toka pojavljuju se sljededi elementi.– Jedinstveno početno stanje.– Jedinstveno stanje zaustavljanja i prihvadanja.– Kudica za čitanje: ona učitava jedan znak s ulaza te ovisno opročitanom znaku inicira prijelaz u novo stanje.TR-II Kontekstno-slobodni jezici 2613


14.4.<strong>2011</strong>.7.2 Crtanje PA pomodu dijagrama toka(2)– Kudica za POP: ona skida jedan znak sa stoga te ovisno oskinutom znaku inicira prijelaz u novo stanje.– Kudica za PUSH: ona dodaje zadani znak na stog i iniciraprijelaz u novo stanje.– Strelice koje povezuju stanja i označavaju prijelaze. Akose prijelaz događa pod uvjetom da je bio pročitan iliskinut određeni znak, tada na strelici piše taj znak. Zaautomatske prijelaze na strelici ništa ne piše.• Dijagram toka ne sadrži odbacujuda stanja.Podrazumijeva se: ako automat uđe u stanje izkojeg prema dijagramu nema legalnog nastavka, onse zaustavlja i odbacuje ulaznu riječ.TR-II Kontekstno-slobodni jezici 277.2 Crtanje PA pomodu dijagrama toka(3)• Često nam je na dijagramu potreban posebni znakΔ. Njime se služimo da označimo kraj ulazne riječi ilida označimo rezultat operacije POP onda kad je stogprazan.• Možemo zamišljati da se Δ automatski dodaje nakraj svake ulazne riječi, te da se automatski stavljana vrh stoga prije početka rada.• U idudih nekoliko primjera ograničavamo se naneprazne ulaze. Prazna riječ na ulazu običnopredstavlja komplikaciju i zahtijeva posebnu brigu.TR-II Kontekstno-slobodni jezici 2814


14.4.<strong>2011</strong>.7.2 Crtanje PA pomodu dijagrama toka(4)• Primjer 7.1. Nacrtat demo PA koji prepoznaje jezik :{ 0 n 1 n | n>0 } . Taj PA koristi stog kao brojač i na tajnačin utvrđuje da li se u ulaznoj riječi pojavljuje istibroj nula i jedinica.Automat najprije čita nule iz ulaza i stavlja ih nastog. Čim se pojavi prva jedinica, automat ulazi unovo stanje. U tom stanju automat skida po jedanznak sa stoga za svaku učitanu jedinicu. Ako setijekom te faze susretne nula na ulazu ili ako stogpostane prazan, automat odmah odbacuje riječ,Automat na kraju prihvada riječ samo ako se stogisprazni u istom trenutku kad se dosegnuo krajulazne riječi.TR-II Kontekstno-slobodni jezici 297.2 Crtanje PA pomodu dijagrama toka(5)Prođite kroz ovaj dijagram za ulazne riječi 000111,0010 i 011.TR-II Kontekstno-slobodni jezici 3015


14.4.<strong>2011</strong>.7.2 Crtanje PA pomodu dijagrama toka(6)• Primjer 7.2. Promatramo riječ koja se sastojiisključivo od lijevih i desnih zagrada. Takva riječzove se balansirana ako je:– tijekom čitanja s lijeva nadesno broj lijevih zagradastalno vedi ili jednak broju desnih zagrada,– ukupan broj lijevih zagrada jednak ukupnom brojudesnih zagrada.Riječ (()())() je balansirana. Riječi (() i )))( nisu. Uispravnim aritmetičkim izrazima zagrade su uvijekbalansirane. Balansirane riječi mogu se opisatigramatikom:S → (S) | SS | εTR-II Kontekstno-slobodni jezici 317.2 Crtanje PA pomodu dijagrama toka(7)Nacrtat demo PA za prepoznavanje balansiranihriječi. Taj PA svaku učitanu ( stavlja na stog, a zasvaku učitanu ) skida odgovarajudu ( sa stoga. Nakonšto je cijeli ulaz pročitan, stog mora biti prazan.TR-II Kontekstno-slobodni jezici 3216


14.4.<strong>2011</strong>.7.3 Nedeterminizam i daljnji primjeri (1)• PA je zapravo po definiciji nedeterministički.Determinističke PA zapravo ne proučavamo.Prethodni primjeri bili su specijalni slučajevi gdjenam nedeterminizam nije trebao pa nije došao doizražaja.• Kažemo da PA prihvada ulaznu riječ ako postoji nizakcija koje vode u prihvadajude stanje. Inače PAodbacuje riječ.• Postoje dva načina prikaza nedeterminizma nadijagramu toka:– dva prijelaza iz istog stanja s istim oznakama,– prijelaz označen s ε, njime se ne troši znak s ulaza.TR-II Kontekstno-slobodni jezici 337.3 Nedeterminizam i daljnji primjeri (2)• Primjer 7.3. Konstruiramo PA koji prepoznajepalindrome parne duljine nad alfabetom {0,1}.Taj PA čita ulazne znakove i stavlja ih redom nastog. U jednom trenutku automatnedeterministički pogađa da je upravo pročitaopolovicu riječi, pa prelazi u fazu skidanja sa stogauz simultanu provjeru da je skinuti znak jednaknovoučitanom znaku.Može se dokazati da je za prepoznavanjepalindroma pomodu PA zaista nužannedeterminizam.TR-II Kontekstno-slobodni jezici 3417


14.4.<strong>2011</strong>.7.3 Nedeterminizam i daljnji primjeri (3)Vidimo daautomat u drugojfazi rada odbacujeriječ ako:– postoji neskladizmeđu učitanog iskinutog znaka,– ulaz je potrošenprije nego što jestog ispražnjen,– stog je ispražnjenprije nego što jeulaz potrošen.TR-II Kontekstno-slobodni jezici 357.3 Nedeterminizam i daljnji primjeri (4)• Primjer 7.4. Konstruiramo PA koji prepoznaje jezik{ 0 m 1 n | n ≤ m ≤ 2n} .U prvoj fazi rada automat učitava nule i stavlja ihna stog. Čim se na ulazu pojavi prva jedinica,automat prelazi u drugu fazu gdje svaku učitanujedinicu uparuje s nulama na stogu. Pritom onnedeterministički odlučuje da li de za jednujedinicu skinuti sa stoga samo jednu ili dvije nule.U slučaju bilo kakve nekompatibilnosti, automatodbacuje riječ.TR-II Kontekstno-slobodni jezici 3618


14.4.<strong>2011</strong>.7.3 Nedeterminizam i daljnji primjeri (5)TR-II Kontekstno-slobodni jezici 377.3 Nedeterminizam i daljnji primjeri (6)• Primjer 7.5. Evo PA koji prepoznaje binarne riječi sjednakim brojem nula i jedinica. Taj PA prati razlikuizmeđu broja do sada učitanih nula i jedinica .Pritom stavlja nule na stog ako su nule trenutno uvedini, ili stavlja jedinice na stog ako su one u vedini.Automat se sastoji od tri dijela.– U lijevom dijelu se nalazimo ako su nule u vedini. Stogsadrži jednu nulu manje od te razlike. Dakle, stog je prazanako je broj nula za jedan vedi od broja jedinica.– U srednjem dijelu se nalazimo ako trenutno ima isti brojučitanih nula i jedinica.– U desnom dijelu se nalazimo ako su jedinice u vedini. Sveostalo je simetrično kao u lijevom dijelu.TR-II Kontekstno-slobodni jezici 3819


14.4.<strong>2011</strong>.7.3 Nedeterminizam i daljnji primjeri (7)TR-II Kontekstno-slobodni jezici 397.4 Veza između PA i KSG• Kao što vjerojatno pogađate, PA su zapravoekvivalentni KSG u smislu da prepoznaju točnoone jezike koji se mogu konstruirati pomodu KSG.• Teorem . Jezik se može generirati pomoću KSGako i samo ako postoji PA koji ga prepoznaje.• Dokaz teorema slijedi u idudem poglavlju.• Prije smo definirali kontekstno-slobodne jezike kaoone jezike koji se mogu konstruirati nekom KSG.Sad vidimo da postoji i druga (ekvivalentna)definicija:Jezik je kontekstno-slobodan ako ga prepoznajeneki PA.TR-II Kontekstno-slobodni jezici 4020


14.4.<strong>2011</strong>.Sadržaj dijela II6. Kontekstno-slobodne gramatike7. Potisni automati8. Gramatike i ekvivalencije9. Svojstva kontekstno-slobodnih jezika10. Primjene kontekstno-slobodnih gramatikaTR-II Kontekstno-slobodni jezici 418.0 Uvod u gramatike i ekvivalencije• U ovom poglavlju najprije demo pokazati da seregularni jezici, osim pomodu RI ili KA, mogu opisatii regularnim gramatikama. Riječ je o specijalnomslučaju KSG.• Zatim demo govoriti o Chomsky-jevoj hijerarhijigramatika. U toj hijerarhiji pojavljuju se i gramatikekoje su opdenitije od KSG.• Na kraju demo skicirati dokaz da KSG i PA imaju isturačunalnu snagu, to jest generiraju odnosnoprepoznaju iste jezike.• Usput demo dodi i do formalne definicije PA teprikaza PA pomodu usmjerenog grafa.TR-II Kontekstno-slobodni jezici 4221


14.4.<strong>2011</strong>.8.1 Regularne gramatike (1)• U Poglavlju 6 vidjeli smo da se svaki regularni jezikmože generirati nekom KSG. No zapravo se možegenerirati i jednom specijalnijom vrstom gramatike.• Regularna gramatika (RG) je takva gramatika gdje jesvaka produkcija oblika A → bC ili A → a. Ovdje su ai b terminali, a A i C varijable.• Očito je svaka RG ujedno i KSG, no obrat ne vrijedi,jer KSG smije imati i opdenitije produkcije, naprimjer A → BC ili A →aBbC, … i slično.• Teorem 8.1. Jezik je regularan ako i samo ako semože generirati regularnom gramatikom.TR-II Kontekstno-slobodni jezici 438.1 Regularne gramatike (2)• Dokaz teorema. Za zadani DKA konstruiramogramatiku takvu da njezin izvod riječi oponaša načinkako DKA obrađuje to riječ. Slijede detalji.– Uvedemo po jednu varijablu za svako stanje iz DKA.Početna varijabla je ona koja odgovara početnom stanju.– Ako u automatu postoji prijelaz iz stanja A u stanje B naosnovu ulaznog znaka x, tada u gramatiku dodajemoprodukciju oblika A → xB.– Ako takav prijelaz završava u prihvadajudem stanju B, tadaosim produkcije A → xB dodajemo i produkciju A → x.Lako se uvjeriti da je tako dobivena gramatikaregularna te da ona generira točno one riječi kojeautomat prihvada. Dokaz u obratnom smjeru dobivase čitanjem gornjeg teksta natraške.TR-II Kontekstno-slobodni jezici 4422


14.4.<strong>2011</strong>.8.1 Regularne gramatike (3)• Primjer 8.1. Konstruirat demoRG za jezik opisan RI-om(11 00)*11 .Evo najprije DKA za taj jezik:Prema postupku iz dokazateorema, dobivamo sljededuregularnu gramatiku:S 0C | 1AA 1B | 1B 0C | 1AC 0STR-II Kontekstno-slobodni jezici 458.2 Chomsky-jeva hijerarhija (1)• Poznati matematičar i logičar Noam Chomskydefinirao je četiri vrste gramatika. One se razlikujupo dozvoljenom obliku za produkcije, a činehijerarhiju jer je svaka iduda specijalni slučajprethodne.1. Neograničene gramatike (unrestricted grammars).Produkcije imaju najopdenitiji oblik u v, gdje su u iv proizvoljni nizovi terminala i/ili varijabli.2. Kontekstno-osjetljive gramatike (context-sensitivegrammars). Produkcije imaju nešto specijalniji oblikxAz xyz, gdje su x, y i z nizovi terminala i/ilivarijabli, a A je varijabla.TR-II Kontekstno-slobodni jezici 4623


14.4.<strong>2011</strong>.8.2 Chomsky-jeva hijerarhija (2)3. Kontekstno-slobodne gramatike – KSG (context-freegrammars). Produkcije imaju još specijalniji oblik A v,gdje je A varijabla, a v niz terminala i/ili varijabli.4. Regularne gramatike – RG (regular grammars).Produkcije imaju najspecijalniji oblik A bC ili A a,gdje su a i b terminali, A i C varijable.• Očito je da vrste gramatika u prethodnom nizugeneriraju sve uže klase jezika.• Produkcija u kontekstno-osjetljivoj gramatici kažeda se neka varijabla A, kad se nađe u određenomkontekstu, može zamijeniti s nizom y.• Produkcija u kontekstno-slobodnoj gramatici kažeda varijabla A uvijek može zamijeniti s nizom v, bezobzira na kontekst.TR-II Kontekstno-slobodni jezici 478.2 Chomsky-jeva hijerarhija (3)• Kontekstno-osjetljive gramatike su priličnozakučaste tvorevine. Evo poznatog primjera.• Primjer 8.2. Sljededa kontekstno-osjetljivagramatika generira riječi oblika 0 n 1 n 2 n , n 1.S 0BS2 | 012B0 0BB1 11Možete li napisati izvod za riječ 000111222 ?S 0BS2 0B0BS22 00BBS22 00BB01222 000BB1222 000B11222 000111222TR-II Kontekstno-slobodni jezici 4824


14.4.<strong>2011</strong>.8.3 Upotrebljive i poništive varijable (1)• Kad imamo posla s gramatikama, tada nastojimomanipulirati s njima da bi ih pojednostavili. U takvimmanipulacijama pokazuje se da je korisno uočititakozvane upotrebljive i poništive varijable.• Varijabla je upotrebljiva (usable) ako ona možeproizvesti neki niz terminala. Varijabla je poništiva(nullable) ako ona može generirati praznu riječ.• Primjer 8.3. U sljededoj gramatici A i B suupotrebljive, no samo B je poništiva.A 0A | 1B | 2CB 0B | εC 1CTR-II Kontekstno-slobodni jezici 498.3 Upotrebljive i poništive varijable (2)• Sljededi algoritam određuje koje varijable u zadanojKSG su poništive.1. Inicijalno postavi za sve varijable da su neponištive.2. Ponavljaj:prođi kroz sve produkcije, ako bilo koja od njihima na desnoj strani ε ili same poništive varijable,tada postavi za varijablu s lijeve strane da jeponištiva;dok god se skup poništivih varijabli povedava.• Postoji i sličan algoritam za određivanje upotrebljivihvarijabli. Oblikujte takav algoritam za vježbu!TR-II Kontekstno-slobodni jezici 5025


14.4.<strong>2011</strong>.8.4 Ekvivalencija KSG i PA• Ved smo spomenuli da su KSG i PA ekvivalentni usmislu da generiraju odnosno prepoznaju iste jezike.• Teorem 8.2. Jezik se može generirati pomoću KSG akoi samo ako postoji PA koji ga prepoznaje.• U ovom poglavlju izložit demo u grubim crtama dokaztog teorema. Dokaz je konstruktivan i sastoji se oddvije konverzije:– Konverzija KSG u PA. Dakle konstruiramo PA koji prepoznajetočno onaj jezik koji generira zadana KSG.– Konverzija PA u KSG. Dakle konstruiramo KSG koja generiratočno onaj jezik koji prepoznaje zadani PA.• Opširni dokaz teorema može se nadi u Knjizi Sipser,Poglavlje 2.2. Obavezno proučiti za pristupni ispit!TR-II Kontekstno-slobodni jezici 518.5 Konverzija KSG u PA (1)• Za zadanu KSG konstruiramo PA koji nedeterminističkipogađa najljeviji izvod zadane riječi pomodu te KSG.• Za ilustraciju, sjetimo se Primjera 6.6. Tamo smopromatrali najljeviji izvod riječi 011100 pomodu KSGS 0S1S | 1S0S | εTaj izvod je izgledao ovako:S 0S1S 01S 011S0S 0111S0S0S 01110S0S 011100S 011100Da bi simulirao ovakav izvod, PA mora u svom stogupamtiti tekudu riječ. U svakom koraku, PA moratransformirati tu riječ tako da najljeviju varijablu unjoj zamijeni u skladu s nedeterministički odabranomprodukcijom.TR-II Kontekstno-slobodni jezici 5226


14.4.<strong>2011</strong>.8.5 Konverzija KSG u PA (2)• Dio tekude riječi lijevo od najljevije varijable zapravone mora biti pohranjen bududi da on ved može bitiuparen s ulaznom riječi. Ostatak tekude riječi spremase na stog tako da najljevija varijabla bude na vrhustoga.• PA radi ovako. On počinje rad sa startnom varijablomna stogu. U svakom koraku on gleda vrh stoga:– Ako je na vrhu varijabla, PA pogađa “pravu” produkciju tezamijeni tu varijablu na stogu s desnom stranom teprodukcije.– Ako je na vrhu terminal, PA ga skida sa stoga, učitava jedanznak iz ulazne riječi te provjerava da li se ta dva znakapodudaraju (ako se ne podudaraju, ta grana umire).TR-II Kontekstno-slobodni jezici 538.5 Konverzija KSG u PA (3)Kad se stog isprazni, PA provjerava da li je ulazna riječpotrošena. Ako je, on je prihvada, inače ta grana umire.• Očito je da PA prihvada riječ iz jezika jer za nju možepogoditi izvod. Također, ako PA prihvati neku riječ, tadaje za nju pronašao izvod, pa riječ mora biti iz jezika.• Za KSG-i iz Primjera 6.6, grana u radu pripadnog PAkojom se prihvada riječ 011100 proizvodi sljededastanja na stogu:TR-II Kontekstno-slobodni jezici 5427


14.4.<strong>2011</strong>.8.6 Formalna definicija PA (1)• U nastavku ovog poglavlja bit de nam spretnije da sevratimo na originalnu definiciju PA. Ona kaže da sečitanje, promjena stanja, te PUSH ili POP odvijajusimultano, a ne svaka za sebe.• Dakle PA radi u nizu koraka. U svakom koraku on– učita jedan znak s ulazapa ovisno o– trenutnom stanju,– znaku na vrhu stoga,– upravo pročitanom znakuon– prelazi u novo stanje i– izvodi jednu operaciju PUSH ili POP s jednim znakom.TR-II Kontekstno-slobodni jezici 558.6 Formalna definicija PA (2)• Tako zamišljeni PA može se opisati sljededomformalnom definicijom. PA je uređena sedmorka(Q, Σ, Γ, q 0 , h a , Δ, δ), gdje je:– Q konačan skup stanja,– Σ konačni ulazni alfabet,– Γ konačni alfabet znakova na stogu,– q 0 je polazno stanje, q 0 je element od Q,– h a je prihvadajude stanje, h a je element od Q,– Δ je posebni znak za prazan stog ili za kraj riječi,– δ je funkcija prijelaza.• Funkcija prijelaza δ preslikava element izQ × (Γ {Δ}) × (Σ {ε,Δ}) u konačni podskup odQ × (Γ {Δ})* .TR-II Kontekstno-slobodni jezici 5628


14.4.<strong>2011</strong>.8.6 Formalna definicija PA (3)• Dakle, δ gleda trenutno stanje, tekudi znak na vrhustoga, te možda i ulazni znak. Ovisno o tome što jevidjela, δ mijenja stanje automata, a znak na vrhustoga mijenja s nizom znakova. Promjena se zbivanedeterministički (više varijanti). Po ovoj formulaciji:– POP je ekvivalentan zamjeni znaka na vrhu stoga s ničim.– PUSH je ekvivalentan zamjeni znaka na vrhu stoga s timistim znakom i još jednim znakom.• Na primjer: δ(q, A, a) = { (p, AB), (r, ε) } znači da ustanju q s A na vrhu stoga u slučaju učitavanja znaka a,automat nedeterministički bira jedno od sljededeg:– Stavlja B na stog i prelazi u stanje p,– Skida znak A s vrha stoga i prelazi u stanje r.TR-II Kontekstno-slobodni jezici 578.7 Alternativni način crtanja PA (1)• Do sada smo PA crtali pomodu dijagrama toka. Nou duhu formalne definicije, PA se može crtati ipomodu usmjerenog grafa, vrlo slično kao KA.• Kod takvog načina crtanja čvorovi predstavljajustanja, a lukovi prijelaze iz stanja u stanje. Nasvakom luku zapisani su uvjeti kad se taj prijelazmože izvršiti (znak na vrhu stoga, ulazni znak), tetakođer operacija PUSH ili POP koja se obavljasimultano s prijelazom.• Prihvadajude stanje označava se dvostrukim rubomčvora, a polazno stanje strelicom koja stiženiotkuda.TR-II Kontekstno-slobodni jezici 5829


14.4.<strong>2011</strong>.8.7 Alternativni način crtanja PA (2)• Primjer 8.4. Promatramo PA iz Primjera 7.1 kojiprepoznaje jezik : { 0 n 1 n | n>0 } . Njega smo uPrimjeru 7.1 nacrtali u obliku dijagrama toka. Nozapravo taj PA ima tri stanja. Neka je F stanje izprvog READ-a s dijagrama toka, G stanje iz drugogREAD-a, a H prihvadajude stanje ACCEPT. Tada se istiPA može nacrtati pomodu sljededeg usmjerenoggrafa. Ovdje na stog stavljamo znak x iz stogovogalfabeta.TR-II Kontekstno-slobodni jezici 598.8 Konverzija PA u KSG (1)• Za zadani PA konstruiramo KSG takvu da jedan korakizvoda pomodu KSG odgovara jednom koraku PA.• Koristimo formalnu definiciju PA i prikaz pomoduusmjerenog grafa. Štoviše, pretpostavljamo da vrijedi:– nakon čitanja ulaza, PA je u prihvadajudem stanju ako i samoako je stog od PA prazan,– svaki korak uključuje PUSH ili POP jednog znaka (promjenestanja bez promjene stoga nisu dozvoljene).Može se pokazati da ove dodatne pretpostavke nesmanjuju opdenitost, to jest svaki PA može se prevestiu takav oblik.• Varijable od KSG bit de sve uređene trojke oblika qAp,gdje su q i p stanja PA, a A je znak iz stogovog alfabeta.TR-II Kontekstno-slobodni jezici 6030


14.4.<strong>2011</strong>.8.8 Konverzija PA u KSG (2)• Cilj je konstruirati KSG takvu da za sve riječi w vrijedi:q A p * wČitanjem ulazne riječi w PA možeprijedi iz stanja q u stanje p, tako daneto učinak operacija nad stogombude skidanje znaka A s vrha.• Ako je q 0 početno stanje a h a prihvadajude stanje odPA, tada je varijabla q 0 Δ h a početna varijabla za KSG.Ona de generirati riječ w ako i samo ako PA čitanjemriječi w može prijedi iz q 0 u h a tako da na kraju stogbude prazan (to baš znači da PA prihvada w).• Svaki prijelaz od PA dalje se pretvara u produkcije.Pretvorba ovisi o tome da li prijelaz sadrži PUSH iliPOP.TR-II Kontekstno-slobodni jezici 618.8 Konverzija PA u KSG (3)– Gledamo najprije prijelaz s POP. Na primjer (p, ε) δ(q, A, a).Dakle u stanju q mogude je napraviti POP A dok čitamo a sulaza i prelazimo u stanje p. Ovdje a može biti znak iz ulaznogalfabeta ili ε. Tada dodajemo ovakvu produkciju:q A p a– Dalje gledamo prijelaz s PUSH. Na primjer (p, AB) δ(q, A, a).Dakle u stanju q s A na vrhu stoga mogude je napraviti PUSH Bdok čitamo a s ulaza i mijenjamo stanje u p. Tada dodajemoskup produkcija oblikaq A r a p B s s A r , i to za sva moguda stanja r i s.– Smisao ovih dviju vrsta produkcija je sljededi. Naš cilj je da stogbude prazan. Da bismo se riješili znaka A na vrhu stoga, jedannačin je da napravimo POP A, a drugi način je da napravimoPUSH B, no onda kasnije moramo postidi skidanje najprije B azatim A sa stoga.TR-II Kontekstno-slobodni jezici 6231


14.4.<strong>2011</strong>.8.8 Konverzija PA u KSG (4)• U nastavku dokaza pokazuje se da svaki izvod u ovakvojKSG zaista odgovara ispravnom računanju u PA. Tupostoji mnogo tehničkih detalja pa demo to preskočiti.• Primjer 8.5. Napravit demo konverziju PA za jezik:{ 0 n 1 n | n>0 } iz Primjera 8.4. Taj PA ima tri stanja F, G, H– vidi dijagram. Slijedi postupak konverzije.– F je početno a H prihvadajude stanje. Početna varijabla za KSGje zato F Δ H .– Na dijagramu vidimo tri POP-a. Zato dodajemo u KSG sljededetri produkcije:F x G 1G x G 1G Δ H εTR-II Kontekstno-slobodni jezici 638.8 Konverzija PA u KSG (5)– Dalje vidimo na dijagramu jednu operaciju PUSH. Ona bise trebala pretvoriti u 18 produkcija oblika:F A r 0 F x s s A rza sve A {x, Δ} i r,s { F, G, H } .– No primijetimo da se na lijevoj strani svih produkcijapojavljuje samo osam trojki. To su šest trojki dobivenihzbog PUSH-a oblika F ? ? i još dvije od POP-a oblika G ? ?.Dakle neke od 18 produkcija za PUSH su beskorisne jerimaju na desnoj strani varijablu s kojom se ne može daljeništa raditi.– Ako izbacimo takve beskorisne produkcije, dobivamosljededu listu:TR-II Kontekstno-slobodni jezici 6432


14.4.<strong>2011</strong>.8.8 Konverzija PA u KSG (6)1. F x F 0 F x F F x F2. F x G 0 F x F F x G3. F x H 0 F x F F x H4. F Δ F 0 F x F F Δ F5. F Δ G 0 F x F F Δ G6. F Δ H 0 F x F F Δ H7. F x G 0 F x G G x G8. F Δ H 0 F x G G Δ H– No sad primijetimo da bilo koja produkcija s F x F nalijevoj strani ima također F x F na desnoj strani. Toznači da je F x F varijabla koje se ne možemo riješiti.Dakle produkcije 1 – 6 su beskorisne.TR-II Kontekstno-slobodni jezici 658.8 Konverzija PA u KSG (6)– Nakon što izbacimo i takve beskorisne produkcije, ostajenam sljededa KSG sa startnom varijablom F Δ H :F x G 1G x G 1G Δ H εF x G 0 F x G G x GF Δ H 0 F x G G Δ H– Preimenovanjem varijabli i daljnjim pojednostavljenjemdobivamo da je zapravo riječ o ovakvoj KSG:S 0AA 0A1 | 1 .Za zadnju verziju KSG lako se vidi da ona zaistagenerira jezik { 0 n 1 n | n>0 } .TR-II Kontekstno-slobodni jezici 6633


14.4.<strong>2011</strong>.Sadržaj dijela II6. Kontekstno-slobodne gramatike7. Potisni automati8. Gramatike i ekvivalencije9. Svojstva kontekstno-slobodnih jezika10. Primjene kontekstno-slobodnih gramatikaTR-II Kontekstno-slobodni jezici 679.0 Zašto proučavamo svojstva KS jezika• Makar su kontekstno-slobodni jezici opdenitiji odregularnih, oni još uvijek imaju ograničenja.Postoje brojni jezici koji nisu kontekstno-slobodni.• U ovom poglavlju proučit demo neka svojstvakontekstno-slobodnih jezika. Ta svojstva su namzanimljiva zato jer ona omoguduju da prepoznamojezike koji nisu kontekstno-slobodni.• Slično kao regularni jezici, i kontekstno-slobodnijezici imaju svoju “lemu o pumpanju”. Ona je glavnialat za pokazivanje da neki jezik nije kontekstnoslobodan.TR-II Kontekstno-slobodni jezici 6834


14.4.<strong>2011</strong>.9.1 Chomsky-jeva normalna forma (1)• Ako kontekstno-slobodni jezik ne sadrži praznuriječ ε, tada se njegova gramatika može dovesti uChomsky-jevu normalnu formu.• Gramatika je u Chomsky-jevoj normalnoj formi akoje svaka njena produkcija oblika A → BC ili A → c,gdje su A, B, C varijable a c znak.• Primjer 9.1. Sljededa gramatika je u Chomsky-jevojnormalnoj formi.S → AS | aA → SA | b• Ako jezik sadrži ε, tada je uobičajeno da se dozvoliS → ε, gdje je S početni simbol. A zatim se zabraniS na desnoj strani bilo koje produkcije.TR-II Kontekstno-slobodni jezici 699.1 Chomsky-jeva normalna forma (2)• Prednost Chomsky-jeve normalne forme je da bilokoji izvod riječi od k znakova ima točno 2k-1 koraka.Dakle možemo utvrditi da li riječ pripada jeziku takoda sistematski pretražimo sve izvode.• Bilo koja KSG može se prebaciti u Chomsky-jevunormalnu formu primjenom sljededeg algoritma.1. Riješi se svih ε – produkcijaPronađi sve poništive varijable (algoritam iz prethodnogpoglavlja). Zatim prođi kroz sve produkcije, za svakuprodukciju ispusti svaki mogudi podskup poništivihvarijabli. Na primjer, ako imamo produkciju P → AxB i A iB su poništive varijable, tada dodajemo produkcijeP → xB | Ax | xTR-II Kontekstno-slobodni jezici 7035


14.4.<strong>2011</strong>.9.1 Chomsky-jeva normalna forma (3)(Ako produkcija ima p poništivih varijabli na desnojstrani, dodaje se najviše 2 p -1 novih produkcija). Nakontoga briši sve produkcije s praznim desnim stranama.2. Riješi se svih jednostrukih produkcija s varijablama.Jednostruka produkcija je ona gdje je na desnoj stranisamo jedan simbol. Ako imamo produkciju A → B, tadaza svaku produkciju oblika B → α dodajemo produkciju A→ α . Ponavljamo dok je potrebno. (Treba paziti da neuvedemo ponovo jednostruku produkciju koju smo vedbrisali).3. Zamijeni svaku produkciju koja je predugačka s kradom.Na primjer, ako imamo produkciju A → BCD, zamijenimoje s A → BE i E → CD . Postupak se iterira za još duljeprodukcije.TR-II Kontekstno-slobodni jezici 719.1 Chomsky-jeva normalna forma (4)4. Pretvori sve terminale u jednostruke produkcije.Za svaki terminal koji se nalazi na desnoj strani nejednostrukeprodukcije uvedi zamjensku varijablu. Naprimjer, produkciju A → bC zamijeni s A → BC i B → b .• Primjer 9.2. Promatramo KSGS → aXbXX → aY | bY | εY → X | cSvodimo je u Chomsky-jevu normalnu formu.Varijabla X je poništiva, pa je također i Y poništiva.Nakon eliminacije ε dobivamo:TR-II Kontekstno-slobodni jezici 7236


14.4.<strong>2011</strong>.9.1 Chomsky-jeva normalna forma (5)S → aXbX | abX | aXb | abX → aY | bY | a | bY → X | c• Nakon eliminacije jednostruke produkcije Y → Xdobivamo:S → aXbX | abX | aXb | abX → aY | bY | a | bY → aY | bY | a | b | cDalje razbijamo predugačke desne strane produkcija.Također zamijenimo a s A, b s B i c sa C svugdje gdje titerminali nisu jednostruki (to jest svugdje gdje se onipojavljuju zajedno s još nekim simbolom). Dobivamo:TR-II Kontekstno-slobodni jezici 739.1 Chomsky-jeva normalna forma (6)S → EF | AF | EB | ABX → AY | BY | a | bY → AY | BY | a | b | cE → AXF → BXA → aB → bC → cEvo, naša KSG je svedena u Chomsky-jevu normalnuformu.TR-II Kontekstno-slobodni jezici 7437


14.4.<strong>2011</strong>.9.2 Lema o pumpanju za k-s jezike (1)• Postoje jezici koji se ne mogu prepoznati nitipomodu KA niti pomodu PA. Jedan takav primjer jejezik sastavljen od riječi oblika 0 n 1 n 2 n . Da bi todokazali, potrebna nam je lema o pumpanju zakontekstno-slobodne jezike, koja kaže da i takvijezici imaju u sebi neku vrstu ponovljivost.• Teorem 9.1 (lema o pumpanju). Neka je Akontekstno-slobodan jezik. Tada postojikonstanta k takva da se svaka riječ z iz A duljinebarem k može razbiti kao z = uvwxy, gdje:– vx je neprazna,– Duljina riječi vwx je k ,– uv i wx i y je u A za sve i 0 .TR-II Kontekstno-slobodni jezici 759.2 Lema o pumpanju za k-s jezike (2)• Dokaz teorema. Pretpostavimo da je KSG za našjezik A ved svedena u Chomsky-jevu normalnuformu. Neka je n broj varijabli u toj KSG. Zadajemok = 2 n +1. Neka je z A riječ duljine k.Promatramo stablo izvoda za z. Zbog posebnogoblika produkcija u Chomsky-jevoj normalnojformi, to stablo izgleda kao binarno. Zbog duljineriječi z, to stablo ima 2 n +1 listova. Slijedi davisina (dubina) stabla mora biti barem n, a to značida u stablu postoji put od korijena do nekog listana kojem ima više čvorova nego varijabli. Dakle natom putu postoji bar jedna varijabla T koja seponavlja (vidi sliku).TR-II Kontekstno-slobodni jezici 7638


14.4.<strong>2011</strong>.9.2 Lema o pumpanju za k-s jezike (3)Listovi pod-stabla ispoddruge pojave T čine riječkoju generira T – nazovimotu riječ w. Listovi podstablaispod prve pojave Tčine riječ koja sadrži w –neka je v podriječ ispred ax podriječ iza w.Listovi cijelog stabla činecijelu riječ z koja sadrživwx – neka je u podriječispred a y podriječ iza vxy.TR-II Kontekstno-slobodni jezici 779.2 Lema o pumpanju za k-s jezike (4)Iz navedenog slijedi T * v i wx i za sve i 0, patakođer S * uv i wx i y za sve i 0. Zaista:S * uTy * uvTxy * uvvTxxy * ….Znači uv i wx i y A što je glavni rezultat leme.Da bi dokazali ogradu da je duljina od vwx kmoramo u stablu za T uzeti “najnižu” varijablu kojase još ponavlja. Naime, kad bi za takvu T vrijedilo|vwx |> k = 2 n +1 tada bi u podstablu od T postojalopravo pod-podstablo s visinom barem n za kojeg biopet vrijedila prethodna priča o ponavljanju. Značipostojalo bi još “niže” ponavljanje varijable što bibila kontradikcija s načinom kako smo odabrali T.TR-II Kontekstno-slobodni jezici 7839


14.4.<strong>2011</strong>.9.2 Lema o pumpanju za k-s jezike (5)Riječ vx ne može biti prazna zato što “viša” pojavavarijable T na slici ima barem dvoje djece (jedno kojeide u smjeru “nižeg” T i još jedno). Dvoje djece morapostojati zbog posebnog oblika produkcija u Chomskyjevojnormalnoj formi, gdje su na desnoj straniprodukcije uvijek po dvije varijable.• Malo drukčiji dokaz leme o pumpanju (koji se nepoziva na Chomsky-jevu normalnu formu) nalazi se uknjizi Sipser, Poglavlje 2.3. Obavezno proučiti!• U nastavku pokazujemo nekoliko primjera korištenjaleme o pumpanju. Za riječ uv i wx i y koristimo kraduoznaku z (i) .TR-II.Kontekstno-slobodni jezici 799.2 Lema o pumpanju za k-s jezike (6)• Primjer 9.3. Pokazujemo da jezik { 0 n 1 n 2 n | n 0 }zaista nije kontekstno- slobodan.Pretpostavimo suprotno. Neka je tada k konstanta izleme o pumpanju. Odaberimo riječ z = 0 k 1 k 2 k .Promatramo rastav za z iz leme oblika z = uvwxy.Bududi da vwx ima duljinu najviše k. riječ vx ne možesadržavati i nule i dvojke. To znači da z (0) = uwy nemože imati jednak broj nula, jedinica i dvojki, pa z (0)nije u jeziku. To je kontradikcija.• Primjer 9.4. Promatramo jezik { x#x | x {0,1}* }.Ovdje je # posebni znak koji se pojavljuje na srediniriječi. Pokazujemo da taj jezik nije kontekstnoslobodan.TR-II.Kontekstno-slobodni jezici 8040


14.4.<strong>2011</strong>.9.2 Lema o pumpanju za k-s jezike (7)Pretpostavimo suprotno. Neka je tada k konstantaiz leme o pumpanju. Odaberimo riječ z = 0 k 1 k #0 k 1 k .Promatramo rastav za z iz leme oblika z = uvwxy.Bududi da je z (0) = uwy u jeziku, z (0) mora imati # usredini, dakle v u rastavu za z se pojavljuje prijesredine od z, a x se pojavljuje iza sredine. No bududida vwx ima duljinu najviše k, v je nužno niz samihjedinica a x niz samih nula. Izlazi da z (0) = uwy nemože biti u jeziku jer je izbacivanjem v i x iz znastala neravnoteža u broju nula i jedinica prije iposlije sredine. Opet smo dobili kontradikciju.TR-II.Kontekstno-slobodni jezici 819.2 Lema o pumpanju za k-s jezike (8)• Primjer 9.5. Primijetimo da nedemo dodi ukontradikciju s lemom o pumpanju akopromatramo jezik { 0 n 1 n | n0 } za kojeg znamoda je kontekstno-slobodan.Zaista, ako uzmemo k 2 i riječ z = 0 k 1 k , tadamožemo napraviti rastav z = uvwxy , gdje je vzadnja nula u z, x je prva jedinica, a w je prazan.Takav izbor zadovoljava sve uvjete iz leme jer jevx neprazan, duljina od vwx je k, a očito je z (i) =uv i wx i y opet u jeziku.TR-II.Kontekstno-slobodni jezici 8241


14.4.<strong>2011</strong>.Sadržaj dijela II6. Kontekstno-slobodne gramatike7. Potisni automati8. Gramatike i ekvivalencije9. Svojstva kontekstno-slobodnih jezika10. Primjene kontekstno-slobodnih gramatikaTR-II Kontekstno-slobodni jezici 8310.0 Uvod u primjene KSG• KSG i PA koriste se za prevođenje ili interpretiranjeračunalnih programa odnosno njihovih dijelova.• Na primjer, sam programski jezik opisan je nekomgramatikom – uzmimo da je to KSG. Provjerasintaktičke ispravnosti programa svodi se na traženjeizvoda teksta programa iz početne varijable tegramatike primjenom njezinih produkcija.• Kao drugi primjer, spomenimo aritmetičke izraze kojise mogu opisati pomodu KSG te izvrednjavatipomodu PA odnosno stoga.• U ovom poglavlju ilustrirat demo primjene KSG i PAslužedi se spomenutim primjerima. Nedemo ulaziti udetalje jer bi nas to predaleko odvelo.TR-II Kontekstno-slobodni jezici 8442


14.4.<strong>2011</strong>.10.1 Prevodioci i parsiranje• Prevodilac programskog jezika počinje prevođenjetako da za zadanu riječ (izvorni tekst programa)sagradi stablo izvoda.Dakle prevodilac određuje kojim redom trebaprimijeniti produkcije iz gramatike da bi se početnavarijabla S iz gramatike pretvorila u zadanu riječ.Ta faza prevođenja naziva se parsiranje (parsing).• Postoje dva pristupa parsiranju.– Top-down: od S do zadane riječi.Zahtijeva nedeterminizam ili mukotrpni backtracking.– Bottom-up: od zadane riječi natraške do S.To je praktičniji pristup.TR-II Kontekstno-slobodni jezici 8510.2 Bottom-up parsiranje (1)• Kod bottom-up parsiranja čitamo ulazne znakovesve dok ne skupimo grupu znakova koji odgovarajudesnoj strani neke produkcije. Nakon togazamijenimo pročitane znakove s lijevom stranomprodukcije. Dobiva se najdesniji izvod.• Postupak parsiranja sastoji se od uzastopnih koraka.Postoje dvije vrste koraka.– Shift. Stavi idudi učitani znak na stog.– Reduce. Pretvori niz znakova pri vrhu stoga u jednuvarijablu služedi se pogodnom redukcijom. Ta varijablaostaje na vrhu stoga.• Postupak završava onda kad je ulazna riječpotrošena a na stogu je samo početna varijabla.TR-II Kontekstno-slobodni jezici 8643


14.4.<strong>2011</strong>.10.2 Bottom-up parsiranje (2)• Primjer 10.1. Sjetimo se KSG za aritmetičke izraze izPrimjera 6.9. Uz blagu modifikaciju, ona izgledaovako:E E + T | TT T F | FF (E) | nPromatramo parsiranje izraza(n + n) n .Pretpostavljamo da parser na neki način “zna” štotreba raditi u svakom koraku. Dobivamo sljededi nizkoraka.TR-II Kontekstno-slobodni jezici 8710.2 Bottom-up parsiranje (3)VrstaoperacijeStog Nepročitani Komentarulaz(n+n)nShift ( n+n)nShift (n +n)nReduce (F +n) nReduce (T +n)nReduce (E +n)nShift (E+ n) nShift (E+n )nReduce (E+F )nReduce (E+T )nReduce (E )n Ne reduciramo T u EShift (E) nReduce F nReduce T nShift T n Ne reduciramo T u EShift TnReduce T FReduce T Ne reduciramo F u TReduce E• Osnovni problem skojim se susredemo kodbottom-up parsiranja je:odrediti koju vrstukoraka (shift ili reduce)treba odabrati u kojemtrenutku te, u slučajureduce, koju produkcijutreba odabrati. Ovajproblem nije lako riješiti(osim ako ne uvedemonedeterminizam).TR-II Kontekstno-slobodni jezici 8844


14.4.<strong>2011</strong>.10.4 LR gramatike, parsiranje s tablicom• Donald Knuth je odredio koji se jezici mogu prepoznatipomodu determinističkih PA. Ti jezici opisani sutakozvanim LR gramatikama.• LR(1) gramatika može se opisati kao KSG gdje jegledanje samo jednog znaka ulazne riječi unaprijeddovoljno da se odredi što kada treba raditi.• LR(1) parser implementira se kao deterministički PAkoji se osim svojim vlastitim stanjima i stogom služi itakozvanom LR(1) tablicom.• Za svaku kombinaciju ulaznog znaka,trenutnog stanja istanja na stogu LR(1) tablica određuje koju operacijuLR(1) parser treba poduzeti i u koje novo stanje trebaTR-II prijedi.Kontekstno-slobodni jezici 8910.3 Garantirano parsiranje (1)• Sad demo izložiti algoritam parsiranja koji radi za bilokoju KSG. Rezultat je samo od teorijskog značaja,naime dobiveni parser je prespor za stvarnu upotrebu.• Algoritam se po autorima Cocke, Younger i Kasaminaziva algoritam CYK. Zapravo je riječ o primjenimetode dinamičkog programiranja.• Algoritam pretpostavlja da je naša KSG zadana uChomsky-jevoj normalnoj formi.• Neka je w ulazna riječ duljine n za koju želimoustanoviti da li je KSG generira. U skladu s principomdinamičkog programiranja, rješavamo opdenitijiproblem. Gledamo sve pod-riječi od w i pitamo se zasvaku od njih koje varijable iz KSG nju generiraju.TR-II Kontekstno-slobodni jezici 9045


14.4.<strong>2011</strong>.10.3 Garantirano parsiranje (2)• Neka je w = w 1 w 2 …w n , gdje su w i znakovi. Za 1ij noznačimo s w ij podriječ w i w i+1 …w j . Algoritam degenerirati tablicu gdje u (i,j)-tom polju piše koje svevarijable iz KSG mogu generirati w ij .• Potrebno je pronadi relacije koje povezuju polja utablici i omoguduju da iz ved izračunatih poljadobijemo nova polja. Te relacije oslanjaju se nasvojstva Chomsky-jeve normalne forme.• Pretpostavimo da je n2 i da početna varijabla Sizvodi w. Tada prvi korak izvoda mora biti produkcijaoblika S AB koja S zamijeni s točno dvije varijableA i B. Znači da se w može podijeliti u dva dijela odkojih je prvi generiran s A a drugi s B.TR-II Kontekstno-slobodni jezici 9110.3 Garantirano parsiranje (3)• Dakle određivanje da li S * w svodi se na ispitivanjeda li postoji broj k i produkcija S AB takva daA * w 1k i B * w k+1,n . Ako smo ved riješiliprimjerke problema za sve w 1k i w k+1,n , modi demoriješiti i primjerak za w. Isto razmišljanje omogudujenam da riješimo i primjerke problema za w 1k i w k+1,n .• Opdenito, određujemo da li za neku varijablu A ibrojeve i, j vrijedi A * w ij . Promatramo sveprodukcije iz A. Za svaku od tih produkcija, na primjerA EF, isprobamo sve k, 1 k i-1. Za svaki kpitamo se da li E * w ik i F * w k+1,j - odgovori vedpišu u tablici. Nakon što sve ovo isprobamo, odgovorza A * w ij također upišemo u tablicu.TR-II Kontekstno-slobodni jezici 9246


14.4.<strong>2011</strong>.10.3 Garantirano parsiranje (4)• Algoritam CYK može se ovako rezimirati.1. Počinjemo tako da za svaki i i za svaku varijablu Austanovimo da li A * w ii . U ovom slučaju podriječ w ii jejedan znak tako da treba gledati samo jednostrukeprodukcije prema terminalima.2. Dalje za svaki i i za svaku varijablu A gledamo da li A *w i,i+1 . Služimo se prethodnim rekurzivnim receptom.3. Ponavljamo sličan postupak za sve w i,i+2 , zatim za sve w i,i+3 ,i tako dalje. U svakoj fazi u potpunosti odredimo skupovevarijabli koje izvode podriječi određene duljine, a zatimpovedamo duljinu.4. U zadnjem koraku određujemo varijable za podriječiduljine n. Zapravo postoji samo jedna takva podriječ, to jesama riječ w. To nam omoguduje da odgovorimo napolazno pitanje da li S * w .TR-II Kontekstno-slobodni jezici 9310.3 Garantirano parsiranje (5)• U svakoj fazi algoritma CYK, dobivena rješenja zapodriječi određene duljine upisuju se u tablicu. Taupisana rješenja koristit de se u idudim fazama.• Vidimo da svaka faza popunjava jednu dijagonalutablice. Popunjava se samo gornji trokut, od glavnedijagonale redom sve do gornjeg desnog ugla.• Primjer 10.2. Promatramo sljededu KSG u Chomskyjevojnormalnoj formi s početnom varijablom S.S ST | TU | bT SU | aU SS | bZanima nas da li ta KSG generira riječ w = aababb .Algoritam CYK daje sljededu tablicu.TR-II Kontekstno-slobodni jezici 9447


14.4.<strong>2011</strong>.10.3 Garantirano parsiranje (6)ij1 2 3 4 5 61 T . . . S S, T, U2 T S S S, T, U S, T, U3 S, U S T, U S, T, U4 T S S, T, U5 S, U T, U6 S, UŠto znači ova tablica?Na primjer, polje napoziciji (3,5) kaže dabilo koja od varijabli Ti U generira w 35 = bab.Zaista, T je tu zato jerT SU, a S * w 34 iU * w 55 .Bududi da element u gornjem desnom uglu sadrži S,slijedi da je početna riječ w u jeziku.S malo truda, iz tablice je mogude reproducirati izvodza w. Zapravo bi za svaki element u tablici trebalopamtiti na koji način je on bio izračunat.TR-II Kontekstno-slobodni jezici 9510.5 Izvrednjavanje aritmetičkog izr (1)• Promatramo opet aritmetički izraz opisan KSG-om izPrimjera 10.1. Pitamo se kako izvredniti taj izraz ako suzadane vrijednosti svih podataka u njemu.• Jedan efikasan način izvrednjavanja izgleda ovako.– Parsiranjem izraza dobivamo njegovo stablo izvoda.– Postorder obilaskom stabla izvoda dobivamo takozvaniobratni poljski oblik izraza.– Taj oblik može se izravno upotrijebiti za izvrednjavanje izrazapomodu stoga.• U nastavku uzimamo da je MUL funkcija koja dvijevrijednosti na vrhu stoga zamijeni s njihovimumnoškom. Također uzimamo da je ADD funkcija kojadvije vrijednosti na vrhu stoga zamijeni s njihovimzbrojem.TR-II Kontekstno-slobodni jezici 9648


14.4.<strong>2011</strong>.10.5 Izvrednjavanje aritmetičkog izr (2)• Primjer 10.3. Promatramo aritmetički izraz:1 + 5 (3 +2) + 4Njegovim parsiranjem dobiva se ovakvostablo izvoda:Postorder obilaskom stabla izvodadobivamo obratni poljski oblik izraza:1 5 3 2 + + 4 +Izvrednjavanje izraza pomodu stoga svodise na sljededi kod koji je dobiven izravnomkonverzijom obratnog poljskog oblika uračunske operacije:PUSH(1) PUSH(5) PUSH(3) PUSH(2) ADDMUL ADD PUSH(4) ADDTR-II Kontekstno-slobodni jezici 9749

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!