TIEA241 Automaatit ja kieliopit, kesä 2013 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 29. toukokuuta 2013
Sisällys
Chomskyn hierarkia (ja muutakin) kieli LL(k) LR(1) kontekstiton kontekstinen rekursiivisesti lueteltava automaatti äärellinen (ennustava jäsennin) deterministinen pino pino lineaarirajoitettu Turingin kone
Määritelmä Olkoon M = {,,, (, )} ja olkoon Σ merkistö, jolle pätee Σ M =. (engl. regular expressions) ovat seuraavat merkistön Σ M merkkijonot ε, c, jos c Σ, r, jos r on (r 1 r 2 ), jos r 1 ja r 2 ovat säännöllisiä lausekkeita, (r 1 r 2 ), jos r 1 ja r 2 ovat säännöllisiä lausekkeita, ja vain ne. Säännöllisten lausekkeiden joukkoa merkitään R Σ.
Huomioita säännöllisistä lausekkeista Säännöllisen lausekkeen ε pituus on nolla. Käytännössä sulkeita ei läheskään aina kirjoiteta näkyviin. Operaattoreiden presedenssijärjestys on edellisen kalvon mukainen korkeammalla mainittu lasketaan ensin.
Säännöllisten lausekkeiden tulkinta Määritelmä Olkoon Σ merkistö ja R Σ säännöllisten lausekkeiden joukko. Määritellään tulkintafunktio : R Σ P(Σ ) seuraavasti: = ε = {ε} c = {c} (c Σ) r = r (r R Σ ) (r 1 r 2 ) = r 1 r 2 (r 1, r 2 R Σ ) (r 1 r 2 ) = r 1 r 2 (r 1, r 2 R Σ )
Regexpit Työkalujen kuten egrep tukemat säännölliset ovat edellä esitetyn teoreettisen käsitteen laajennuksia. Tällä kurssilla viittaa tänään esitettyyn teoreettiseen käsitteeseen; työkalujen ymmärtämiä muunnelmia kutsumme regexpeiksi. Lähes kaikki regexpit on kirjoitettavissa myös säännöllisiksi lausekkeiksi [0-9] (0 1 2 3 4 5 6 7 8 9) r? (ε r) r+ rr r{2,4} (rr rrr rrrr) Poikkeuksena ns. takaisinviittaukset (engl. back reference)
Algoritmi: 1 Kutsu MYT(r) Syöte r R Σ Tulos M on NFA, jolle pätee L(M) = r. Jos r =, on M seuraava NFA: Jos r = ε, on M seuraava NFA: (jatkuu seuraavilla kalvoilla) 1 Tämä on ns. McNaughtonin, Yamadan ja Thompsonin (MYT) algoritmi.
MYT-algoritmi jatkuu Jos r = c jollakin c Σ, on M seuraava NFA: c Jos r = r1 jollakin r 1 R Σ, on M seuraava NFA 2 ε ε r 1 ε ε kun rekursiivisen kutsun MYT(r 1 ) palauttama automaatti on r 1 2 Tuplakatkoviivalla merkittyjä siirtymiä tehdään yhtä monta kuin MYT(r 1 )-automaatissa on hyväksyviä tiloja.
MYT-algoritmi jatkuu Jos r = (r 1 r 2 ) joillakin r 1 r 2 R Σ, on M seuraava NFA 3 ε r 1 ε r 2 kun rekursiivisen kutsun MYT(r i ) palauttama automaatti on r i kullakin i {1, 2}. 3 Tuplakatkoviivalla merkittyjä siirtymiä tehdään yhtä monta kuin MYT(r 1 )-automaatissa on hyväksyviä tiloja.
MYT-algoritmi jatkuu Jos r = (r 1 r 2 ) joillakin r 1 r 2 R Σ, on M seuraava NFA ε r 1 ε r 2 kun rekursiivisen kutsun MYT(r i ) palauttama automaatti on r i kullakin i {1, 2}.
Kleenen lause Lause Olkoon Σ merkistö. Jokaiselle kielelle A Σ seuraavat ovat yhtäpitävät: 1. On olemassa r R Σ, jolle r = A pätee. 2. A on kieli. Todistus 1 2: Seuraa MYT-algoritmista. 2 1: Seuraavilla kalvoilla.
Todistuksen strategia 1. Määritellään äärellisen automaatin variantti (äärellinen automaatti), jossa siirtymät tapahtuvat säännöllisillä lausekkeilla. 2. Todetaan, että jokainen DFA on myös automaatti (joka tunnistaa saaman kielen). 3. Määritellään joukko automaatin muunnoksia, joilla on seuraavat ominaisuudet: ne kaikki säilyttävät automaatin tunnistaman kielen kukin niistä pienentää automaatin kokoa (siirtymien määrää) 4. Lisätään tilpehöörit.
Äärellinen automaatti Määritelmä Viisikko (Q, Σ, δ, q 0, F) on äärellinen automaatti, jos Q on äärellinen (tilojen) joukko, Σ on äärellinen, epätyhjä joukko (merkistö), δ : Q R Σ P(Q) pätee (siirtymäfunktio), { (q, r) Q R Σ δ(q, r) = } on äärellinen, q 0 Q pätee (alkutila) ja F Q pätee (hyväksyvät tilat).
Lausekeautomaatin toiminta Olkoon M = (Q, Σ, δ, q 0, F) epädeterministinen äärellinen automaatti. Jokaiselle merkkijonolle w on mahdollisesti olemassa tilajonoja, jotka ovat muotoa q 1,..., q n ja joille w on jaettavissa osiin 4 w = w 0,..., w n 1, joille pätee r R Σ : w k r q k+1 δ(q k, r) kaikilla k = 0,..., n 1. Kunkin tällaisen jonon viimeinen tila q n on merkkijonon w päätöstila automaatissa M. Tyhjän merkkijonon päätöstilaksi automaatissa M lasketaan myös q 0. M hyväksyy merkkijonon, jos jokin sen päätöstiloista M:ssä kuuluu F:ään; muuten se hylkää sen. M:n hyväksymien merkkijonojen joukko on sen (tunnistama) kieli. 4 Huomaa indeksoinnin ero!
Muunnosinvariantit Jokaisen muunnoksen tulee säilyttää seuraavien väitteiden totuus: Automaatin alkutilaan ei tule yhtään siirtymää. Automaatissa on täsmälleen yksi hyväksyvä tila, ja se ei ole alkutila eikä siitä lähde siirtymiä. Automaatissa ei ole tiloja, joihin ei pääse alkutilasta siirtymiä seuraamalla. 5 Kutsutaan tällaista automaattia hyväksi. 5 Siirtymät -lausekkeella sallitaan.
Yksi mahdollinen alustus Aloitetaan DFA:sta (tai ) tulkittuna automaatiksi. Lisätään automaattiin uusi alkutila ja uusi hyväksyvä tila, ja muutetaan kaikki vanhat hyväksyvät tilat ei-hyväksyviksi. Lisätään uudesta alkutilasta ε-siirtymä vanhaan alkutilaan. Lisätään jokaisesta alun perin hyväksyvästä tilasta ε-siirtymä uuteen hyväksyvään tilaan. Lisätään uudesta alkutilasta kaikkiin muihin tiloihin -siirthmät.
Muunnos I Syöte Lausekeautomaatti M = (Q, Σ, δ, q 0, F) Tulos Lausekeautomaatti M = (Q, Σ, δ, q 0, F) Valitaan tilat q 1 ja q 2 ja säännölliset r a ja r b, joille on siirtymät q 2 δ(q 1, r a ) ja q 2 δ(q 1, r b ) Korvataan kyseiset siirtymät yhdistetyllä siirtymällä: δ(q, r) \ {q 2 } jos q = q 1 ja r {r a, r b } δ : (q, r) δ(q, r) {q 2 } jos q = q 2 ja r = (r a r b ) δ(q, r) muuten
Muunnos II Syöte Lausekeautomaatti M = (Q, Σ, δ, q 0, F) Tulos Lausekeautomaatti M = (Q, Σ, δ, q 0, F) Valitaan tila q, joka ei ole alkutila eikä hyväksyvä tila Määritellään r seuraavasti: Jos siirtymiä q :sta q :hun ei ole, niin r = ε on yksi, niin r on sen on useampia, säännöllisin lausekkein s 1,..., s n, niin r = (s 1 s n ) Poistetaan tila q : Q = Q \ {q } Muokataan tilasiirtymiä seuraavasti: { (δ(q, r) δ δ(q, r 2 )) \ {q } jos q δ(q, r 1 ) ja r = r 1 r : (q, r) r 2 δ(q, r) \ {q } muuten
Esimerkki taululla a 0 b 1 a b 0 0 1 1 1 1 a,b
Todistettava Oletus Automaatti täyttää aiemmalla kalvolla luetellut invarianttiehdot. Väitteet 1. Jos automaatissa on enemmän kuin yksi siirtymä, siihen voidaan soveltaa jotain muunnosta. 2. Jos automaattiin sovelletaan jotain muunnosta, 2.1 se täyttää tämän jälkeen invarianttiehdot. 2.2 sen tunnistama kieli ei muutu. 2.3 siinä on tämän jälkeen vähemmän siirtymiä. 3. Jos automaatissa on täsmälleen yksi siirtymä, se on alkutilasta hyväksyvvään tilaan.
Lemma (Eteneminen) Jos hyvässä automaatissa on vähintään kaksi siirtymää, niin siihen voidaan soveltaa joko Muunnosta I tai Muunnosta II. Todistus Taululla.
Lemma (Säilyminen) Jos hyvään automaattiin sovelletaan Muunnosta I tai Muunnista II, tuloksena syntyvä automaatti 1. on hyvä, 2. sisältää vähemmän tilasiirtymiä kuin alkuperäinen automaatti, ja 3. tunnistaa saman kielen kuin alkuperäinen automaatti. Todistus Taululla.
Algoritmina 1. Muuta syötteenä saatu DFA tai NFA hyväksi automaatiksi. 2. Sovella toistuvasti Muunnosta I ja Muunnosta II kunnes automaatissa on enää yksi tilasiirtymä. 3. Lue tuloste automaatin ainoasta tilasiirtymästä.