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

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

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

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. 29. huhtikuuta 2011

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. kesäkuuta 2013

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

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

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

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

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

Täydentäviä muistiinpanoja jäsennysalgoritmeista

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

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

Pinoautomaatit. Pois kontekstittomuudesta

Rajoittamattomat kieliopit

LR-jäsennys. Antti-Juhani Kaijanaho. 3. lokakuuta 2016

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

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

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

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

Attribuuttikieliopit

Jäsennys. TIEA341 Funktio ohjelmointi 1 Syksy 2005

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Muunnelmia Turingin koneista sekä muita vaihtoehtoisia malleja

Yhteydettömät kieliopit [Sipser luku 2.1]

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

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

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

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

Chomskyn hierarkia ja yhteysherkät kieliopit

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

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

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

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 8. maaliskuuta 2012

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

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

Rajoittamattomat kieliopit (Unrestricted Grammars)

2. Yhteydettömät kielet

ICS-C2000 Tietojenkäsittelyteoria

DFA:n käyttäytyminen ja säännölliset kielet

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

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

Yhteydettömän kieliopin jäsennysongelma

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

follow(a) first(α j ) x

Tietojenkäsittelyteorian alkeet, osa 2

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

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

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

ICS-C2000 Tietojenkäsittelyteoria

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

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

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

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

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

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

Ydin-Haskell Tiivismoniste

Entscheidungsproblem

Muita universaaleja laskennan malleja

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

TIEA341 Funktio-ohjelmointi 1, kevät 2008

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

1. Universaaleja laskennan malleja

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

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

S BAB ABA A aas bba B bbs c

Chomskyn hierarkia. tyyppi 0 on juuri esitelty (ja esitellään kohta lisää) tyypit 2 ja 3 kurssilla Ohjelmoinnin ja laskennan perusmallit

Entscheidungsproblem

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

Syntaksi. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 22. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Syntaksi. Aluksi.

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

Täydentäviä muistiinpanoja laskennan rajoista

Jäsennysaiheesta lisää Täydentäviä muistiinpanoja TIEA241 Automaatit ja kieliopit, syksy 2016

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

5.5 Jäsenninkombinaattoreista

Algoritmin määritelmä [Sipser luku 3.3]

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Rekursiiviset tyypit

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

formalismeja TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 15. joulukuuta 2015 TIETOTEKNIIKAN LAITOS

Matriisit, kertausta. Laskutoimitukset. Matriisikaavoja. Aiheet. Määritelmiä ja merkintöjä. Laskutoimitukset. Matriisikaavoja. Matriisin transpoosi

Lisää pysähtymisaiheisia ongelmia

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 9. marraskuuta 2009

Geneeriset tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

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

Kertausta 1. kurssikokeeseen

Transkriptio:

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

Sisällys etenevä etenevä

Chomskyn hierarkia (ja muutakin) kieli säännöllinen LL(k) LR(1) kontekstiton kontekstinen rekursiivisesti lueteltava automaatti äärellinen (ennustava jäsennin) deterministinen pino pino lineaarirajoitettu Turingin kone etenevä

Tunnistamis- ja ongelma Olkoon G = (N, Σ, P, S) kontekstiton kielioppi ja w Σ sen merkkijono. Tunnistamisongelmassa tehtävänä on selvittää, päteekö w L(G). Jäsennysongelma on tunnistamisongelman yleistys: tehtävänä on selvittää kaikki w:n puut. Jäsennysongelmalle on runsaasti laajassa käytössä olevia algoritmisia ratkaisuja. Useimmat eivät toimi kaikilla kieliopeilla. Tällä luennolla tarkastellaan ennustavaa tä. Lisämateriaaleissa lisäksi Earleyn algoritmi ja LR-. etenevä

1 Määritelmä Olkoon G = (V, Σ, P, S) CFG. Se on operaattorikielioppi välikesymbolien E V (operaattorivälikesymbolit) suhteen, jos kaikki operaattorivälikesymbolien produktiot ovat jotain seuraavista muodoista: etenevä A B ( on prefiksioperattori) A B ( on postfiksioperaattori) A B C A BC ( on infiksioperaattori) (ε on infiksioperaattori) A ( on primäärilauseke) A B missä A, B, C E ja sekä alkaa että päättyy päätesymboliin. 1 Tämä määritelmä ei ole yleisesti käytössä.

Esimerkkejä operaattoreista Tavanomaisten operaattoreiden (+, jne) lisäksi: C:n typecast (tyyppi) on prefiksioperaattori. Funktiokutsu (arg1,...,argn) on postfiksioperaattori. Mixfix-operaattorit kuten C:n?lauseke: ovat tämän analyysin kannalta infiksioperaattoreita. etenevä

Presedenssi ja assosiatiivisuus Miten on lauseke a b c tulkittava? 2 Operaattorien välille on tapana määritellä osittaisjärjestys nimeltä presedenssi: Jos :llä on korkeampi presedenssi kuin :lla, niin tuo lauseke tulkitaan (a b) c. Jos :llä on korkeampi presedenssi kuin :lla, niin tuo lauseke tulkitaan a (b c). Lisäksi on kullekin operaattorille tapana määritellä ominaisuus nimeltä assosiatiivisuus: Jos kummallakaan ei ole toista korkeampi presedenssi mutta molemmat assosioivat vasemmalle, tuo lauseke tulkitaan (a b) c. Jos kummallakaan ei ole toista korkeampi presedenssi mutta molemmat assosioivat oikealle, tuo lauseke tulkitaan a (b c). Muissa tapauksissa tuo lauseke on kielioppivirhe. etenevä 2 Tässä tai tai molemmat voivat toki olla prefiksi- tai postfiksioperaattoreita, jolloin a, b ja c voivat olla tyhjiä.

Yksiselitteisen operaattorikieliopin laatiminen I Lajitellaan operaattorit eri luokkiin siten, että samassa luokassa olevista operaattoreista millään ei ole suurempi presedenssi kuin muilla. 3 Järjestetään luokat jonoon siten, että luokka A tulee luokan B:n jälkeen, jos A:n operaattoreilla on suurempi presedenssi kuin B:n operaattoreilla. Lisätään jonon loppuun vielä yksi luokka primäärilausekkeita varten. Valitaan kullekin luokalle oma uniikki välikesymboli. etenevä 3 Oletetaan yksinkertaisuuden vuoksi, että kaikilla samaan luokkaan kuuluvilla operaattoreilla on sama assosiatiivisuus.

Yksiselitteisen operaattorikieliopin laatiminen II Kullekin operaattoreiden luokalle, jonka välikesymboli on A ja jota seuraavan luokan välikesymboli on B, tehdään seuraavat produktiot: A B A A B jokaiselle A-luokan vasemmalle assosioivalle infiksioperaattorille. A B A jokaiselle A-luokan oikealle assosioivalle infiksioperaattorille. A A jokaiselle A-luokan prefiksioperaattorille. A A jokaiselle A-luokan postfiksioperaattorille. Primäärilausekkeiden luokalle tehdään tarvittavat produktiot. Kaikki alkuperäisen kieliopin operaattorivälikesymbolien produktiot poistetaan ja kaikki viittaukset näihin symboleihin muutetaan viittamaan ensimmäisen luokan välikesymboliin. etenevä

etenevä engl. recursive descent parsing Tehdään kustakin välikesymbolista aliohjelma, joka kokeilee kutakin produktiota vuorollaan. Päätesymbolin kohdalla katsotaan onko se seuraavana merkkijonossa. Välikesymbolin kohdalla kutsutaan sitä vastaavaa aliohjelmaa. Jos ei onnistu, peruutetaan (backtrack) lähimpään tehtyyn valintaan, jossa ei ole vielä kaikki vaihtoehdot käyty läpi. etenevä

Välittömän vasemman rekursion poisto etenevä ei selviä vasenrekursiivisista produktioista: Esim. A Ab a kääntyisi aliohjelmaksi, joka ensi töikseen kutsuu itseään. Tuollainen produktio voidaan korvata kahdella uudella produktiolla A aa ja A ε ba, missä A on uusi välikesymboli. Yleisesti mikä tahansa produktiojoukko etenevä A Aα 1 Aα n β 1 β m voidaan kirjoittaa muotoon A β 1 A β m A A ε α 1 A α n A missä α i ja β i ovat välike- ja päätesymbolien jonoja, jotka eivät ala A:lla, ja A on uusi välikesymboli. Epäsuora vasen rekursio pitää poistaa toisella menetelmällä, joka sivuutetaan tässä.

Usein on mahdollista päättää heti, onko jokin produktio mahdollinen. Esim. E + TE ei tule kyseeseen, jos seuraava merkki ei ole +. Tällöin kokeile-ja-peruuta on täysin älytön idea. Ideaalitilanne on, jossa peruutusta ei tarvita lainkaan. Tällöin kyse on ennustavasta jäsennyksestä (engl. predictive parsing). Onnistuu vain osalle kieliopeista. Seuraavilla kalvoilla oletetaan annetuksi jokin kielioppi G = (V, Σ, P, S) ja rakennetaan sille (jos mahdollista) ennustava jäsennin. etenevä

NULLABLE NULLABLE on taulukko, joka kertoo kullekin välikesymbolille, voidaanko siitä johtaa tyhjä merkkijono. kaikki välikemerkit ovat taulukossa merkitsemättömiä. Toista kunnes taulukko ei enää muutu: Toista kaikille produktioille A ω, jolle pätee, että A:ta ei ole merkitty: Jos ω ei sisällä yhtään päätemerkkiä ja sen kaikki välikemerkit on merkitty, merkitse A. etenevä

Yleistetty NULLABLE NULLABLE-taulukko voidaan yleistää pääte- ja välikemerkkien jonojen funktioksi seuraavalla rekursiivisella määritelmällä: etenevä NULLABLE(ε) = tosi NULLABLE(cω) = epätosi { NULLABLE(ω) NULLABLE(Aω) = epätosi jos NULLABLE[A] pätee muuten

FIRST FIRST on taulukko, joka kertoo kullekin välikesymbolille niiden päätemerkkien joukon, joilla kyseisestä välikesymbolista johdettavissa olevat merkkijonot voivat alkaa. Alusta kaikki muut taulukon paikat tyhjiksi. Toista kunnes taulukko ei enää muutu: Toista kaikille produktioille A s 1 s n, missä n 1 ja i {1,..., n} : s i Σ V 1. Olkoon k suurin joukossa {0,..., n}, jolle pätee, NULLABLE(s 1 s k ). 2. Lisää A:n kohdalle taulukkoon kaikki merkit FIRST[s 1 ] FIRST[s k ]. 3. Jos k < n ja s k+1 on päätemerkki, lisää A:n kohdalle taulukkoon lisäksi s k+1. 4. Jos k < n ja s k+1 on välikemerkki, lisää A:n kohdalle taulukkoon lisäksi FIRST[s k+1 ]. etenevä

Yleistetty FIRST FIRST-taulukko voidaan yleistää pääte- ja välikemerkkien jonojen funktioksi seuraavalla rekursiivisella määritelmällä: etenevä FIRST(ε) = FIRST(cω) = {c} { FIRST[A] FIRST(ω) FIRST(Aω) = FIRST[A] jos NULLABLE[A] pätee muuten

FOLLOW Myös FOLLOW on välikemerkeillä indeksoitu taulukko: FOLLOW[A] = { c Σ ω 1, ω 2 (V Σ) : S G ω 1 Acω 2 } { ω (V Σ) : S G ωa } etenevä missä V Σ merkitsee merkkijonon loppua. Alusta kaikki taulukon paikat tyhjiksi paitsi aloitussymbolin, jonka paikalle laita. Toista kunnes taulukko ei enää muutu: Toista kaikilla produktioilla A ω 1 Bω 2, missä A, B V ja ω 1, ω 2 (V Σ) : Lisää B:n kohdalle taulukkoon merkit FIRST(ω 2 ). Jos NULLABLE(ω 2 ) pätee, lisää B:n kohdalle taulukkoon myös kaikki A:n kohdalla olevat merkit.

taulukko rivi jokaiselle välikesymbolille sarake jokaiselle päätesymbolille (ynnä syötteen loppu) Merkitse produktio X ω riville X ja sarakkeeseen t etenevä jokaiselle t FIRST(ω), ja jos NULLABLE(ω), myös jokaiselle t FOLLOW(X).

Taulukon tulkinta Tee jokaiselle välikesymbolille aliohjelma. Aliohjelman alussa tee switch case kaikille päätesymboleille (ynnä syötteen päättymiselle). Jos välikesymbolin X ja päätesymbolin t risteyskohta sisältää yhden produktion, niin koodaa ko. produktio X:n aliohjelmaan t:n caseen. sisältää useamman kuin yhden produktion 4, koodaa produktiot X:n aliohjelmaan t:n caseen ja käytä peruutusta valinnan tekemiseen produktioiden välissä. on tyhjä, niin koodaa X:n aliohjelmaan t:n caseen kielioppivirheen diagnosointi. Jos taulukossa ei ole yhtään konfliktia, jäsennin on ennustava. etenevä 4 Tällöin taulukossa on konflikti.

LL(1) left-to-right parse, leftmost derivation, 1-token lookahead. Jos kieliopista johdettu ennustava taulukko on konfliktiton, ko. kielioppi on LL(1). Jos kielioppi ei ole LL(1), kannattaa kokeilla vasemman rekursion poistoa ja vasenta tekijöintiä (engl. left factoring). Monet hyödylliset kieliopit eivät ole LL(1). Moniselitteinen kielioppi ei ole koskaan LL(1). On mahdollista yleistää LL(n):ään, jolloin FIRST ja FOLLOW sisältävät n:n mittaisia sanasjonoja. Tämä laajentaa jäsennettävien kielten joukkoa. etenevä

: pro ja contra + Helppo koodata kieliopin perusteella käsin. + Tehokas ei peruutusta. Vaadittu LL(1)-kielioppi on usein varsin vaikeaselkoinen. Kieliopin muuttaminen voi johtaa vaikeaselkoisiin virheisiin, kun FIRST- ja FOLLOW-joukkojen muuttumista ei muisteta ottaa kaikkialla huomioon. Tämän poistaa LL-generaattorin käyttäminen (esim. ANTLR). Käsin kirjoitetun prediktiivisen jäsentimen muokkaaminen voi johtaa epäselvyyteen siitä, mitä kieltä se oikeasti jäsentää. Tämänkin poistaa LL-generaattorin käyttäminen (esim. ANTLR). etenevä