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

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

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

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

Täydentäviä muistiinpanoja jäsennysalgoritmeista

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

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

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

Rajoittamattomat kieliopit

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

Pinoautomaatit. Pois kontekstittomuudesta

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

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

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

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

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

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

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

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

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

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

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

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

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

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

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

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

ICS-C2000 Tietojenkäsittelyteoria

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

Entscheidungsproblem

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

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

Entscheidungsproblem

Jäsennys. TIEA341 Funktio ohjelmointi 1 Syksy 2005

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

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

ICS-C2000 Tietojenkäsittelyteoria

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

Attribuuttikieliopit

Yhteydettömät kieliopit [Sipser luku 2.1]

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

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

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

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

2. Yhteydettömät kielet

Yhteydettömän kieliopin jäsennysongelma

TIEA341 Funktio-ohjelmointi 1, kevät 2008

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

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

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

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

16. Ohjelmoinnin tekniikkaa 16.1

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

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

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

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

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

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

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Muunnelmia Turingin koneista sekä muita vaihtoehtoisia malleja

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

1. Universaaleja laskennan malleja

16. Ohjelmoinnin tekniikkaa 16.1

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

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

Muita universaaleja laskennan malleja

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

S BAB ABA A aas bba B bbs c

KAAVAT. Sisällysluettelo

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

follow(a) first(α j ) x

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

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

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

Ohjelmoinnin perusteet Y Python

Ydin-Haskell Tiivismoniste

Algoritmit 1. Luento 4 Ke Timo Männikkö

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

Opiskelijan pikaopas STACK-tehtäviin. Lassi Korhonen, Oulun yliopisto

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

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

Excel 2016 Power Pivot

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

Propositiot: Propositiot ovat väitelauseita. Totuusfunktiot antavat niille totuusarvon T tai E.

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.

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

3. Muuttujat ja operaatiot 3.1

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

Konsensusongelma hajautetuissa järjestelmissä. Niko Välimäki Hajautetut algoritmit -seminaari

TIES542 kevät 2009 Tyyppiteorian alkeet

Talousmatematiikan perusteet, L2 Kertaus Aiheet

Esimerkki 47. Kieli {a i b j c k : i = j tai j = k} on luonnostaan moniselitteinen.

Talousmatematiikan perusteet, L2 Kertaus Aiheet

Uuden lukuvuoden aloitus ViLLEssa

Luku 3. Syntaktisia kysymyksiä. 3.1 Lausekkeet

Excel PowerPivot

Täydentäviä muistiinpanoja laskennan rajoista

(0 desimaalia, 2 merkitsevää numeroa).

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

Transkriptio:

Kontekstittomien kielten jäsentäminen äydentäviä muistiinpanoja IA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 19. lokakuuta 2016 1 Yksiselitteiset operaattorikieliopit 1.1 Aritmeettiset lausekkeet ällä kurssilla on tullut tutuksi aritmeettisten lausekkeiden moniselitteinen kielioppi c + / () ässä kieliopissa on yksi prefiksioperaattori (), neljä infiksioperaattoria (+,, ja /) ja kaksi primäärilauseketta (c ja ()). Huomaa, että yksi päätemerkeistä on kaksoisroolissa: on sekä prefiksioperaattori (negaatio) että infiksioperaattori (vähennyslasku). avanomainen aritmeettisten operaattoreiden presedenssijärjestys on seuraava: korkein presedenssi on negaatiolla, seuraavaksi korkein on kerto- ja jakolaskulla, ja alin presedenssi on yhteen- ja vähennyslaskulla. Aritmetiikassa ei ole väliä, ovatko yhteen-, vähennys- ja kertolasku vasemmalle vai oikealle assosiatiivisia, mutta tavanomaista ohjelmointikielissä on julistaa ne vasemmalle assosiatiivisiksi. Jakolaskulle on luonnollista ottaa sama assosiatiivisuus kuin kertolaskulle. refiksioperaattorina negaatio on luontevimmin oikealle assosiatiivinen, jolloin 4 = (4). Lajitellaan nyt operaattorit luokkiin. Aritmeettisten lausekkeiden tapauksessa luokilla on vakiintuneet nimet: 1. Lausekeluokkaan (engl. expressions) kuuluvat yhteen- ja vähennyslaskut. 2. ermiluokkaan (engl. terms) kuuluvat kerto- ja jakolaskut. 1

3. ekijäluokkaan (engl. factors) kuuluu negaatio. Lisäksi lisätään loppuun primäärilausekkeiden luokka, johon kuuluvat vakiolausekkeet ja suljelausekkeet. Valitaan kullekin luokalle englanninkielisen nimen alkukirjain välikesymboliksi:,, ja. Noudattamalla kalvojen menetelmää edelleen saadaan seuraava yksiselitteinen kielioppi: + / c () 1.2 Säännölliset lausekkeet Säännöllisille lausekkeille voidaan kirjoittaa seuraava moniselitteinen kontekstiton kielioppi: R () c R RR R R (R) (Huomaa kieliopissa valintaa merkitsevän pystyviivan ja päätemerkin huonosti näkyvä mutta erittäin tärkeä ero.) Aluksi todetaan operaattorit. Löytyy yksi postfiksioperaattori ( ), kaksi infiksioperaattoria (ε ja ) ja neljä primäärilauseketta (, c, () ja (R)). Ne muodostavat presedenssiluokat seuraavasti: 1. 2. ε 3. Näille ei ole erityisiä nimiä, joten käytetään välikesymbolien niminä alaindeksoitua R:ää. Käsitellään kaikkia operaattoreita vasemmalle assosiatiivisina. Nyt saadaan seuraava yksiselitteinen kielioppi: R 1 R 2 R 1 R 2 R 2 R 3 R 2 R 3 R 3 R 4 R 3 R 4 c () (R 1 ) 2

2 Vasemman rekursion poisto Molemmat edellä laaditut yksiselitteiset kieliopit ovat vasenrekursiivisia. Sen poistaminen johtaa seuraavanlaisiin kielioppeihin: ε + ε / c () R 1 R 2 R 1 R 1 ε R 2 R 1 R 2 R 3 R 2 R 2 ε R 3 R 2 R 3 R 4 R 3 R 3 ε R 3 R 4 c () (R 1 ) 3 Aritmeettisten lausekkeiden ennustava jäsennys Käytetään seuraavaa kielioppia: ε + ε / c () 3

Lasketaan ensiksi NULLABL. Alustetaan: NULLABL roduktio ei sisällä yhtään päätemerkkiä mutta sen kaikki välikemerkit eivät ole merkitty, joten se ei johda merkintään. Sen sijaan ε ei sisällä yhtään päätemerkkiä ja sen kaikki välikemerkit (joita ei ole) on merkitty, joten tulee merkitä: NULLABL roduktiot + ja eivät johda merkintöihin, eikä myöskään. Sen sijaan ε aiheuttaa :n merkinnän: NULLABL Muut vielä läpikäymättömät produktiot eivät aiheuta merkintää. Aloitetaan siis alusta uudestaan. sisältää yhden ei-merkitsemättömän välikesymbolin, joten se ei aiheuta merkintää. on jo merkitty, joten sen produktioita ei tarvitse käydä läpi. sisältää yhden ei-merkitsemättömän välikesymbolin, joten sekään ei iheuta merkintään. on jo merkitty. Myöskään,, c ja () ei aiheuta merkintöjä. Kun tämä uusi iteraatio ei aiheuttanut lisämerkintöjä, NULLABL-taulukko on 4

valmis: NULLABL Laaditaan sitten IRS-taulukko. Se on luonnollista laatia NULLABLtaulukon uudeksi sarakkeeksi. Alustetaan: NULLABL IRS arkastellaan ensin produktiota. Sille k = 0, sillä ei ole NULLABL. aulukko ei muutu, koska :n kohta taulukossa on tyhjä. roduktiota ε ei voi tarkastella. arkastellaan sen sijaan produktiota +. Sille k = 0, sillä + ei ole NULLABL. Koska + on päätemerkki, se lisätään taulukkoon :n kohdalle. Sama päättely produktiolla johtaa :n lisäämiseen. NULLABL IRS +, roduktio ei johda lisäyksiin. roduktiota ε ei voi tarkastella. roduktiot ja / johtavat samalla päättelyllä kuin edellä päätemerkkien ja / lisäämiseen :n kohdalle. 5

NULLABL IRS +,, / roduktio ei johda lisäyksiin, mutta lisää :n kohdalle :n. NULLABL IRS +,, / roduktio c lisää c:n ja () lisää (:n :n kohdalle. NULLABL IRS +,, / Nyt kaikki produktiot on käyty kerran läpi. Koska lisäyksiä tuli, pitää kierros uusia. roduktiot, ε, + ja eivät aiheuta lisäyksiä. Sen sijaan produktiossa on lisättävä :n merkit :lle. NULLABL IRS +,, / 6

Myös produktio aiheuttaa kopiointitarvetta, tällä kertaa :stä :ään: NULLABL IRS +,, /, c, ( :n produktiot eivät aiheuta lisää muutoksia. Koska tämäkin kierros muutti taulukkoa, on otettava vielä yksi kierros. roduktio kopioi :n merkit :lle: NULLABL IRS +,, /, c, ( roduktio kopioi :n merkit :lle: NULLABL IRS +,, c, (, /, c, ( Muilla produktioilla ei ole vaikutusta. Mutta edelleen tarvitaan uusi kierros, jonka ainoa vaikutus on produktion mukaisesti kopioida :n merkit :lle. NULLABL IRS, c, ( +,, c, (, /, c, ( 7

Vielä yksi kierros on käytävä läpi, mutta sillä ei ole vaikutusta, joten IRS on valmis. Lasketaan vielä OLLOW. Alustuksessa :n kohdalle laitetaan. NULLABL IRS OLLOW, c, ( +,, c, (, /, c, ( ässä hankaluuksia tekee se, että jokainen produktio tulee joka kierroksella tarkastella niin monta kertaa kuin sen nuolen oikealla puolella on välikesymboleita. simerkiksi produktio tulee käsitellä kahdesti. nsimmäisellä kerralla lisätään :n kohdalle sekä IRS( ) että :n kohdalla olevat (sillä on NULLABL), toisella kerralla :n kohdalle :n kohdalla olevat. NULLABL IRS OLLOW, c, ( +,, c, ( +,,, /, c, ( roduktiota ε ei voi käsitellä. Sen sijaan + käsitellään kahdesti. nsiksi :n kohdalle lisätään sekä IRS( ) että (koska on NULLABL) :n merkit, ja toiseksi :n kohdalle kopioidaan :n kohdalla olevat merkit. Sama koskee produktiota. Nämä eivät kuitenkaan lopulta lisää taulukkoon mitään uutta. NULLABL IRS OLLOW, c, ( +,, c, ( +,,, /, c, ( Seuraavaksi tuo :n paikalle sekä IRS( ):n että (koska on NULLABL) :n kohdalla olevat merkit ja :n paikalle :n paikalla olevat 8

merkit. NULLABL IRS OLLOW, c, ( +,, c, ( +,,, / +,,, c, (, /, +,, Sitten käsitellään produktiot + ja, jotka molemmat tekevät saman asian eli (koska on NULLABL) kopioivat :n merkit :lle. ämä ei kuitenkaan muuta taulukkoa. NULLABL IRS OLLOW, c, ( +,, c, ( +,,, / +,,, c, (, /, +,, roduktio kopioi :n merkit :n paikalle. NULLABL IRS OLLOW, c, ( +,, c, ( +,,, / +,,, c, (, /, +,,, /, +,, Vielä tarkastellaan produktiota c, joka ei aiheuta muutoksia, ja produktiota (), joka lisää yhden merkin :n paikalle: NULLABL IRS OLLOW, c, ( ), +,, c, ( +,,, / +,,, c, (, /, +,,, /, +,, Koska taulukko muuttui, pitää kierros ottaa uudestaan. roduktio 9

kopioi :n merkit sekä :n että :n kohdalle: NULLABL IRS OLLOW, c, ( ), +, ),, c, ( +,, ),, / +,,, c, (, /, +,,, /, +,, roduktio kopioi :n merkit sekä :n että :n kohdalle: NULLABL IRS OLLOW, c, ( ), +, ),, c, ( +,, ),, / +,, ),, c, (, /, +,, ),, /, +,, roduktio kopioi :n merkit :lle. NULLABL IRS OLLOW, c, ( ), +, ),, c, ( +,, ),, / +,, ),, c, (, /, +,, ),, /, +,, ), Vielä yksi kierros tarvitaan, mutta se ei muuta tilannetta. Nyt voidaan laatia ennustava jäsennystaulukko: c + / ( ) + ε ε ε ε / ε ε c () 4 Vasen tekijöinti Yleisesti: A αβ 1 αβ n γ 1 γ m 10

voidaan kirjoittaa A αa γ 1 γ m A β 1 β n simerkiksi: S if then S S if then S else S voidaan kirjoittaa S if then S L L ε L else S 11