Täydentäviä muistiinpanoja jäsennysalgoritmeista

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

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

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

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

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

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

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

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.

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

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

Attribuuttikieliopit

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

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

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

Yhteydettömät kieliopit [Sipser luku 2.1]

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

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

Pinoautomaatit. Pois kontekstittomuudesta

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

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

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

S BAB ABA A aas bba B bbs c

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

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

Laskennan mallit (syksy 2010) Harjoitus 8, ratkaisuja

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

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

Rajoittamattomat kieliopit

Chomskyn hierarkia ja yhteysherkät kieliopit

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

ICS-C2000 Tietojenkäsittelyteoria

Yhteydettömän kieliopin jäsennysongelma

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

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

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

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

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

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

Jäsennys. TIEA341 Funktio ohjelmointi 1 Syksy 2005

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

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

follow(a) first(α j ) x

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

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

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

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

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

ICS-C2000 Tietojenkäsittelyteoria

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

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

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

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

2. Yhteydettömät kielet

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

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

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

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

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

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

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

1. Universaaleja laskennan malleja

JOHDATUS TEKOÄLYYN TEEMU ROOS

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

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

Algoritmit 2. Luento 9 Ti Timo Männikkö

Ohjelmoinnin perusteet Y Python

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

Ydin-Haskell Tiivismoniste

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

811120P Diskreetit rakenteet

Rajoittamattomat kieliopit (Unrestricted Grammars)

Ohjelmoinnin perusteet Y Python

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

11.4. Context-free kielet 1 / 17

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

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

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

ITKP102 Ohjelmointi 1 (6 op)

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

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

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

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

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

Ratkeavuus ja efektiivinen numeroituvuus

Algoritmit 1. Luento 7 Ti Timo Männikkö

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

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

Täydentäviä muistiinpanoja laskennan rajoista

Tietorakenteet, laskuharjoitus 7, ratkaisuja

(iv) Ratkaisu 1. Sovelletaan Eukleideen algoritmia osoittajaan ja nimittäjään. (i) 7 = , 7 6 = = =

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

Algoritmit 2. Luento 10 To Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Transkriptio:

äydentäviä muistiinpanoja jäsennysalgoritmeista Antti-Juhani Kaijanaho 7. helmikuuta 2012 1 simerkki arleyn algoritmin soveltamisesta arkastellaan kielioppia G : + () c ja sovelletaan arleyn algoritmia siihen sekä merkkijonoon c + c c. euraavassa esityksessä on yksi taulukko per i -joukko. aulukon otsikkorivillä kerrotaan, mistä joukosta on kyse, sekä mitä kohtaa merkkijonosta se tarkastelee (jolloin selaus tarkastelee pisteen jälkeistä merkkiä). Kukin taulukko luetteloi (ja numeroi) joukossa olevat asetelmat siinä järjestyksessä, jossa ne on siihen lisätty. Kunkin asetelman kohdalla on kerrottu, miksi se on joukkoon lisätty (sulkeissa olevat numerot viittaavat aiempiin riveihin). Jos sama asetelma tulee lisättäväksi samaan taulukkoon useampaan kertaan, käytetään ensimmäisen lisäyksen riviä merkitsemään myös myöhempien lisäysten syyt. 0 c + c c 1, 0 alustus 2 +, 0 ennustus (1, 2, 3) 3, 0 ennustus (1, 2, 3) 4 (), 0 ennustus (1, 2, 3) 5 c, 0 ennustus (1, 2, 3) IA241 Automaatit ja kieliopit, kevät 2012 1

1 c +c c 1 c, 0 selaus 0 (5) 2, 0 täydennys (1), 0 (1) 3 +, 0 täydennys (1, 2), 0 (2) 4, 0 täydennys (1, 2), 0 (3) 2 c + c c 1 +, 0 selaus 1 (3) 2 +, 2 ennustus (1, 2, 3) 3, 2 ennustus (1, 2, 3) 4 (), 2 ennustus (1, 2, 3) 5 c, 2 ennustus (1, 2, 3) 3 c + c c 1 c, 2 selaus 2 (5) 2 +, 0 täydennys (1), 2 (1) 3 +, 2 täydennys (1), 2 (2) 4, 2 täydennys (1), 2 (3) 5, 0 täydennys (2), 0 (1) 6 +, 0 täydennys (2, 5), 0 (2) 7, 0 täydennys (2, 5), 0 (3) 4 c + c c 1, 2 selaus 3 (4) 2, 0 selaus 3 (7) 3 +, 4 ennustus (1, 2) 4, 4 ennustus (1, 2) 5 (), 4 ennustus (1, 2) 6 c, 4 ennustus (1, 2) 5 c + c c 1 c, 4 selaus 4 (6) 2, 2 täydennys (1), 4 (1) 3, 0 täydennys (1), 4 (2) 4 +, 4 täydennys (1), 4 (3) 5, 4 täydennys (1), 4 (4) 6 +, 0 täydennys (2), 2 (1) 7 +, 2 täydennys (2), 2 (2) 8, 2 täydennys (2), 2 (3) 9, 0 täydennys (3, 6), 0 (1) 10 +, 0 täydennys (3, 6), 0 (2) 11, 0 täydennys (3, 6), 0 (3) 2

Koska (, 0) 5 pätee, julistetaan että c + c c L(G) myös pätee. dellä olevista taulukoista voidaan myös lukea jäsennyspuut. Piirretään ensiksi sellaiset puut, joissa solmuina ovat algoritmin taulukoista löytyvät asetelmat. Asetelmojen väliset suhteet luetaan taulukoista seuraavasti: Asetelma (, 0) on puun juuri. Asetelma A on jonkin toisen asetelman B oikeanpuolimmainen lapsi, jos asetelma B on merkitty johdetuksi täydennyksellä samassa taulukossa olevasta asetelmasta A. Jos asetelmalla on useita oikeanpuolimmaisia lapsia, on kyse tilanteesta, jossa on useita jäsennyspuita. Valitsemalla oikeanpuolimmaisista lapsista jonkin saadaan aikaan jokin jäsennyspuista. Asetelma, joka on johdettu toisesta selauksella taikka täydennyksellä jostakin edellisen taulukon asetelmasta, on sen oikeanpuoleinen sisarus. isarussuhdeketjussa tulee olla kaikilla asetelmilla sama produktio. Jos näin ei ole, algoritmia on sovellettu väärin. isarussuhdeketjun yhteisen produktion oikean puolen kutakin symbolia kohden pitää olla ketjussa asetelma, jossa piste on ko. symbolin kohdalla. Jos näin ei ole, puu on hylättävä epäonnistuneena jäsennysyrityksenä. euraavat ei-hylättävät puut saadaan aikaan. Merkitsen asetelman siten lyhentäen, että laitan varsinaiseksi merkiksi sen merkin, joka tulee asetelmassa ennen pistettä, ja varustan sen ylä- ja alaindekseillä i, j, joissa i kertoo sen taulukon ja j sen rivin, josta asetealma löydettiin puuhun. Yläindeksi viittaa oikeanpuolimmaisella (tai ainoalla) sisaruksella ylenevään polveen ja muilla sisaruuteen oikealle päin. Alaindeksi viittaa suhteeseen oikeanpuolimmaiseen (tai ainoaan) lapseen. iis esimerkiksi 5,6 3,2 kertoo, että kyseisessä asetelmassa pistettä edeltää, että sen vanhempi selviää tarkastelemalla taulukon 5 rivin 6 suhteita ja että sen lapsi selviää tarkastelemalla taulukon 3 rivin 2 suhteita. 3

1,3 1,3 5,9 3,7 5,14 4,2 + 2,1 5,6 3,2 5,3 5,3 c 5,1 3,5 1,3 1,3 + 2,1 3,2 5,6 c 1,1 3,4 3,4 4,1 5,2 5,2 c 1,1 c 3,1 c 3,1 c 5,1 2 nnustava jäsennys Olkoon G = (V, Σ, P, ) CFG. Olkoon lisäksi Σ. Määritelmä 1. Määritellään ominaisuus NULLABL (V Σ) seuraavasti: NULLABL = { ω (V Σ) ω G ε } Merkintä NULLABL(ω) tarkoittaa samaa kuin ω NULLABL. Määritelmä 2. Määritellään kuvaus FIR : (V Σ) Σ, FIR : ω { c Σ ω (V Σ) : ω G cω } Algoritmi 3. FIR ja NULLABL voidaan laskea jokaiselle välikesymbolille seuraavalla algoritmilla: 1. Alusta NULLABL =. 2. Alusta FIR(X) = kaikilla X V. 3. Kunnes NULLABL ja FIR eivät enää muutu, tee: (a) Jos kieliopissa on produktio X ε jollakin X V, tee NULLABL := NULLABL {X}. (b) Jos kieliopissa on produktio X α 1 α n joillakin X V, n Z + ja α 1,..., α n V Σ, tee: i. Aseta i := 1. ii. Jos α i Σ, tee FIR(X) := FIR(X) {α i }. iii. Jos α i V, tee FIR(X) := FIR(X) FIR(α i ). iv. Jos α i V ja α i NULLABL, tee: 4

A. i := i + 1 B. Jos i n, hyppää kohtaan 3(b)ii. C. NULLABL := NULLABL {X}. Algoritmin yleistys välike- ja päätemerkkien jonoille jää harjoitustehtäväksi. Määritelmä 4. Määritellään kuvaus FOLLOW : V (Σ { }), FOLLOW : X { c Σ ω, ω : G ωxcω } { ω : G ωx } Näin c FOLLOW(X) tarkoittaa, että X:n jälkeen voi tulla c. Vastaavasti FOLLOW(X) tarkoittaa sitä, että X voi esiintyä kieleen kuuluvan merkkijonon lopussa. Algoritmi 5. FOLLOW voidaan laskea seuraavalla algoritmilla: 1. Alusta FOLLOW(X) = kaikilla X V {}. 2. Alusta FOLLOW() = { }. 3. Kunnes FOLLOW ei enää muutu, tee: (a) Jos kieliopissa on produktio Y ωxω joillekin X, Y V ja ω, ω (V Σ), tee: i. FOLLOW(X) := FOLLOW(X) FIR(ω ). ii. Jos NULLABL(ω ), tee FOLLOW(X) := FOLLOW(X) FOLLOW(Y ). Algoritmi 6. Rekursiivisesti etenevän jäsennyksen jäsennystaulukko voidaan konstruoida muuttujaan M : V (Σ { }) P(P ) seuraavasti: 1. Alusta M(X, c) = kaikilla X V ja c Σ { }. 2. Kullekin kieliopin produktiolle A ω tee: (a) Kaikille c FIR(ω) tee M(A, c) := M(A, c) {A ω}. (b) Jos NULLABL(ω), niin jokaiselle c FOLLOW(ω) tee M(A, c) := M(A, c) {A ω}. Määritelmä 7. Jos rekursiivisesti etenevän jäsennyksen jäsennystaulukossa M pätee M(X, c) 1 kaikilla X V ja c Σ { }, kielioppi on LL(1) ja jäsennystaulukko on ennustava. arkastellaan nyt esimerkinomaisesti BNF-muotoista kielioppia 5

<statement> ::= if ( <expression> ) <statement> else <statement> return <expression> ; <expression> ::= <term> <expressionprime> <expressionprime ::= + <term> <expressionprime> - <term> <expressionprime> <term> ::= <constant> ( <expression> ) Kyse on lähes samasta kieliopista, johon luentoesimerkki Rdex.java perustuu. Kirjoitetaan se vielä varmuuden vuoksi tutummilla merkintätavoilla: if () else return ; + ε c () Lasketaan ensiksi NULLABL ja FIR algoritmia noudattaen. Alustus jättää taulukon tyhjäksi. NULLABL FIR Produktio if () else : NULLABL FIR if 6

Produktio return ; Produktio + : Produktio : Produktio c: Produktio (): Produktio ε: NULLABL FIR NULLABL FIR + NULLABL NULLABL FIR + FIR + c NULLABL FIR + NULLABL FIR + 7

Produktio : NULLABL FIR c ( + Mikään produktio ei tämän jälkeen aiheuta muutoksia taulukkoon, joten algoritmin suoritus päättyy. Lasketaan vielä FOLLOW. Alustus: NULLABL FIR FOLLOW c ( + Produktiot if () else välikesymbolin suhteen: NULLABL FIR FOLLOW c ( ) + Produktio return ; välikesymbolin suhteen: NULLABL FIR FOLLOW c ( ) ; + Produktio välikesymbolin suhteen: NULLABL FIR FOLLOW c ( ) ; + ) ; 8

Produktio välikesymbolin suhteen: NULLABL FIR FOLLOW c ( ) ; + ) ; + ) ; Produktio if () else välikesymbolin suhteen: NULLABL FIR FOLLOW else c ( ) ; + ) ; + ) ; Jäsennystaulukko on nyt yksinkertainen rakennettava: c + ( ) ; if else return if () else return ; + ε ε c () ämän pohjalta laadittu ennustava jäsennin (tai oikeammin tunnistin) on kurssin luentosivuilla saatavilla tiedostossa LL.java. 9