Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

Samankaltaiset tiedostot
2. Yhteydettömät kielet

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

Yhteydettömän kieliopin jäsennysongelma

T Syksy 2002 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut

Rekursiivinen Derives on periaatteessa aivan toimiva algoritmi, mutta erittäin tehoton. Jos tarkastellaan esim. kieliopinpätkää

Ei-yhteydettömät kielet [Sipser luku 2.3]

Testaa: Vertaa pinon merkkijono syötteeseen merkki kerrallaan. Jos löytyy ero, hylkää. Jos pino tyhjenee samaan aikaan, kun syöte loppuu, niin

Yhteydettömät kieliopit [Sipser luku 2.1]

jäsentäminen TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 26. marraskuuta 2015 TIETOTEKNIIKAN LAITOS

T Syksy 2006 Tietojenkäsittelyteorian perusteet T Harjoitus 7 Demonstraatiotehtävien ratkaisut

uv n, v 1, ja uv i w A kaikilla

S BAB ABA A aas bba B bbs c

Olkoon G = (V,Σ,P,S) yhteydetön kielioppi. Välike A V Σ on tyhjentyvä, jos A. NULL := {A V Σ A ε on G:n produktio};

Chomskyn hierarkia ja yhteysherkät kieliopit

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012

Esimerkki 2.28: Tarkastellaan edellisen sivun ehdot (1) (3) toteuttavaa pinoautomaattia, jossa päätemerkit ovat a, b ja c ja pinoaakkoset d, e ja $:

11.4. Context-free kielet 1 / 17

jäsennyksestä TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 29. syyskuuta 2016 TIETOTEKNIIKAN LAITOS Kontekstittomien kielioppien

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 10. kesäkuuta 2013

Rajoittamattomat kieliopit

Säännöllisten kielten sulkeumaominaisuudet

ICS-C2000 Tietojenkäsittelyteoria

ICS-C2000 Tietojenkäsittelyteoria. Tähän mennessä: säännölliset kielet. Säännöllisten kielten pumppauslemma M :=

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 29. huhtikuuta 2011

Rajoittamattomat kieliopit (Unrestricted Grammars)

ongelma A voidaan ratkaista ongelman B avulla, joten jossain mielessä

Pinoautomaatit. Pois kontekstittomuudesta

(0 1) 010(0 1) Koska kieli on yksinkertainen, muodostetaan sen tunnistava epädeterministinen q 0 q 1 q 2 q3

Tarkastelemme ensin konkreettista esimerkkiä ja johdamme sitten yleisen säännön, joilla voidaan tietyissä tapauksissa todeta kielen ei-säännöllisyys.

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 9. lokakuuta 2016

JOHDATUS TEKOÄLYYN TEEMU ROOS

Äärellisten automaattien ja säännöllisten kielten ekvivalenssi

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. joulukuuta 2015

Algoritmin määritelmä [Sipser luku 3.3]

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 6. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS. Pinoautomaatit.

Osoitamme, että jotkut kielet eivät ole säännöllisiä eli niitä ei voi tunnistaa äärellisellä automaatilla.

Esimerkki 47. Kieli {a i b j c k : i = j tai j = k} on luonnostaan moniselitteinen.

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. lokakuuta 2016

4. Tehtävässä halutaan todistaa seuraava ongelma ratkeamattomaksi:

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

follow(a) first(α j ) x

Lisää pysähtymisaiheisia ongelmia

Laskennan mallit (syksy 2008) 2. kurssikoe , ratkaisuja

Kontekstittomien kielten jäsentäminen Täydentäviä muistiinpanoja TIEA241 Automaatit ja kieliopit, syksy 2016

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Täydentäviä muistiinpanoja kontekstittomien kielioppien jäsentämisestä

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015

5.3 Ratkeavia ongelmia

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

Muodolliset kieliopit

13. Loogiset operaatiot 13.1

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 12. marraskuuta 2015

Algoritmit 2. Demot Timo Männikkö

ICS-C2000 Tietojenkäsittelyteoria

Täydentäviä muistiinpanoja jäsennysalgoritmeista

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

8. Kieliopit ja kielet

Jos sekaannuksen vaaraa ei ole, samastamme säännöllisen lausekkeen ja sen esittämän kielen (eli kirjoitamme R vaikka tarkoitammekin L(R)).

T Tietojenkäsittelyteorian seminaari

6.5 Turingin koneiden pysähtymisongelma Lause 6.9 Kieli. H = {c M w M pysähtyy syötteellä w}

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Vaihtoehtoinen tapa määritellä funktioita f : N R on

811120P Diskreetit rakenteet

Algebra I, harjoitus 5,

Pysähtymisongelman ratkeavuus [Sipser luku 4.2]

Rekursiiviset palautukset [HMU 9.3.1]

Rekursio. Funktio f : N R määritellään yleensä antamalla lauseke funktion arvolle f (n). Vaihtoehtoinen tapa määritellä funktioita f : N R on

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

δ : (Q {q acc, q rej }) (Γ k {, }) Q (Γ k {, }) {L, R}.

Tehtävä 1. Arvioi mitkä seuraavista väitteistä pitävät paikkansa. Vihje: voit aloittaa kokeilemalla sopivia lukuarvoja.

2 Sanoja järjestävän funktion ohjelmoiminen

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 6. lokakuuta 2016 TIETOTEKNIIKAN LAITOS

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Lineaariset yhtälöryhmät ja matriisit

Laskennan mallit (syksy 2010) Harjoitus 4, ratkaisuja

Jäsennysalgoritmeja. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 29. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Jäsennysalgoritmeja

1 Lukujen jaollisuudesta

Formalisoimme nyt edellä kuvatun laskennan.

1. Universaaleja laskennan malleja

Tarkennamme geneeristä painamiskorotusalgoritmia

Säännölliset kielet. Sisällys. Säännölliset kielet. Säännölliset operaattorit. Säännölliset kielet

kaikki kielet tunnistettavat A TM HALT TM { a n } { a n b n } { a n b n c n } TOTAL TM EQ TM

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.

Kielenä ilmaisten Hilbertin kymmenes ongelma on D = { p p on polynomi, jolla on kokonaislukujuuri }

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 12 (opetusmoniste, kappaleet )

Ennakkotehtävän ratkaisu

Matriisipotenssi. Koska matriisikertolasku on liitännäinen (sulkuja ei tarvita; ks. lause 2), voidaan asettaa seuraava määritelmä: ja A 0 = I n.

Algoritmit 1. Demot Timo Männikkö

13. Loogiset operaatiot 13.1

Laskennan teoria (kevät 2006) Harjoitus 3, ratkaisuja

Kertausta: avaruuden R n vektoreiden pistetulo

8. Kieliopit ja kielet 1 / 22

Lineaarialgebra ja matriisilaskenta I

Transkriptio:

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: S A S B Samaan jäsennyspuuhun päästään myös johdolla S AB Ab ab: S A S B Yhteen jäsennyspuuhun liittyy aina tasan yksi vasen johto (sekä yleensä muita, ei-vasempia johtoja). Kielioppi on moniselitteinen (ambiguous), jos siinä jollain lauseella on useampi kuin yksi vasemmanpuoleinen johto. Muuten kielioppi on yksiselitteinen. Toisin sanottuna kielioppi on moniselitteinen, jos ja vain jos siinä jollain lauseella on ainakin kaksi jäsennyspuuta. Tähänastiset esimerkkimme ovat kaikki olleet yksiselitteisiä. A a A S S B B b A a A a S S B b B b 153

Esimerkki 2.9: Muuttujien x, y ja z aritmeettiset lausekkeet voidaan kuvata kieliopilla lauseke lauseke + lauseke lauseke lauseke ( lauseke ) x y z. Kielioppi on moniselitteinen, sillä lauseella x + y z on kaksi vasenta johtoa ja jäsennyspuuta: lauseke lauseke + lauseke x + lauseke x + lauseke lauseke x + y lauseke x + y z lauseke lauseke lauseke lauseke + lauseke lauseke x + lauseke lauseke x + y lauseke x + y z. lauseke lauseke lauseke lauseke lauseke x + y z lauseke lauseke lauseke lauseke lauseke x + y z 154

Sama kieli voidaan tuottaa seuraavalla yksiselitteisellä kieliopilla lauseke lauseke + termi termi termi termi tekijä tekijä tekijä ( lauseke ) x y z. Lauseen x + y z yksikäsitteiset vasen johto ja jäsennyspuu ovat lauseke lauseke + termi termi + termi tekijä + termi x + termi x + termi tekijä x + tekijä tekijä x + y tekijä x + y z lauseke lauseke termi termi termi tekijä tekijä tekijä x + y z 155

Aritmeettisen lausekkeen jäsennyspuun avulla voidaan helposti laskea lausekkeen arvo, kun muuttujien arvot tunnetaan. Yleisemmin kääntäjä voi jäsennyspuun avulla generoida koodia, joka evaluoi lausekkeen. Edellisen sivun kielioppi noudattaa koulusta tuttua presedenssisääntöä, jonka mukaan kertolaskut lasketaan ennen yhteenlaskuja. Sen sijaan aiempi moniselitteinen kielioppi voi johtaa myös väärään laskujärjestykseen. Todetaan vielä, että joillekin yhteydettömille kielille ei ole olemassa yksiselitteistä kielioppia. Esimerkki tällaisesta luonnostaan moniselitteisestä (inherently ambiguous) kielestä on { a i b j c k i = j tai j = k } (todistus sivuutetaan). 156

Chomskyn normaalimuoto [Sipser s. 108 111] Kielioppeja algoritmisesti käsiteltäessä on hyvä, jos ne ovat siistejä. Esimerkki 2.10: Tarkastellaan kielioppia S AB A a B CC C DD D EE E F F F ε Kieliopin tuottama kieli on yksinkertaisesti { a }. Kaikki johdot ovat kuitenkin varsin pitkiä, mikä on erilaisten algoritmien kannalta ongelmallista. Esitämme seuraavaksi, miten yhteydettömälle kieliopille voidaan löytää Chomskyn normaalimuoto, jossa erityisesti merkkijonon w johdon pituus on aina 2 w 1. Chomskyn normaalimuoto tarjoaa hyviä esimerkkejä yhteydettömien kielioppien yksinkertaistamisessa käytettävistä päättelyistä ja algoritmeista. 157

Määritelmä 2.11: Yhteydetön kielioppi (V, Σ, R, S) on Chomskyn normaalimuodossa, jos joukon R jokainen sääntö on jotain seuraavista muodoista: 1. A BC, missä A, B, C V ja B S ja C S, 2. A a, missä A V ja a Σ, tai 3. S ε. Normaalimuodosta seuraa erityisesti, että jos S w ja w = n > 0, niin johdon pituus on tasan 2n 1. Lause 2.12: [Sipser Thm. 2.9] Mikä tahansa yhteydetön kieli voidaan tuottaa Chomskyn normaalimuodossa olevalla yhteydettömällä kieliopilla. Esitämme, miten kielioppi muunnetaan Chomskyn normaalimuotoon kolmessa vaiheessa: 1. lisätään uusi lähtösymboli S 0 ja poistetaan säännöt A ε, missä A S 0 2. poistetaan säännöt A B, missä A, B V 3. pilkotaan liian pitkät säännöt paloiksi. 158

Lemma 2.13: Mikä tahansa yhteydetön kieli voidaan tuottaa yhteydettömällä kieliopilla, jossa 1. lähtösymboli ei esiinny minkään säännön oikealla puolella ja 2. kieliopissa ei ole sääntöä A ε millään A, joka ei ole lähtösymboli. Todistus: Olkoon G = (V, Σ, R, S) yhteydetön kielioppi. Muodostamme ehdot toteuttavan kieliopin G = (V, Σ, R, S 0 ), jolla L(G ) = L(G). Otetaan käyttöön uusi lähtösymboli S 0 V ja asetetaan V = V { S 0 }. Laitetaan joukkoon R sääntö S 0 S. Jos ε L(G), lisätään myös sääntö S 0 ε. Muuttujalle S 0 ei tule muita sääntöjä, eikä se tule minkään säännön oikealle puolelle. 159

Määritellään nyt nollautuvien muuttujien joukko { } Null = A V A ε. Joukko Null voidaan helposti laskea iteratiivisella algoritmilla. EtsiNollautuvat(V, Σ, R, S) Null := VanhaNull := Null for A V do if joukossa R on sääntö A ε then Null := Null { A } while Null VanhaNull toista kunnes Null ei muutu do VanhaNull := Null for A V do if joukossa R on sääntö A B 1... B k missä B i Null kaikilla i then Null := Null { A } return Null 160

Perusidea on, että jos B Null, niin sääntö A ubv korvataan säännöillä A uv ubv. Tällöin jos alkuperäisessä kieliopissa on ε-sääntöä käyttävä johto A ubv uv niin uudessa kieliopissa voidaan jättää ubv väliin ja johtaa suoraan A uv. Vastaavasti jos B, C Null, niin sääntö A ubvcw korvataan säännöillä A uvw uvcw ubvw ubvcw, jne. Tämän jälkeen ε-säännöt ovat jääneet turhiksi ja voidaan poistaa. 161

Käydään siis läpi kaikki joukon R säännöt A w. Kirjoitetaan w muotoon w = u 0 A 1 u 1 A 2 u 2... A k u k, missä kukin A i on nollautuva muuttuja ja toisaalta mikään u i ei sisällä nollautuvia muuttujia. Jos w ei sisällä nollautuvia muuttujia, niin k = 0. Lisätään nyt joukkoon R kaikki 2 k sääntöä A u 0 x 1 u 1 x 2 u 2... x k u k, missä x i on joko A i tai ε, paitsi ei sääntöä A ε mikäli se esiintyy. On helppo nähdä, että saatu kielioppi toteuttaa vaaditut ehdot. 162

Esimerkki 2.14: Sovelletaan konstruktiota kielioppiin S BSB A A aa aa B bb ε. Nyt Null = { B }. Siis säänntö S BSB korvataan säännöillä ja sääntö B bb säännöillä S S SB BS BSB, B b bb. Muut säännöt paitsi lukuunottamatta ε-sääntöä jäävät ennalleen. Lisätään vielä alkusymboli ja sääntö S 0 S, muttei sääntöä S 0 ε, koska S ε. Saadaan kielioppi S 0 S S S SB BS BSB A A aa aa B b bb. 163

Seuraava vaihe on poistaa yksikkösäännöt eli säännöt muotoa A B, missä A, B V. Lemma 2.15: Mikä tahansä yhteydetön kieli voidaan tuottaa yhteydettömällä kieliopilla, jossa ei ole yksikkösääntöjä. Todistus: Kaikilla A V olkoon Unit(A) niiden muuttujien joukko, jotka voidaan johtaa A:sta pelkillä yksikkösäännöillä, A itse mukaanlukien. Joukot Unit(A) on helppo laskea iteratiivisesti. Kieliopin muuttujat ja päätesymbolit pidetään ennallaan, samoin lähtösymboli. Sääntöihin laitetaan A w kaikilla A V ja w (V Σ), joilla 1. B Unit(A), 2. B w on sääntö alkuperäisessä kieliopissa ja 3. w ei ole muuttujasymboli. 164

Ehtojen 1 ja 2 perusteella on selvää, että uusien sääntöjen joukkoon ei tule mitään, mitä siellä ei saisi olla. Jos B Unit(A) ja B w, niin A w, joten A w voidaan lisätä. Ainoa ongelma näyttäisi olevan, että ehdon 3 nojalla pudotetaan pois muotoa B C olevat säännöt. Kuitenkin jos B Unit(A) ja B C on sääntö, niin C Unit(A), joten vuorostaan muotoa C w olevat säännöt tuovat mukaan uudet säännöt A w. Siis uudet säännöt tuottavat samat merkkijonot kuin vanhat. 165

Esimerkki 2.16: Jatketaan edellisen esimerkin lopputuloksesta S 0 S S S SB BS BSB A A aa aa B b bb. Nyt Unit(S 0 ) = { S 0, S, A }, Unit(S) = { S, A }, ja Unit(X) = { X } muuten. Siis muuttujalle S 0 tulee omien alkuperäisten lisäksi kaikki muuttujien S ja A ei-yksikkösäännöt: Samoin S:lle lisätään A:n säännöt: S 0 SB BS BSB aa aa. S SB BS BSB aa aa. Ottamalla vielä kaikki vanhat ei-yksikkösäännöt saadaan kielioppi S 0 SB BS BSB aa aa S SB BS BSB aa aa A aa aa B b bb. 166

Lauseen 2.12 todistus: Olkoon G = (V, Σ, R, S) yhteydetön kielioppi. Muodostamme Chomskyn normaalimuodossa olevan kieliopin, joka tuottaa saman kielen. Lemmojen 2.13 ja 2.15 nojalla voimme olettaa kieliopista G, että 1. S ei esiinny minkään säännön oikealla puolella, 2. A ε R kaikilla A V { S }, ja 3. yksikkösääntöjä ei ole. Siis sääntö A u 1... u k, missä u i V Σ, voi rikkoa normaalimuotoa kahdella tavalla: 1. joko k = 2 ja jokin u i on päätesymboli tai 2. k 3. 167

Otetaan jokaista päätesymbolia a Σ kohti käyttöön uusi muuttuja X a ja lisätään sääntö X a a. Kaikissa normaalimuotoa rikkovissa säännöissä, joissa esiintyy a, korvataan se X a :lla. Sääntö A u 1... u k, missä k 3, korvataan k 1 uudella säännöllä A u 1 A 2 A 2 u 2 A 3... A k 2 u k 2 A k 1 A k 1 u k 1 u k missä A 2,..., A k 1 ovat uusia muuttujia. 168

Esimerkki 2.17: Jatketaan edellistä esimerkkiä Kielioppi tulee muotoon S 0 SB BS BSB aa aa S SB BS BSB aa aa A aa aa B b bb. S 0 SB BS BA 1 X a A X a X a A 1 SB S SB BS BA 2 X a A X a X a A 2 SB A X a A X a X a B b X b B X a a X b b. 169

Yhteydettömän kieliopin jäsennysongelma Yhteydettömän kieliopin jäsennysongelmalla tarkoitetaan laskentaongelmaa Annettu: Kysymys: yhteydetön kielioppi G, merkkijono w päteekö w L(G). Myönteisessä tapauksessa usein halutaan myös w:n johto tai jäsennyspuu. Ongelma voidaan periaatteessa ratkaista seuraavasti: 1. Muodosta Chomskyn normaalimuodossa oleva G, jolla L(G ) = L(G). 2. Jos w = ε ja G sisältää säännön S ε, vastaa kyllä. 3. Muuten luettele kaikki pituudeltaan 2 w 1 olevat kieliopin G johdot. Jos jokin näistä on johto merkkijonolle w, vastaa kyllä; muuten vastaa ei. Ratkaisu perustuu havaintoon, että Chomskyn normaalimuodossa w:n johdon pituus on aina 2 w 1, kun w ε. Koska pituutta 2 w 1 olevia johtoja voi olla paljon, menetelmä on käytännössä liian tehoton. 170

Tehokkaampi vaihtoehto on CYK-algoritmi (Cocke, Younger, Kasami), joka ratkaisee ongelman ajassa O( w 3 ). Myönteisessä tapauksessa algoritmi antaa myös jäsennyspuun. Käytännössä myös O( w 3 ) on kuitenkin usein liian hidasta. Yksi tärkeimmistä jäsennysongelman sovelluksista on ohjelman jäsennys ohjelmointikielen kääntäjässä. Niissä käytetään tehokkaampia menetelmiä, jotka edellyttävät, että kielioppi on jossain rajoitetussa muodossa (tärkeimmät LL(k) ja LR(k)). Emme tällä kurssilla puutu näihin menetelmiin. Esitämme tässä CYK-algoritmin lyhyesti (huom. kurssikirjassa sivulla 267). Voimme olettaa, että kielioppi G = (V, Σ, R, S) on jo muunnettu Chomskyn normaalimuotoon. 171

Tarkastellaan jotakin johtoa A w, missä w = w 1... w n Σ n ja n 2. Koska kielioppi on Chomskyn normaalimuodossa, ensimmäisen askeleen täytyy olla A BC, missä B w 1... w i ja C w i+1... w n jollakin i. Saadaan seuraava rekursiivinen proseduuri Derives(A, w), joka kaikilla muuttujilla A V ja päätemerkkijonoilla w Σ palauttaa True, jos A w. Derives(A, w) if w = ε and (A ε) R then return True tyhjä merkkijono elseif w = a Σ and (A a) R then return True yksi merkki else olkoon w = w 1... w n, missä w i Σ ja n 2 for kaikilla säännöillä (A BC) R do for i 1 to n 1 do if Derives(B, w 1... w i ) and Derives(C, w i+1... w n ) then return True return False Nyt w L(G), jos ja vain jos Derives(S, w) palauttaa True. 172