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



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

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

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

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

Yhteydettömät kieliopit [Sipser luku 2.1]

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

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

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

2. Yhteydettömät kielet

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

11.4. Context-free kielet 1 / 17

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

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

3.3 KIELIOPPIEN JÄSENNYSONGELMA Ratkaistava tehtävä: Annettu yhteydetön kielioppi G ja merkkijono x. Onko

Täydentäviä muistiinpanoja jäsennysalgoritmeista

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

Pinoautomaatit. Pois kontekstittomuudesta

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

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

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

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

Tietojenkäsittelyteorian alkeet, osa 2

ICS-C2000 Tietojenkäsittelyteoria

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

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

Attribuuttikieliopit

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

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

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

Rajoittamattomat kieliopit

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

Muodolliset kieliopit

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

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

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

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

FORMAALI SYSTEEMI (in Nutshell): aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus

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

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

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

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

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

Jäsennys. TIEA341 Funktio ohjelmointi 1 Syksy 2005

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

Miten käydä läpi puun alkiot (traversal)?

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

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

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

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

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 7. joulukuuta 2009

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

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

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

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

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

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

815338A Ohjelmointikielten periaatteet

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

Täydentäviä muistiinpanoja laskennan rajoista

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

Esimerkki 1: Kahviautomaatti.

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

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

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Silmukkaoptimoinnista

Luku 3. Syntaktisia kysymyksiä. 3.1 Lausekkeet

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

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

Ensimmäinen induktioperiaate

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

Datatähti 2019 loppu

Ensimmäinen induktioperiaate

TIEA341 Funktio-ohjelmointi 1, kevät 2008

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

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

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

Algoritmit 2. Luento 2 To Timo Männikkö

5.1 Semanttisten puiden muodostaminen

8. Kieliopit ja kielet 1 / 22

Algoritmit 1. Luento 7 Ti Timo Männikkö

TIES542 kevät 2009 Denotaatio

TIES542 kevät 2009 Lausekkeista ja vähän muustakin

A TIETORAKENTEET JA ALGORITMIT

TIEA341 Funktio-ohjelmointi 1, kevät 2008

LUKU II HOMOLOGIA-ALGEBRAA. 1. Joukko-oppia

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

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

Ohjelmointikielten syntaksista ja semantiikasta

Aloitus. TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 14. maaliskuuta 2011 TIETOTEKNIIKAN LAITOS. Aloitus.

Chomskyn hierarkia ja yhteysherkät kieliopit

Matemaattisten työvälineiden täydentäviä muistiinpanoja

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 6 Ke Timo Männikkö

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

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

(1) refleksiivinen, (2) symmetrinen ja (3) transitiivinen.

58131 Tietorakenteet (kevät 2008) 1. kurssikoe, ratkaisuja

Transkriptio:

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

Sisällys

Formaalisti Määritelmä Nelikko G = (V, Σ, P, S) on kontekstiton kielioppi (engl. context-free grammar, ), jos seuraavat väitteet pätevät: V on epätyhjä, äärellinen joukko (muuttujat eli nonterminaalit eli välikemerkit eli syntaktiset kategoriat) Σ on epätyhjä, äärellinen joukko (päätemerkit eli terminaalit) V Σ = P V (V Σ) (produktiot eli kielioppisäännöt) S V (aloitusmerkki) 1 1 Formaali määritelmä siis kiinnittää, minkä välikemerkin kieltä tarkastellaan.

Tavanomainen esitystapa Produktiot (v, w) P luetellaan kukin omalla rivillään muodossa v w. Aloitusmerkin produktiot luetellaan ensimmäisenä. Saman välikemerkin produktiot voidaan esittää lyhennysmerkinnällä: A ω 1 ω 2 on sama kuin A ω 1 A ω 2 Produktion oikean puolen tyhjyyttä voidaan korostaa käyttämällä ε-merkintää: A ε Kaikki merkit, jotka esiintyvät produktion vasemmalla puolella, ovat välikemerkkejä, ja muut ovat päätemerkkejä, ellei muuta sanota.

Backus Naur Form (BNF) Eräs klassinen metasyntaktinen notaatio (eli tapa kirjoittaa kontekstiton kielioppi) 2 Välikemerkkien nimet voivat olla sanoja tai jopa fraaseja, ja ne kirjoitetaan kulmasulkeisiin. Myös jotkin päätemerkit (esimerkiksi lukuvakio) nimetään ja laitetaan kulmasulkeisiin Produktion nuoli korvataan symbolilla ::= Esimerkiksi aritmeettisten lausekkeiden kielioppi BNF:llä: <expression> ::= <constant> <expression> + <expression> <expression> - <expression> <expression> * <expression> <expression> / <expression> ( <expression> ) 2 Peter Naur ym.: Revised Report on the Algorithmic Language ALGOL 60. Communications of the ACM 6 (1), s. 1 17, 1963. http://dx.doi.org/10.1145/366193.366201

Augmented BNF (ABNF) Verkkoprotokollien kuvauksessa käytetään usein Augmented BNF -notaatiota 3 Välikesymbolit ja jotkin päätesymbolit voidaan nimetä sanoilla. Kulmasulkeita ei tarvita. Päätesymbolit kirjoitetaan pääsääntöisesti lainausmerkkeihin. Produktionuoli on =. Vaihtoehtoisuus ilmaistaan kauttaviivalla. Sulkeita voi käyttää ryhmittelyyn. Runsaasti muitakin lyhennysmerkintöjä. Esimerkiksi aritmeettisten lausekkeiden kielioppi ABNF:llä: expr = const / expr ( "+" / "-" / "*" / "/" ) expr / "(" expr ")" 3 D. Crocker (toim.): Augmented BNF for Syntax Specifications: ABNF. Internet Standard 68, RFC 5234, 2008. http://tools.ietf.org/html/rfc5234

Ritchien metakieli 4 Käytetään mm. C:n ja Javan kuvauksessa. Välikesymbolit ja nimettävät päätesymbolit kursivoidaan. Muut päätesymbolit kirjoitetaan lihavoidulla, tasalevyisellä fontilla. Produktionuolen asemesta käytetään kaksoispistettä. Vaihtoehdot kirjoitetaan omille rivilleen. Aritmeettiset lausekkeet Ritchien metakielellä: expression: constant expression + expression expression - expression expression * expression expression / expression ( expression ) 4 En tiedä, kuka tämän alun perin kehitti, mutta aikaisin julkaisu jossa sitä olen nähnyt käytettävän on Dennis Ritchien C Reference Manual vuodelta 1974 (https://www.bell-labs.com/usr/dmr/www/cman74.pdf).

Ratakisko 5 produktion oikea puoli ilmaistaan graafina jossa välikesymbolit ovat laatikoiden ja päätesymbolit ympyröiden sisällä graafilla mahdollista ilmaista monimutkaisiakin rakenteita yhdessä produktiossa floating constant: + digits. digit E digits - 5 Esimerkki (lievästi muokattuna) sivulta http://www.texample.net/tikz/examples/diagram-chains/, tekijä Ludger Humbert; CC-BY 2.5

Käyttäytyminen Määritelmä Olkoon G = (V, Σ, P, S), olkoot v, u, w (V Σ) välike- ja päätemerkkien jonoja, ja olkoon A V välikemerkki. Merkkijono vaw antaa (engl. yields) merkkijonon vuw, merkitään vaw G vuw, 6 jos A u on G:n produktio eli jos (A, u) P pätee. 6 Alaindeksi G voidaan jättää pois, jos on selvää, mitä kielioppia tarkoitetaan.

Määritelmä Olkoon G = (V, Σ, P, S). Pääte- ja välikemerkkien jonosto v 0,..., v n (V Σ), jolle pätee i {1,..., n} : v i 1 G v i, on v n :n johto v 0 :sta, ja sitä merkitään usein v 0 G G v n tai lyhentäen v 0 G v n. Luku n on johdon pituus. 7 Olkoot w, u (V Σ) välike- ja päätemerkkien jonoja. Jos on olemassa w:n johto u:sta, niin u johtaa eli tuottaa (engl. derives) w:n, merkitään u G w. 7 Erikoistapauksena myös nollan pituinen johto v 0 G v 0 on mahdollinen.

Vasen ja oikea johto Määritelmä Olkoon G = (V, Σ, P, S) kontekstiton kielioppi ja olkoon v 0 G G v n johto. Jos jokaisessa johdon askeleessa v i G v i+1 sovelletaan jotain produktiota v i :n vasemmanpuolimmaiseen välikesymboliin, kyseeessä on vasen johto (engl. leftmost derivation). Jos jokaisessa johdon askeleessa v i G v i+1 sovelletaan jotain produktiota v i :n oikeanpuolimmaiseen välikesymboliin, kyseeessä on oikea johto (engl. rightmost derivation).

Määritelmä Kontekstittoman kieliopin G = (V, Σ, P, S) tuottama kieli on L(G) = { w Σ S G w } Määritelmä Kieli on kontekstiton (engl. context-free), jos on olemassa kontekstiton kielioppi, joka tuottaa sen.

L(G):tä koskevien todistusten strategia Olkoon G = (V, Σ, P, S). Todistettava, että L(G):n kaikilla merkkijonoilla w L(G) on ominaisuus P(w). Määritellään kullekin välikemerkkille A V ominaisuus P A ( ). Todistetaan 8, että w Σ : P(w) P S (w) pätee. Todistetaan, että A V, w (V Σ) : P A (w) (A G w) pätee. Todistetaan, että A V, w (V Σ) : (A G w) P A (w) pätee. 8 Tämä usein sivuutetaan triviaalina.

Esimerkki Lause Olkoon G seuraava kontekstiton kielioppi. S asb ε Tällöin L(G) = { a k b k k N } pätee. Todistus Ainakin jälkiprujussa (taululla jos on aikaa).

Jäsennyspuu Jäsennyspuu (tietyn kieliopin suhteen) on puu, jolla on seuraavat ominaisuudet: Sen kukin lehtisolmu on merkitty pääte- tai välikemerkillä taikka ε:lla. Sen juuri ja jokainen sisäsolmu on merkitty välikemerkillä. Kullekin sisäsolmulle (jonka merkki on) A, jolla on lapsisolmut (joiden merkit ovat) ω 1,..., ω n, on olemassa kieliopin produktio A ω 1 ω n Jäsennyspuu on tietyn merkkijonon jäsennyspuu tietystä välikemerkistä lähtien, jos tuo merkkijono voidaan lukea jäsennyspuun lehtisolmujen merkeistä vasemmalta oikealle (ε-solmut huomiotta jättäen) ja puun juuri on merkitty kyseisellä välikemerkillä.

Taululla Piirretään joitakin seuraavan kieliopin jäsennyspuita 9 E c E E + E E E E E E E E E / E E (E) Kuinka monta jäsennyspuuta voidaan piirtää merkkijonolle c + c c? 9 Päätemerkki c on leksikaalinen kategoria, jonka edustajia ovat kaikki Unix-regexpin [+-]?[[:digit:]]+ kuvaamat merkkijonot.

Puuta koskevien todistusten strategia Yleensä rakenneinduktio (eli induktio puun solmujen määrän suhteen): Perustapauksena käsitellään joko tyhjä puu taikka puu, joka koostuu yksinomaan yhdestä lehtisolmusta. Induktiotapauksessa tarkastellaan puuta, jossa on vähintään kaksi solmua. Induktio-oletus on, että väite pätee kaikille puun aidoille alipuille 10 tai yleisemmin, että väite pätee kaikille puille, joissa on vähemmän solmuja kuin tarkasteltavana olevassa puussa. 10 Puussa on alipuu jokaista puun solmua kohti: kyseinen solmu tulkitaan juureksi, ja alipuuhun kuuluvat kaikki tuon solmun jälkeläiset; alipuu on aito, jos siinä on vähemmän solmuja kuin alkuperäisessä puussa.

Jäsennyspuiden peruslause Lause Olkoon G = (V, Σ, P, S). Olkoon A V välikemerkki, ja olkoon w (V Σ) merkkijono. Seuraavat ovat yhtäpitäviä: 1. On olemassa w:n jäsennyspuu A:sta lähtien G:n suhteen. 2. A G w. Todistus. Sivuutetaan (tulee jälkiprujussa)

Määritelmä Kontekstiton kielioppi on yksiselitteinen, jos kaikilla merkkijonoilla on enintään yksi jäsennyspuu. Muuten se on moniselitteinen (engl. ambiguous). Lause Merkkijonolla on saman kieliopin suhteen ja samasta välikemerkistä alkaen yhtä monta jäsennyspuuta kuin sillä on erilaisia vasempia johtoja. Todistus. Sivuutetaan.

Roikkuva else <statement> ::= print <expression> ; { <statement-list> } if ( <expression> ) <statement> if ( <expression> ) <statement> else <statement> <statement-list> ::= <empty> <statement-list> <statement> <empty> ::= Kysymys Mitä tulostaa if (a) if (b) print 1; else print 2; jos a on epätosi? (a) 2 (b) ei mitään

Ratkaisu Yleensä valitaan (b), jolloin else paritetaan sisimmän parittoman if:n kanssa. Yksiselitteistys tehdään pakottamalla then-lauseen pariutuminen: <statement> ::= <matched-statement> <open-statement> <matched-statement> ::= print <expression> ; { <statement-list> } if ( <expression> ) <matched-statement> else <matched-statement> <open-statement> ::= if ( <expression> ) <statement> if ( <expression> ) <matched-statement> else <open-statement>