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

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

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

Yhteydettömät kieliopit [Sipser luku 2.1]

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

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

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

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

Täydentäviä muistiinpanoja jäsennysalgoritmeista

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

2. Yhteydettömät kielet

Pinoautomaatit. Pois kontekstittomuudesta

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

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

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

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

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

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

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

Rajoittamattomat kieliopit

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

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

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

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

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

ICS-C2000 Tietojenkäsittelyteoria

Attribuuttikieliopit

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

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

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

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

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

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

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

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

Tietojenkäsittelyteorian alkeet, osa 2

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

Jäsennys. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

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

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

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

11.4. Context-free kielet 1 / 17

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

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

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

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

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

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

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

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

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

Chomskyn hierarkia ja yhteysherkät kieliopit

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

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

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

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

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. 9. marraskuuta 2009

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

Täydentäviä muistiinpanoja laskennan rajoista

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

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

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

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

S BAB ABA A aas bba B bbs c

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

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

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

Luku 3. Syntaktisia kysymyksiä. 3.1 Lausekkeet

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

Ensimmäinen induktioperiaate

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

Ensimmäinen induktioperiaate

Säännöllisten kielten sulkeumaominaisuudet

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

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

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

Tarkastelemme ensin konkreettista esimerkkiä ja johdamme sitten yleisen säännön, joilla voidaan tietyissä tapauksissa todeta kielen ei-säännöllisyys.

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

Rajoittamattomat kieliopit (Unrestricted Grammars)

Automaatit. Muodolliset kielet

8. Kieliopit ja kielet 1 / 22

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

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

Muunnelmia Turingin koneista sekä muita vaihtoehtoisia malleja

815338A Ohjelmointikielten periaatteet

Luonnollisen päättelyn luotettavuus

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

Säännöllisten operaattoreiden täydentäviä muistiinpanoja

TIEA341 Funktio-ohjelmointi 1, kevät 2008

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

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

Yhteydettömän kieliopin jäsennysongelma

Muodolliset kieliopit

Logiikan kertausta. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos.

Kontekstittomat jäsennysmenetelmät

Jos sekaannuksen vaaraa ei ole, samastamme säännöllisen lausekkeen ja sen esittämän kielen (eli kirjoitamme R vaikka tarkoitammekin L(R)).

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Transkriptio:

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

Sisällys

Kontekstiton kielioppi Kontekstiton kielioppi koostuu joukosta päätemerkkejä (engl. terminal symbols), joukosta välikemerkkejä (engl. nonterminal symbols), joukosta produktioita, joista kukin koostuu yhdestä välikemerkistä, jota seuraa nuoli oikealle, jota seuraa (mahdollisesti tyhjä) jono pääte- ja välikemerkkejä

Tulkinta Välikemerkki on kielen nimi. Jos välikesymboleja on useita, kukin niistä nimeää eri kielen. Toimi näin: 1. Kirjoita paperille jokin välikemerkki. 2. Etsi kieliopista produktio, jossa on jokin paperilla oleva välikemerkki nuolen vasemmalla puolella. 3. Korvaa paperilla ko. välikemerkin nimi ko. produktion oikealla puolella. 4. Toista kohtia 2 3 kunnes paperilla ei ole enää välikesymboleja. Muutama esimerkki taululla

Aritmeettinen lauseke 1 seitsemän päätemerkkiä: +,,, /, (, ), c c on päätemerkki, joka edustaa mitä tahansa lukuvakiota (kielioppia ei kiinnosta sen lukuarvo) Esimerkeissä c merkitään kuitenkin yleensä lukuna. yksi välikemerkki: E kuusi produktiota: E c E E + E E E E E E E E E/E E (E) 1 Aritmeettisten lausekkeiden kielioppeja on useita mahdollisia, tämä on vain yksi niistä.

Säännölliset lausekkeet 2 Vaihteleva määrä päätemerkkejä: Kuvattavana olevien säännöllisten kielten aakkoston merkit, merkitään näitä alla yhteisesti c Lisäksi,,, ( ja ). Yksi välikemerkki: R Seuraavat produktiot: R R () R c R R R RR R R R R (R) 2 Näillekin on useita eri tapoja kirjoittaa kontekstiton kielioppi.

Formaalisti 4 Määritelmä Nelikko G = (V, Σ, P, S) on kontekstiton kielioppi (engl. context-free grammar, CFG), 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 Σ) on äärellinen (produktiot eli kielioppisäännöt) S V (aloitusmerkki) 3 3 Formaali määritelmä siis kiinnittää, minkä välikemerkin kieltä tarkastellaan. 4 Korjattu 9.10.2016 klo 8:40. Korjaus merkitty punaisella.

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ä 5 : 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. 5 On varottava sekaannusta, jos päätemerkistöön kuuluu pystyviiva (kuten säännöllisten lausekkeiden tapauksessa).

Backus Naur Form (BNF) Eräs klassinen metasyntaktinen notaatio (eli tapa kirjoittaa kontekstiton kielioppi) 6 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> ) 6 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 7 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 ")" 7 D. Crocker (toim.): Augmented BNF for Syntax Specifications: ABNF. Internet Standard 68, RFC 5234, 2008. http://tools.ietf.org/html/rfc5234

Ritchien metakieli 8 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 ) 8 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 9 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 - 9 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) CFG, 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, 10 jos A u on G:n produktio eli jos (A, u) P pätee. 10 Alaindeksi G voidaan jättää pois, jos on selvää, mitä kielioppia tarkoitetaan.

Määritelmä Olkoon G = (V, Σ, P, S) CFG. 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. 11 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. 11 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) CFG. 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 12, 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. 12 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 13 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? 13 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 14 tai yleisemmin, että väite pätee kaikille puille, joissa on vähemmän solmuja kuin tarkasteltavana olevassa puussa. 14 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) CFG. 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>