TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 31. maaliskuuta 2011
Sisällys
Sisällys
Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti lueteltava automaatti äärellinen pino lineaarirajoitettu Turingin kone
Suunnitelma Tiedämme jo: ε on säännöllinen kieli. S Σ on säännöllinen kieli. Jos A on säännöllinen kieli, niin A on säännöllinen kieli. Jos A ja B ova säännöllisiä kieliä, niin AB on säännöllinen kieli. Jos A ja B ova säännöllisiä kieliä, niin A B on säännöllinen kieli. Voidaanko kaikki säännölliset kielet ilmaista näiden yhdistelyn avulla? Ratkaisuun tarvitaan: Tarkka määritelmä yhdistelemiselle. Todistus sille, että DFA:sta voidaan rakentaa yhdistelmä.
Sisällys
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 säännöllinen lauseke (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. 1 Säännöllisten lausekkeiden joukkoa merkitään R Σ. 1 Käytännössä sulkeita ei läheskään aina kirjoiteta näkyviin. Operaattoreiden presedenssijärjestys on yllä 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 Σ )
käytännössä Yleisin käytännön sovellus on Unixin regexit, joita käytetään esim. egrep-ohjelmassa. Kääntäjien etupäässä voidaan käyttää säännöllisiä lausekkeita kuvaamaan kielen sanaset (flex ym.). Useimpien ohjelmointikielten kirjastoissa on toteutus Unixin regexien kaltaisille säännöllisille lausekkeille. Paaaaaaaaaaaaaljon sovelluksia!
Unixin regexien operaattorit r* tarkoittaa samaa kuin r edellä (Kleenen tähti) r+ tarkoittaa samaa kuin rr* (Kleenen plus) r 1 r 2 tarkoittaa samaa kuin edellä (valitaan joko r 1 tai r 2 ) r? tarkoittaa samaa kuin (() r) r{n} tarkoittaa r:n toistoa täsmälleen n kertaa. r{n, m} tarkoittaa r:n toistoa vähintään n ja enintään m kertaa. sulkeita () voidaan käyttää ryhmittelyyn ^ tarkoittaa syötteen tai rivin alkua (riippuu käyttöyhteydestä) $ tarkoittaa syötteen tai rivin loppua (riippuu käyttöyhteydestä) ilman näitä regex etsii osamerkkijonoa, johon regex täsmää
Unixin regexien merkkiluokat Seuraavat ovat tapoja ilmaista yhden merkin mittaisia kieliä:. tarkoittaa kieltä Σ [c 1 c 2 c n ] tarkoittaa kieltä {c 1,..., c n }. [^c 1 c 2 c n ] tarkoittaa kieltä Σ {c 1,..., c n }. hakasulkeissa (hatulla tai ilman) on mahdollista käyttää myös merkkiväliä, esim. a-z nimettyä merkkijoukkoa, esim. [:alpha:], [:digit:], [:alnum:] \., \* jne: erikoismerkki sellaisenaan
Esimerkkejä 1. [[:alpha:]][[:alnum:]]* 2. [+-]?([[:digit:]]+\.[[:digit:]]* [[:digit:]]*\.[[:digit:]]+) 3. [[:digit:]]{5} +[[:alpha:]]+( +[[:digit:]]{2})?
Sisällys
Lause Olkoon Σ merkistö. Jokaiselle kielelle K Σ seuraavat ovat yhtäpitävät: 1. On olemassa säännöllinen lauseke r R Σ, jolle r = K pätee. 2. On olemassa DFA M, jolle L(M) = K pätee. Todistus 1 2: Harjoitustehtävä. 2 1: Seuraavat kalvot. (ideatasolla).
Todistuksen strategia 1. Määritellään äärellisen automaatin variantti (lausekeautomaatti), jossa siirtymät tapahtuvat säännöllisillä lausekkeilla. 2. Todetaan, että jokainen DFA on myös lausekeautomaatti (joka tunnistaa saaman kielen). 3. Määritellään joukko lausekeautomaatin 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.
Lausekeautomaatti Määritelmä Viisikko (Q, Σ, δ, q 0, F) on lausekeautomaatti, jos Q on äärellinen (tilojen) joukko, Σ on äärellinen, epätyhjä joukko, joka ei sisällä tyhjän merkkijonon merkkinä käytettyä merkkiä ε (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).
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. 2 2 Siirtymät -lausekkeella sallitaan.
Alustus Aloitetaan DFA:sta (tai NFA:sta) tulkittuna lausekeautomaatiksi. Jos automaatin alkutilaan tulee siirtymiä tai jos alkutila on hyväksyvä, lisätään uusi alkutila, josta on ε-siirtymä vanhaan alkutilaan. Jos automaatissa ei ole hyväksyviä tiloja, lisätään siihen sellainen, ja lisäksi siirtymä alkutilasta siihen lausekkeella. Jos automaatissa on useampi kuin yksi hyväksyvä tila, tai jos ainoasta hyväksyvästä tilasta lähtee siirtymiä, muutetaan ne kaikki ei-hyväksyviksi ja luodaan uusi hyväksyvä tila, johon tulee ε-siirtymät entisistä hyväksyvistä tiloista. Poistetaan kaikki turhat tilat (sellaiset, joihin ei pääse alkutilasta seuraamalla siirtymiä).
Muunnos I Valitaan tilat q ja q ja säännölliset r i ja r j, joille on siirtymät q r i q ja q r j q. 3 Poistetaan siirtymät q r i q ja q r j q. Lisätään siirtymä q (r i r j ) q. 3 Merkintä q r q tarkoittaa siirtymää q δ(q, r).
Muunnos II 4 Valitaan tila q, joka ei ole alkutila eikä hyväksyvä tila Määritellään säännöllinen lauseke r seuraavasti: Jos siirtymiä q :sta q :hun ei ole, niin r = ε. on yksi, niin r on sen säännöllinen lauseke. on useampia, säännöllisin lausekkein s 1,..., s n, niin r = (s 1 s n ). r i r Lisätään tilasiirtymä q r j i q j jokaiselle sellaiselle tilaparille (q i, q j ), joille on siirtymät Poistetaan q i r i q r j q j. kaikki siirtymät, jotka lähtevät tai tulevat q :sta. tila q. 4 Tämä kalvo on kokonaan uudelleen kirjoitettu luennon jälkeen.
Muunnos III Valitaan tila q, joka ei ole alkutila eikä hyväksyvä tila ja josta ei lähde yhtään siirtymää. Poistetaan kaikki siirtymät tilaan q. tila q.
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.
Yhteenveto esta Reitti säännöllisestä lausekkeesta DFA:han kulkee viime luennon kautta. Reitti DFA:sta säännölliseen lausekkeeseen kulkee lausekeautomaatin kautta. Tuloslauseke voidaan lukea muunnosten soveltamisen jälkeen automaatin ainoasta siirtymästä.