8.5. Jäsennyspuu 1 / 23 Kääntäminen ja BNF Ohjelmointikielten kuten Java, C++, Pascal, Fortran jne. syntaksi määritellään tyypillisesti BNF-muotoisilla säännöillä. Sääntöjä on usein satoja. Ohjelman kääntämisessä testataan onko ohjelma muodollisesti oikein eli toteuttaako se ohjelmointikielen syntaksin. Siis voidaanko ohjelmakoodi johtaa ohjelmointikielen syntaksin määrittelevistä BNF-säännöistä. 2 / 23 Kokonaisluvun johto Esimerkki. Kokonaisluvun määrittelevät BNF-muotoiset säännöt Integer ::= SignedInteger U nsignedinteger SignedInteger ::= + U nsignedinteger U nsignedinteger U nsignedinteger ::= Digit Digit U nsignedinteger Digit ::= 0 1 2 9 3 / 23 1
Johtamispuu Context-free kielioping = (V,V T,S,P) johtoons w voidaan aina liittää johtoa kuvaava jäsennyspuu (=johtamispuu, parse tree) seuraavasti: 1) Puun pisteet merkitäänv:n symboleilla taiλ:lla. 2)Jos johdossa ensimmäinen käytetty sääntö ons α 1 α 2 α m,m 1,α i V, aina kuni = 1,2,...,m, niin jatketaan puutam:llä symbolilla, jotka merkitään vasemmalta oikealleα 1,α 2,...,α m. Jos ensimmäinen sääntö ons λ, niin jatketaan puuta yhdellä pisteellä, jota merkitäänλ:lla. 3) Josα i on apukirjain, johdon toinen sääntö kohdistuu siihen ja onα i β 1 β 2 β k, niin jatketaan puutaα i :tä vastaavasta pisteestäk:lla pisteellä, jotka merkitään vasemmalta oikealle symboleinβ 1,β 2,...,β k. Jos toinen sääntö on muotoa α i λ, niin jatketaan puuta pisteellä, jota merkitäänλ:lla. 4 / 23 Johtamispuu jatkoa 4) Tällä tavoin jatketaan puun rakentamista. Sitä voidaan jatkaa mistä tahansa apukirjaimesta, ei pelkästään viimeksi saadusta. 5) Lopulta jokainen puun piste johon sääntöä ei ole sovellettu on merkitty joko aakkostonv T symbolilla taiλ:lla. Näistä pisteistä johtoa ei enää voi jatkaa (kysessä ovat puun lehdet). Silloin johto päättyy ja johdon tuottama sana voidaan lukea puun lehdistä vasemmalta oikealle. 5 / 23 2
Jäsentämispuun käyttö Jäsentämispuuta käytetään sanan oikeellisuuden (onko annettu sana kielen sana) tarkistamisessa. Puhutuille kielille ei tarkkoja sääntöjä kyetä luomaan, joten myöskään oikeellisuuden testaaminen ei ole mahdollista. Ohjelmointikielet määritellään tarkasti, joten jäsennyspuu on käyttökelpoinen väline ohjelman oikeellisuuden tutkimiseen. 6 / 23 Esimerkki 8.9. Merkitään seuraavassa kieliopin sääntöjoukkoaa w 1,A w 2,...A w n lyhyesti A w 1 w 2 w n. Esimerkki 8.9. Määrää kieliopin G = ({A,B,0,1},{0,1},S,P), missä P = {S A B,A 0 0A 1AA AA1 A1A,B 1 1B 0BB BB0 B0B}, johto ja johtoa vastaava jäsennyspuu sanalle0111. 7 / 23 3
9. Matemaattisista koneista. 8 / 23 Yleistä Monia tietojenkäsittelytehtäviä, digitaalisia komponetteja, ohjelmia jne. voidaan mallintaa äärellistilaisella matemaattisella koneella. Matemaattinen kone on myös tietojen käsittelijän malli. Se sisältää sekä syötön, äärellisen muistin, kontrollin ja mahdollisesti tulostuksen. Matemaattisia koneita on erityyppisiä. Yhteiset osat: Äärellinen tilojen joukko, alkutila, syöttöaakkosto, siirtofunktio, joka kuvaa miten kone siirtyy tilasta toiseen kohdatessaan syötön. 9 / 23 Tarkasteltavat konetyypit Jonokone: Matemaattinen kone joka sisältää myös tulostuksen. Äärellinen automaatti: Matemaattinen kone, jonka tulostus rajoittuu syötön hyväksymiseen. Lopuksi tarkastellaan matemaattisia koneita, joiden muisti on ääretön. 10 / 23 4
9.1. Jonokone Jonokone: Malli tietojenkäsittelijästä, joka pystyy muuntamaan syöttöä äärellisen muistinsa ja "ohjelmansa"avulla. 11 / 23 Määritelmä tarkasti. Jonokone (finite-state machine)on järjestetty kuusikko M = (S,I,O,f S,f O,s 0 ), missä S =M:n tilojen (äärellinen) joukko, I = syöttösymbolien (äärellinen) joukko, O = tulostussymbolien (äärellinen) joukko, jaf S sekäf O kuvauksia f S : S I S ja f O : S I O, f S = (siirtofunktio) seuraavan tilan kuvaus (ja tämä riippuu edellisestä tilasta ja syötöstä (=input) f O = tulostusfunktio (outputfunktio) ja s 0 on alkutila. 12 / 23 5
Toiminnan kuvaus Jokaiseen tila, syöttösymboli pariins,a liitetään tilaf S (s,a) (=seuraava tila) ja tulostusf O (s,a). Jonokone aloittaa alkutilassas 0 lukemaan syöttösanaa vasemmalta oikealle. Jokaisen syöttösymbolin lukemisen yhteydessä kone siirtyy senhetkisen tilan ja syöttösymbolin määräämään tilaan ja tulostaa jotain. Esimerkki 9.1. Olkoon jonokone M = ({s 0,s 1 },{a,b},{0,1},f S,f o,s 0 ), missä f S (s 0,a) = s o,f S (s 0,b) = f S (s 1,a) = f S (s 1,b) = s 1 ja Silloin syöttöönaabba liittyy tulostus... f O (s 0,a) = f O (s 1,b) = 0,f O (s 0,b) = f O (s 1,a) = 1. 13 / 23 Jonokoneen taulukkoesitys Taulukkomuodossa esitetään tila ja tulostusfunktiot kahtena taulukkona. Taulukko (todellisuudessa kaksi taulukkoa) määrittelevät funktiotf S jaf O. 14 / 23 6
Jonokoneen graafiesitys Jonokoneeseen liittyvä suunnattu graafi (tarkasti painotettu suunnattu multigraafi) rakennetaan seuraavasti: Tilat merkitään solmuina. Nuoli viivojen solmujens i jas j välillä painonax,y tarkoittaa, että Syöttönä siisxja tulostuksenay f S (s i,x) = s j jaf O (s i,x) = y. 15 / 23 Esimerkki 9.2. Esimerkki 9.2 Määrää Esimerkin 9.1 jonokoneen esitys tilataulukkona ja suunnattuna graafina. M = ({s 0,s 1 },{a,b},{0,1},f S,f o,s 0 ), missä f S (s 0,a) = s o,f S (s 0,b) = f S (s 1,a) = f S (s 1,b) = s 1 ja f O (s 0,a) = f O (s 1,b) = 0,f O (s 0,b) = f O (s 1,a) = 1. 16 / 23 7
Huomioita jonokoneesta Huom. 1. Jonokoneen tilojen lukumäärä on äärellinen, joten ajanhetkeä ei voi käyttää tilana. 2. Syöttömerkit ohjaavat konetta. Tyhjä sanaλei voi olla syöttösana, koska silloin jonokone tekisi jotain ilman ohjetta. 3. Toiminta on synkronoitu erillisiin ajanhetkiin 0, 1, 2,... (vrt. kellopulssi). 4. Kone toimii deterministisesti eli jokaiseen tila syöttöpariin liitetään täsmälleen yksi seuraava tila ja tulostussymboli (f S jaf O ovat funktioita). 17 / 23 Esimerkki 9.3. Esimerkki 9.3. Kun kokonaisluku jaetaan kolmella, niin jaon mennessä tasan, jakojäännös on0, ja kun jako ei mene tasan voi jakojäännös olla1tai2. Laadi jonokone, joka syötetystä symbolejaajabsisältävästä sanasta tulostaa aina siihen mennessä syötetyna bjonona:n lukumäärän3:lla jakamisen antaman jakojäännöksen. Kerro koneen syötöt ja tulostukset, sekä selosta,mistä koneen tilat muodostuvat. 18 / 23 8
Esimerkki 9.4. Esimerkki 9.4. Määrää kahden binäärisen numeron yhteenlaskua suorittavan jonokoneen tilagraafi. Huomaa, että luvut voivat olla keskellä kahta pitkää binäärilukua. Mitkä ovat koneet syötöt, tulostukset ja koneen tilat. Kuinka lukujen esikäsittelyssä otetaan huomioon binäärilukujen mahdollinen erilainen pituus. 19 / 23 Esimerkki 9.5. Esimerkki 9.5. Televisioon oli mahdollista virittää täsmälleen4kanavaa ja virityksen jälkeen televisiota säädettiin pelkästään kaukosäätimellä. Virityksen jälkeen kanavapaikalla1näkyi ohjelma1, kanavapaikalla2ohjelma2ja kanavapaikalla3ohjelma3. Kanavapaikalla4näkyi vain "lumisadetta". Kaukosäätimessä on kolme ohjelmapainiketta V (virtapainike), E (eteenpäinpainike) ja T (taaksepäinpainike). Virta kytkettiin painamalla painiketta V, jolloin televisio alkoi näyttää ohjelmakanavan 2 ohjelmaa. Virran ollessa kytkettynä näppäimen V painaminen kytki virran pois ja kuva sammui. Virran ollessa kytkettynä ja television näyttäessä kanavapaikani ohjelmaa, E:n painaminen ohjasi television näyttämään kanavapaikani+1ohjelmaa (i = 1,2,3) ja kun TV näytti kanavapaikan4ohjelmaa, E:n painaminen ohjasi TV:n näyttämään kanavapaikan1ohjelmaa. Vastaavasti virran ollessa kytkettynä ja television näyttäessä kanavapaikanj ohjelmaa, T:n painaminen ohjasi television näyttämään kanavapaikan j 1 ohjelmaa (j = 2, 3, 4) ja kun TV näytti kanavapaikan 1 ohjelmaa, T:n painaminen ohjasi TV:n näyttämään kanavapaikan4ohjelmaa. Kun virta ei ollut kytkettynä E:n ja T:n painamisella ei ollut vaikutusta TV:n näyttämään ohjelmaan. 20 / 23 9
Jatkoa Laadi jonokone joka kuvaa ylläselostetun kaukosäätimen toimintaa. Selitä mistä muodostuvat jonokoneen syötöt, tulostukset ja tilat. 21 / 23 Esimerkki 9.6. Esimerkki 9.6. Tutkitaan amerikkalaista virvoitusjuoma-automaattia (tässä automaatti ei tarkoita matemaattista konetta nimeltä automaatti), joka30:llä centillä (=c) antaa omenajuoman (OJ) tai appelsiinijuoman (AJ). Automaatti hyväksyy 5c:n, 10c:n ja 25c:n kolikot ja antaa välittömästi tarvittavat vaihtorahat ja syötetyt ylimääräiset rahat. Juomien tilaamista varten koneessa on painonapit O ja A omena- ja appelsiinijuomille. Määrää virvoitusjuoma-automaattiin liittyvän jonokoneen tilaverkko ja tilataulu. Selitä jonokoneen tilat, syötöt ja tulostukset. 22 / 23 10
Esimerkki 9.7. Esimerkki 9.7. Sanoissa käytettäviä merkkejä ovat0,1,2,3; lisäksi on käytössä sanan loppumisen osoittava merkkix. Salakirjoitetaan sanoja seuraavasti: Lopetusmerkki säilyy ennallaan. Kun kirjoitettavana on0, niin salaaja kirjoittaa sen sijasta3:sen, kun kirjoitettavana on1, niin salaaja kirjoittaa sen sijasta2:sen, kun kirjoitettavana on2, niin salaaja kirjoittaa sen sijasta1:sen ja kun kun kirjoitettavana on3, niin salaaja kirjoittaa sen sijasta0:n Salakirjoitettavissa sanoissa ei koskaan ole kolmea samaa merkkiä peräkkäin. Laadi jonokone, joka avaa edelläkuvatulla tavalla salakirjoitetut sanat takaisin alkuperäisiksi sanoiksi. Lisäksi, jos avaaja löytää kolme samaa merkkiä peräkkäin, se tulostaa kolme sanan päättymismerkkiä ja siirtyy aloitustilaan. Kone on suunniteltava siten, että se kykenee avaamaan useita peräkkäisiä sanoja. Piirrä jonokoneen tilaverkko ja selitä sen tilat, syötöt ja tulostukset. 23 / 23 11