Jäsennysaiheesta lisää Täydentäviä muistiinpanoja TIA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 4. lokakuuta 2016 1 simerkki arleyn algoritmin soveltamisesta Tämä esimerkki on laadittu käsin. Toivottavasti ei ole virheitä :) Tarkastellaan kielioppia G : + () c ja sovelletaan arleyn algoritmia siihen sekä merkkijonoon c + c c. Seuraavassa esityksessä on yksi taulukko per S i -joukko. Taulukon 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. S 0 c + c c 1 S, 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) 1
S 1 c +c c 1 c, 0 selaus S 0 (5) 2 S, 0 täydennys (1), S 0 (1) 3 +, 0 täydennys (1), S 0 (2) 4, 0 täydennys (1), S 0 (3) S 2 c + c c 1 +, 0 selaus S 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) S 3 c + c c 1 c, 2 selaus S 2 (5) 2 +, 0 täydennys (1), S 2 (1) 3 +, 2 täydennys (1), S 2 (2) 4, 2 täydennys (1), S 2 (3) 5 S, 0 täydennys (2), S 0 (1) 6 +, 0 täydennys (2), S 0 (2) 7, 0 täydennys (2), S 0 (3) S 4 c + c c 1, 2 selaus S 3 (4) 2, 0 selaus S 3 (7) 3 +, 4 ennustus (1, 2) 4, 4 ennustus (1, 2) 5 (), 4 ennustus (1, 2) 6 c, 4 ennustus (1, 2) S 5 c + c c 1 c, 4 selaus S 4 (6) 2, 2 täydennys (1), S 4 (1) 3, 0 täydennys (1), S 4 (2) 4 +, 4 täydennys (1), S 4 (3) 5, 4 täydennys (1), S 4 (4) 6 +, 0 täydennys (2), S 2 (1) 7 +, 2 täydennys (2), S 2 (2) 8, 2 täydennys (2), S 2 (3) 9 S, 0 täydennys (3, 6), S 0 (1) 10 +, 0 täydennys (3, 6), S 0 (2) 11, 0 täydennys (3, 6), S 0 (3) 2
Koska (S, 0) S 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 (S, 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. Sisarussuhdeketjussa tulee olla kaikilla asetelmilla sama produktio. Jos näin ei ole, algoritmia on sovellettu väärin. Sisarussuhdeketjun 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ä. Seuraavat 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. Siis esimerkiksi 5,6 3,2 kertoo, että kyseisessä asetelmassa pistettä edeltää, että sen vanhempi selviää tarkastelemalla taulukon S 5 rivin 6 suhteita ja että sen lapsi selviää tarkastelemalla taulukon S 3 rivin 2 suhteita. 3
5,9 3,5 3,7 5,14 4,2 5,3 5,3 1,3 1,3 + 2,1 3,2 5,6 1,3 1,3 + 2,1 5,6 3,2 c 5,1 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 Attribuuttikielioppiesimerkki Tarkastellaan seuraavaa attribuuttikielioppia: T {.v = T.v } + T { 0.v = 1.v + T.v } T { 0.v = 1.v T.v } T F { T.v = F.v } T T F { T 0.v = T 1.v F.v } T T / F { T 0.v = T 1.v / F.v } F P { F.v = P.v } F F { F 0.v = F 1.v } P c { P.v = c.v } P () { P.v =.v } Tässä attribuuttikieliopissa on vain synteettisiä attribuutteja. 4
Tarkastellaan merkkijonoa 2 + 3 4. Laaditaan ensin sille jäsennyspuu: + T T T F F F P P P c c c Alustetaan (merkitsen attribuutit alaindekseiksi): + T T T F F F P P P c v=4 5
Sovelletaan produktion P c laskentasääntöä kolmesti: + T T T F F F P v=4 P v=2 P v=3 c v=4 Sovelletaan produktion F P laskentasääntöä kolmesti: + T T T F v=4 F v=2 F v=3 P v=4 P v=2 P v=3 c v=4 6
Sovelletaan produktion T T F laskentasääntöä: + 2 T T F v=4 F v=2 F v=3 P v=4 P v=2 P v=3 c v=4 Sovelletaan produktion T laskentasääntöä: v=2 + 2 T T F v=4 F v=2 F v=3 P v=4 P v=2 P v=3 c v=4 7
Sovelletaan produktion + T laskentasääntöä: v=14 v=2 + 2 T T F v=4 F v=2 F v=3 P v=4 P v=2 P v=3 c v=4 Juurisolmun v-attribuutista voidaan lukea, että laskutoimituksen tulos on 14. Tarkastellaan seuraavaksi toisenlaista attribuuttikielioppia. T {.l = T.v ;.v =.v } ε {.v =.l } + T { 1.l = 0.l + T.v ; 0.v = 1.v } T c { T.v = c.v } T () { T.v =.v } Tässä :llä, :lla ja T :llä on synteettinen attribuutti v. Lisäksi :lla on periytyvä attribuutti l. Jäsennetään 1 + 2 + 3: T c + T c + T c ε 8
Alustetaan: T + T + T ε Sovelletaan produktion T c laskentasääntöä: + T + T ε Sovelletaan produktion T ensimmäistä laskentasääntöä: l=1 + T + T ε 9
Sovelletaan produktion T c laskentasääntöä: l=1 + + T ε Sovelletaan produktion + T ensimmäistä laskentasääntöä: l=1 + l=3 + T ε Sovelletaan produktion T c laskentasääntöä: l=1 + l=3 + T v=3 ε 10
Sovelletaan produktion + T ensimmäistä laskentasääntöä: l=1 + l=3 + T v=3 l=6 ε Sovelletaan produktion ε laskentasääntöä: l=1 + l=3 + T v=3 l=6,v=6 ε Sovelletaan produktion + T toista laskentasääntöä: l=1 + l=3,v=6 + T v=3 l=6,v=6 ε 11
Sovelletaan produktion + T toista laskentasääntöä: l=1,v=6 + l=3,v=6 + T v=3 l=6,v=6 ε Sovelletaan produktion T toista laskentasääntöä: v=6 l=1,v=6 + l=3,v=6 + T v=3 l=6,v=6 ε Huomaa, että attribuutit voitiin käsitellä vasemmalta oikealle syvyyshaulla siten, että kussakin sisäsolmussa käytiin aina ennen ja jälkeen lapsien läpikäynnin sekä lapsisolmujen välissä. Tämä attribuuttikielioppi on siten L- attributoitu. 12