Yhteydettömän kieliopin jäsennysongelma

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

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

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

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

Säännöllisten kielten sulkeumaominaisuudet

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

Pinoautomaatit. Pois kontekstittomuudesta

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

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

Chomskyn hierarkia ja yhteysherkät kieliopit

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

Yllä osoitettiin, että säännöllisten kielten joukko on suljettu yhdisteen

1. Universaaleja laskennan malleja

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

Rajoittamattomat kieliopit

Turingin koneen laajennuksia

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

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

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

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

M =(K, Σ, Γ,, s, F ) Σ ={a, b} Γ ={c, d} = {( (s, a, e), (s, cd) ), ( (s, e, e), (f, e) ), (f, e, d), (f, e)

Laskennan mallit (syksy 2010) Harjoitus 4, ratkaisuja

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

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

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

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. tammikuuta 2012

Algoritmin määritelmä [Sipser luku 3.3]

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

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

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

S BAB ABA A aas bba B bbs c

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

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

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

2. Yhteydettömät kielet

Automaatit. Muodolliset kielet

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

Turingin koneet. Sisällys. Aluksi. Turingin koneet. Turingin teesi. Aluksi. Turingin koneet. Turingin teesi

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 19. syyskuuta 2016

1. Universaaleja laskennan malleja

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

Kertausta 1. kurssikokeeseen

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

Pysähtymisongelman ratkeavuus [Sipser luku 4.2]

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

Laskennan mallit (syksy 2009) Harjoitus 11, ratkaisuja

Muunnelmia Turingin koneista sekä muita vaihtoehtoisia malleja

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

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

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

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

3. Turingin koneet. osaa esittää yksinkertaisia algoritmeja täsmällisesti käyttäen Turingin konetta ja sen muunnelmia

Säännöllisten operaattoreiden täydentäviä muistiinpanoja

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

Rekursiiviset palautukset [HMU 9.3.1]

Formalisoimme nyt edellä kuvatun laskennan.

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

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 26. tammikuuta 2012

Lisää pysähtymisaiheisia ongelmia

9.5. Turingin kone. Turingin koneen ohjeet. Turingin kone on järjestetty seitsikko

Täydentäviä muistiinpanoja laskennan rajoista

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna

Rajoittamattomat kieliopit (Unrestricted Grammars)

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

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

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

M = (Q, Σ, Γ, δ, q 0, q acc, q rej )

Laskennan mallit

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

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 10. joulukuuta 2015 TIETOTEKNIIKAN LAITOS.

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

Laskennan rajoja. Sisällys. Meta. Palataan torstaihin. Ratkeavuus. Meta. Universaalikoneet. Palataan torstaihin. Ratkeavuus.

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

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

ICS-C2000 Tietojenkäsittelyteoria

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

5.3 Ratkeavia ongelmia

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 20. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS.

2. Laskettavuusteoriaa

Laskennan mallit (syksy 2008) 2. kurssikoe , ratkaisuja

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

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

Yhteydettömät kieliopit [Sipser luku 2.1]

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

ÄÄRELLISTEN AUTOMAATTIEN MINIMOINTI. 1. Äärelliset automaatit Äärellinen automaatti (DFA = deterministic finite automaton) on

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 6. maaliskuuta 2012 TIETOTEKNIIKAN LAITOS.

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Todistus: Aiemmin esitetyn mukaan jos A ja A ovat rekursiivisesti lueteltavia, niin A on rekursiivinen.

Laskennan mallit

Laskennan mallit

Turingin koneet. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 7. joulukuuta 2015 TIETOTEKNIIKAN LAITOS.

Laskennan mallit

Laskennan mallit

ICS-C2000 Tietojenkäsittelyteoria

Tietotekniikan valintakoe

Laskennan mallit

Laskennan mallit

DFA:n käyttäytyminen ja 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

Transkriptio:

Yhteydettömän kieliopin jäsennysongelma Yhteydettömän kieliopin jäsennysongelmalla tarkoitetaan laskentaongelmaa Annettu: yhteydetön kielioppi G, merkkijono w Kysymys: päteekö w L(G). 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 yhden päätemerkin tuottaminen vaatii tasan kaksi askelta. Koska pituutta 2 x 1 olevia johtoja voi olla paljon, menetelmä on käytännössä liian tehoton. 110

Ohjelmointikielen kääntäminen Vaiheet periaatteellisella tasolla: 1. Selaaminen (scanning, lexical analysis) jakaa syötteen tekstialkioiksi (token); esim. muuttujanimi, liukulukuvakio tekniikka DFA tai vastaava 2. jäsentäminen (parsing) muodostaa tekstialkioille jäsennyspuun perustuu yhteydettömään kielioppiin 3. semanttinen analyysi: tyypitys jne. 4. koodin tuottaminen ja optimointi Käytännössä vaiheet menevät ajallisesti limittäin; esim. missään vaiheessa koneen muistissa ei ole ohjelman koko jäsennyspuuta. 111

Ohjelmointikielen jäsentämiseen on useita tekniikoita. Lähtökohtana on tyypillisesti ohjelmointikielen yhteydetön kielioppi. Tehokkaat jäsennysmenetelmät 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. Millä tahansa yhteydettömällä kieliopilla G kysymys päteekö w L(G)? voidaan ratkaista ajassa O( w 3 ) CYK-algoritmilla (Cocke, Younger, Kasami). Esitämme algoritmin lyhyesti (huom. kurssikirjassa sivulla 267). Voidaan olettaa, että G = (V,Σ, R, S) on Chomskyn normaalimuodossa. 112

Olkoon w = w 1... w n Σ n. Perusajatus on muodostaa kaikilla 1 i j n joukko { } table(i, j) = A V A w i... w j. Keskeinen havainto: jos A w i... w j, niin joko 1. i = j ja A w i, tai 2. i < j ja A BC w i... w j. Tapauksessa 1 pätee A w i R. Tapauksessa 2 pätee A BC R, ja lisäksi B w i... w k ja C w k+1... w j. jollain i k j 1. 113

Taulukko table annetulle w voidaan siis muodostaa seuraavasti: alusta table(i, j) := kaikilla 1 i j n. for i := 1 to n do for A V do if A w i R then table(i, i) := table(i, i) { A } for l := 2 to n do % laske joukot table(i, j) missä l = w i... w j = j i + 1 for i := 1 to n l + 1 do j := i + l 1 for k := i to j 1 do for A BC R do if B table(i, k) and C table(k + 1, j) then table(i, j) := table(i, j) { A } 114

Joukot table(i, j) kaikille 1 i j n voidaan siis annetulle w = w 1... w n muodostaa ajassa O(n 3 ), kun kieliopin koko ajatellaan vakioksi. Nyt 1. jos n = 0, niin w L(G), jos ja vain jos S ε R, ja 2. jos n 1, niin w L(G), jos ja vain jos S table(1, n). Korollaari 2.15: [Sipser Thm. 7.16] Millä tahansa yhteydettömällä kielellä L kysymys päteekö x L? voidaan ratkaista ajassa O( x 3 ). 115

Pinoautomaatit (pushdown automaton, PDA) [Sipser luku 2.2] Pinoautomaatti on äärellinen automaatti, johon on lisätty rajoittamaton määrä muistia pinon (stack) muodossa. Osoitamme jatkossa, että kielen voi tunnistaa pinoautomaatilla, jos ja vain jos se on yhteydetön. Esimerkki 2.16: Kielen {0 n 1 n n N } voi hyväksyä pinon avulla seuraavaan tapaan: 1: jos seuraava merkki on 0 niin Push(0) mene kohtaan 1 muuten Pop mene kohtaan 2 2: jos seuraava merkki on 1 niin Pop mene kohtaan 2 Automaatti hyväksyy, jos pino on tyhjä kun merkkijono loppuu. 116

Ryhdymme nyt formalisoimaan pinoautomaattia. Kuten äärellisessä automaatissa, pinoautomaatissa on äärellinen tilajoukko Q, syöteaakkosto Σ, siirtymäfunktio δ, alkutila q 0 Q ja hyväksyvät tilat F Q. Lisäksi siinä on pinoaakkosto Γ, jonka alkioita voidaan tallentaa pinoon. Tarkastelemme alusta alkaen epädeterministisiä pinoautomaatteja. Siirtymäfunktio on nyt funktio δ: Q Σ ε Γ ε P(Q Γ ε ) (muistetaan, että Σ ε = Σ { ε } ja P tarkoittaa potenssijoukkoa). Perustulkinta: jos (q, c) δ(q, a, b), niin tilassa q voidaan lukea syötemerkki a, poimia pinon päältä merkki b ja siirtyä tilaan q. Samalla pinoon painetaan c. 117

Lisätulkinta siirtymälle (q, c) δ(q, a, b): jos a = ε, niin seuraavaa syötemerkkiä ei lueta; jos b = ε, niin pinosta ei poimita (eikä lueta) mitään; ja jos c = ε, niin pinoon ei paineta mitään. Muodollisesti pinoautomaatti M = (Q,Σ,Γ, δ, q 0, F) hyväksyy merkkijonon w Σ, jos jollain m N on olemassa w 1 Σ ε,..., w m Σ ε, joilla w = w 1... w m ; tilat r 0 Q,..., r m Q ja merkkijonot s 0 Γ,..., s m Γ ( pinon sisällöt ), missä r 0 = q 0 ja s 0 = ε (aluksi pino tyhjä) kaikilla i = 0,..., m 1 voidaan kirjoittaa s i = at ja s i+1 = bt, missä (r i+1, b) δ(r i, w i+1, a), ja r m F. 118

Tuttuun tapaan automaatti hylkää merkkijonot, joita se ei hyväksy. Automaatin tunnistama kieli koostuu sen hyväksymistä merkkijonoista. Esimerkki 2.17: [Sipser Ex. 2.14] Kieli {0 n 1 n n N } voidaan tunnistaa pinoautomaatilla M 1 = (Q,Σ,Γ, δ, q 1, F), missä Q = { q 1, q 2, q 3, q 4 }, Σ = {0,1}, Γ = {0,$}, F = { q 1, q 4 } ja δ on seuraava: syöte: 0 1 ε pino: 0 $ ε 0 $ ε 0 $ ε q 1 {(q 2,$) } q 2 {(q 2,0) } {(q 3, ε) } q 3 {(q 3, ε) } {(q 4, ε) } q 4 Siis esim. δ(q 3, ε,$) = {(q 4, ε) }. Koska formalismissa ei ole sisäänrakennettua pinon tyhjyystestiä, pinon pohjan merkiksi laitetaan $. Sama tekniikka toistuu jatkossa. 119

Esitetään sama havainnollisemmin tilakaaviona. Merkintä q a,b c q tarkoittaa (q, c) δ(q, a, b). ε, ε $ q 1 q 2 0, ε 0 1,0 ε q 4 ε,$ ε q 3 1,0 ε 120

Esimerkki 2.18: [Sipser Ex. 2.18] Kieli { ww R w {0,1} } voidaan tunnistaa seuraavalla periaatteella: 1. Syötteen ensimmäisen puolikkaan ajan paina merkkejä pinoon. 2. Syötteen toisen puolikkaan ajan poimi merkkejä pinosta ja vertaa juuri luettuun. Syötteen keskikohta arvataan epädeterministisesti. Itse asiassa tätä kieltä ei edes ole mahdollista tunnistaa PDA:n deterministisellä variantilla. ε, ε $ q 1 q 2 0, ε 0 1, ε 1 ε, ε ε q 4 ε,$ ε q 3 0,0 ε 1,1 ε 121

Esimerkki 2.19: Seuraava PDA hyväksyy ne merkkijonot, joissa on yhtä monta nollaa kuin ykköstä. Pinoaakkosto on Γ = { A, B, $ }. Pinossa pidetään kirjaa tähän mennessä luettujen nollien ja ykkösten määrien erosta. Esim. AAA$ tarkoittaa, että nollia on ollut kolme enemmän, ja BBBBB$, että ykkösiä on ollut viisi enemmän. 0, A A 0,$ $ ε, ε $ ε, ε A 0, B ε 1, A ε 1, B B 1,$ $ ε, ε B ε,$ ε 122