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

Samankaltaiset tiedostot
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

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

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

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

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

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

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

Täydentäviä muistiinpanoja jäsennysalgoritmeista

Pinoautomaatit. Pois kontekstittomuudesta

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

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

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

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

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

Attribuuttikieliopit

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

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

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

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

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

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

Rajoittamattomat kieliopit

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

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

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

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

Yhteydettömät kieliopit [Sipser luku 2.1]

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

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

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

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

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

Jäsennys. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

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

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

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

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

S BAB ABA A aas bba B bbs c

2. Yhteydettömät kielet

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

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

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

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

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

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

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

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

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

Yhteydettömän kieliopin jäsennysongelma

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

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

Chomskyn hierarkia ja yhteysherkät kieliopit

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

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

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

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

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

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

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

Ydin-Haskell Tiivismoniste

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

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

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

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

11.4. Context-free kielet 1 / 17

follow(a) first(α j ) x

Rajoittamattomat kieliopit (Unrestricted Grammars)

ICS-C2000 Tietojenkäsittelyteoria

Muunnelmia Turingin koneista sekä muita vaihtoehtoisia malleja

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

Tietojenkäsittelyteorian alkeet, osa 2

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Säännöllisten kielten sulkeumaominaisuudet

Täydentäviä muistiinpanoja laskennan rajoista

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

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

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

ICS-C2000 Tietojenkäsittelyteoria

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

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

Entscheidungsproblem

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

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

ITKP102 Ohjelmointi 1 (6 op)

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

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB

Entscheidungsproblem

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

1. Universaaleja laskennan malleja

Demo 7 ( ) Antti-Juhani Kaijanaho. 9. joulukuuta 2005

Mikäli huomaat virheen tai on kysyttävää liittyen malleihin, lähetä viesti osoitteeseen

Kertausta 1. kurssikokeeseen

Algoritmin määritelmä [Sipser luku 3.3]

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

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Muita universaaleja laskennan malleja

Transkriptio:

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

Sisällys

Tunnistamis- ja jäsennysongelma 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 jäsennyspuut. Jäsennysongelmalle on runsaasti laajassa käytössä olevia algoritmisia ratkaisuja. Useimmat eivät toimi kaikilla kieliopeilla. Tällä luennolla tarkastellaan a ja ennustavaa jäsennystä. Lisämateriaalissa lisäksi LR-jäsennys.

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: 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.

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. 2 Tässä tai tai molemmat voivat toki olla prefiksi- tai postfiksioperaattoreita, jolloin a, b ja c voivat olla tyhjiä.

C-kielen infiksioperaattoritaulukko 3 infiksioperaattorit (E on lausekkeiden välikesymboli) assosioivat * / % vasemmalle + - vasemmalle << >> vasemmalle < <= > >= vasemmalle ==!= vasemmalle & vasemmalle ^ vasemmalle vasemmalle && vasemmalle vasemmalle?e: vasemmalle = *= /= %= += -= <<= >>= &= ^= = oikealle, vasemmalle 3 Kullakin operaattorilla on korkeampi presedenssi kuin kaikilla sen alapuoleisilla riveillä olevilla operaattoreilla.

Yksiselitteisen operaattorikieliopin laatiminen I Lajitellaan operaattorit eri luokkiin siten, että samassa luokassa olevista operaattoreista millään ei ole suurempi presedenssi kuin muilla. 4 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. 4 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.

Jay Earley: An Efficient Context-Free Parsing Algorithm. Communications of the ACM, 13 (2), pp. 94 102, 1970. Syötteenä CFG G ja merkkijono w, tulosteena tieto, päteekö w L(G). CFG:stä laaditun PDA:n muunnelma

Asetelmat Algoritmi pitää kirjaa kolmesta asiasta: produktio, jota ollaan soveltamassa kuinka pitkälle produktion oikealla puolella ollaan päästy mistä kohtaa syötemerkkijonoa produktion käsittely alkoi Tällaisia kirjauksia kutsutaan asetelmiksi (engl. item) Asetelma, jossa sovelletaan produktiota A α 1... α n, jossa on jo käsitelty k ensimmäistä oikean puolen merkkiä ja jonka produktion käsittely alkoi syötemerkistä numero l, esitetään muodossa 5 A α 1... α k α k+1... α n, l 5 Huomaa piste!

Lähtökohdat Algoritmi olettaa: kieliopin alkusymbolilla on täsmälleen yksi produktio alkusymboli ei esiinny minkään produktion oikealla puolella Merkitään syötemerkkijonoa w = c 0... c n 1. Tarvitaan apujoukkoja yksi enemmän kuin syötemerkkijonossa on merkkejä. Merkitään niitä S 0,..., S n. Kukin apujoukko sisältää asetelmia.

Earleyn tunnistin 1. Alustetaan: 6 S 0 = {(S ω S, 0)} i {1,..., n} : S i = 2. Kaikilla i = 0,..., n (tässä järjestyksessä) ja jokaisella s S i tehdään yksi seuraavista: Ennustus Jos s on muotoa A ω Bω, f : Jokaiselle produktiolle B ω B P lisää S i :hin B ω B, i. Täydennys Jos s on muotoa A ω, f : Jokaiselle (B ω B Aω B, f ) S f lisää S i :hin B ω B A ω B, f. Selaus Jos s on muotoa A ω cω, f ja c = c i : Lisää S i+1 :een A ωc ω, f. 3. Palauta, päteekö (S ω S, 0) S n. 6 Olkoon S ω S kieliopin alkusymbolin ainoa produktio.

Esimerkki taululla E E + E E E c w = c + c c

Pro ja contra + Yleinen jäsennysalgoritmi, toimii kaikilla CFG:illä. Aika- ja tilavaativuus on (hyvin koodattuna) O(n 3 ), missä n on syötemerkkijonon pituus. Algoritmi ei ole aivan triviaali koodattava.

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 jäsennys ei onnistu, peruutetaan (backtrack) lähimpään tehtyyn valintaan, jossa ei ole vielä kaikki vaihtoehdot käyty läpi.

Välittömän vasemman rekursion poisto 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 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ä.