järjestys, jossa ohjelman suoritus etenee ohjelmatekstissä jollakin tietyllä suorituskerralla (dynaaminen kontrollivuo)

Koko: px
Aloita esitys sivulta:

Download "järjestys, jossa ohjelman suoritus etenee ohjelmatekstissä jollakin tietyllä suorituskerralla (dynaaminen kontrollivuo)"

Transkriptio

1 Luku 5 Kontrollivuon ohjaus Useimmat nykykielet ovat luonteeltaan peräkkäistäviä (sequential): ohjelmatekstissä mainitut tehtävät tehdään yksi kerrallaan toinen toisensa jälkeen. Jotkin kielet tukevat yhtäaikaisuutta (engl. concurrency), mutta tähän palataan myöhemmin. Kontrollivuolla (engl. control flow) tarkoitetaan kahta eri asiaa: järjestys, jossa ohjelman suoritus etenee ohjelmatekstissä jollakin tietyllä suorituskerralla (dynaaminen kontrollivuo) kaikki järjestykset, joissa ohjelman suoritus voi ohjelmatekstissä edetä, kun tarkastellaan kaikkia mahdollisia suorituskertoja (staattinen kontrollivuo) Staattinen kontrollivuon analyysi on tärkeä optimoivan kääntäjän tehtävä, ja sitä käytetään myös ohjelman muussa staattisessa analyysissä (esim. sen selvittämisessä, mitkä muuttujat ovat tarpeettomia). Jokaisessa ohjelmointikielessä on konstruktioita, joiden tehtävänä on ohjata dynaamisen kontrollivuon kulkua. Tässä monisteessa niitä kutsutaan kontrollia ohjaaviksi (tälle ei ole tietääkseni englanninkielistä termiä) ja niiden käyttöä kontrollinohjaukseksi. Yksi tärkeimmistä tällaisista konstruktioista on aliohjelma, mutta siihen palataan myöhemmin. Tässä luvussa tarkastellaan aliohjelman sisäistä kontrollivuon ohjausta. 5.1 Ehtolausekkeet Kontrollivuon ohjaus perustuu ohjelman kykyyn havainnoimaan omaa tilaansa ja tekemään sen perusteella päätöksiä. Tämän perustana on ehtolausekkeet: 47

2 48 LUKU 5. KONTROLLIVUON OHJAUS kokonaislukutyyppisten ja liukulukutyyppisten lausekkeiden arvojen vertailu (pienempi-kuin, suurempi-kuin, yhtäsuuri-kuin ym.) taulukoiden ja muiden koostearvojen vertailu alkioittain koosteiset ehdot, jotka muodostuvat useista loogisin konnektiivein yhdistetyistä ehdoista Tavallisesti loogiset operaattorit (looginen ja, looginen tai) ovat oikosuljettuja (engl. short-circuited), jolloin oikean operandin arvo lasketaan vain, jos koko lausekkeen arvo ei ole selvä jo pelkän vasemman oprandin arvon perusteella. Tämän järjestelyn etuna on, että ehdoissa voidaan tarkastella jotain sellaista asiaa, joiden pelkkä laskeminen on virhe, kunhan vain ensin samassa ehdossa rajataan pois tilanteet, joissa tällaiset virheet syntyvät. Esimerkiksi taulukon indeksointi ehdossa voidaan tehdä, vaikka vasta aiemmin samassa ehtolausekkeessa on tarkistettu, että indeksi on sallittu Erillään Ehtolausekkeet voidaan mallittaa formaalisti kahdella eri tavalla. Niistä voidaan tehdä oma syntaktinen kategoriansa (engl. (syntactic) sort). Abstraktina syntaksina tämä menisi jotensakin näin: c N x, y, z Var e, f Expr b BoolExpr b ::= true false x b 1 b 2 b 1 b 2 Tämä toimii yksinkertaisen kielen tapauksessa hyvin mutta muodostuu ongelmaksi kielen monipuolistuessa. Yksi yksinkertainen kysymys, joka herää jo ylläolevasta esimerkistä: voiko muuttujalla olla samanaikaisesti sekä luku- että totuusarvo? Denotationaalisella merkitysopilla tämä ero tulee selväksi. Ensiksi tilanne, jossa muuttujalla voi olla vain jompi kumpi: Env = Var (Q t, f })

3 5.1. EHTOLAUSEKKEET 49 E : Expr Env (Q E}) (5.1) E jos σ(x) tai σ(x) t, f } E x σ = (5.2) σ(x) muuten E jos E e = E tai E e = E E e + f σ = (5.3) E e + E f muuten E jos E e = E tai E e = E E e f σ = (5.4) E e E f muuten E jos E e = E tai E e = E E e f σ = (5.5) E e E f muuten B : BoolExpr Env t, f, E} B true σ = t (5.6) B false σ = f (5.7) E jos σ(x) tai σ(x) Q B x σ = (5.8) σ( x ) muuten E jos B b 1 σ = E E jos B b B b 1 b 2 σ = 1 σ = t ja B b 2 σ = E (5.9) t jos B b 1 σ = t ja B b 2 σ = t f muuten E jos B b 1 σ = E E jos B b B b 1 b 2 σ = 1 σ = t ja B b 2 σ = E (5.10) t jos B b 1 σ = t tai B b 2 σ = t f muuten Tässä E edustaa virhettä (joko tyyppivirhe tai määrittelemättömän muuttujan virhe). Entä jos muuttujalla on sekä luku- että totuusarvo? Env = (Var Q) (Var t, f }) E jos σn (x) E x (σ n, σ b ) = σ n (x) muuten E σ = (5.11)

4 50 LUKU 5. KONTROLLIVUON OHJAUS E jos σb (x) B x (σ n, σ b ) = σ b (x) muuten B σ = (5.12) Yhdessä Toinen vaihtoehto on antaa ehtolausekkeiden olla lausekkeita, jotka erotellaan toisistaan (dynaamisella tai staattisella) tyypillä: c N x, y, z Var e, f Expr e, f ::= true false e f e f Sitä, lasketaanko lauseke lukuarvon vai totuusarvon selville saamiseksi, kutsutaan laskentayhteydeksi (engl. evaluation context). Laskentayhteydestä riippuu, onko ehtolauseke tyyppivirhe vaiko juuri se mitä haluttiin. Denotationaalisessa merkitysopissa tämä esitetään antamalla lausekkeille kaksi semanttista funktiota, yksi kullekin laskentayhteydelle. Tyyppivirhe ilmaistaan tässäkin antamalla semanttisen funktion palauttaa E. Env = Var Q t, f } E : Expr Env Q E} σ(x) jos σ(x) Q E x σ = (5.13) E muuten E true σ = E (5.14) E false σ = E (5.15) E e f σ = E (5.16) E e f σ = E (5.17) E jos E e σ = E tai E f σ = E E e + f σ = (5.18) E e σ + E f σ muuten

5 5.2. PERÄKKÄISTYS 51 E jos E e σ = E tai E f σ = E E e f σ = E e σ E f σ muuten E jos E e σ = E tai E f σ = E E e f σ = E e σ E f σ muuten (5.19) (5.20) B : Expr Env t, f, E} B true σ = t (5.21) B false σ = f (5.22) E jos σ(x) tai σ(x) Q B x σ = (5.23) σ(x) muuten E jos B e σ = E E jos B e σ = t ja B f σ = E B e f σ = (5.24) t muuten jos B e σ = t ja B f σ = t f muuten E jos B e σ = E E jos B e σ = t ja B f σ = E B e f σ = (5.25) t muuten jos B e σ = t tai B f σ = t f muuten B e + f σ = E (5.26) B e f σ = E (5.27) B e f σ = E (5.28) Jatkossa tässä monisteessa käytetään tätä tulkintaa. 5.2 Peräkkäistys Käskykielten merkittävin kontrollia ohjaava konstruktio unohtuu helposti, sillä se on pääasiassa piilossa. Kyse on peräkkäistämisestä (sequencing): kun kaksi tai useampi lause on ohjelmassa peräkkäin, on tavanomainen tulkinta se, että ohjelman suoritus etenee kyseisten lauseiden kautta yksi kerrallaan. Tätähän tarkastelimme jo aiemmin suoraviivaohjelmien tapauksessa. Koska nyt lausekkeen arvo voi olla tyyppivirhe, pitää myös suoraviivaohjelmien denotationaalista merkitysoppia päivittää. C : Stmt Env Env E}

6 52 LUKU 5. KONTROLLIVUON OHJAUS σ (x, E e σ)} jos E e σ = E C x e σ = σ (x, B e σ)} jos B e σ = E (5.29) E muuten E jos C s σ = E C s; t σ = (5.30) C t (C s σ) muuten 5.3 Go to Aikoinaan ohjelmointikielten merkittävin kontrollia ohjaava konstruktio oli go to -lause. Se oli pesiytynyt kieliin symbolisten konekielten hyppykäskyistä. Go to ohjasi kontrollin (usein numerolla) nimettyyn paikkaan ohjelmassa. Sen lisäksi käytettiin ehdollista hyppykäskyä, jossa lausekkeen arvon perusteella valittiin, mihin kohtaa ohjelmaa hypätään. Tuloksena on vaikeasti ymmärrettävää ohjelmakoodia, ns. spagettikoodia. Sittemmin, 1970-luvulla, muotiin tuli rakenteinen ohjelmointi (structured programming). Se oli reaktio spagettikoodia vastaan lääkkeinä nähtiin ylhäältä alas (top-down) -suunnittelu, koodin modularisointi, rakenteiset tyypit, muuttujien selkeä nimeäminen ja laaja kommentointi. Rakenteisen ohjelmoinnin liikkeen yhtenä osana kampanjoitiin Dijkstra (1968) etunenässä go to -lauseen hävittämisen puolesta (mutta katso myös Knuth 1974). Nykyisin näyttää siltä, että go to on vähintäänkin uhanalainen laji: Java varaa sen avainsanaksi vain siksi, että kääntäjät voisivat antaa parempia virheilmoituksia. Toisaalta niissäkin kielissä, jotka eivät go to -nimistä lausetta sisällä, on sen tapaisia lauseita kuitenkin eri nimillä (Javan break on varsin voimakas heikennetty versio go to -lauseesta; Schemen call-with-current-continuation on sekin erikinen mutta erittäin voimakas versio go to -lauseesta). Rajoittamattoman hyppykäskyn mallittaminen denotationaalisesti on sen verran hankalaa, että siihen ei tässä monisteessa ryhdytä. Itse asiassa vastaava teoreettinen hankaluus oli yksi Dijkstran argumenteista go to -lausetta vastaan. 5.4 Valintalauseet Ohjelmoinnissa on kaksi pääasiallista valintatilannetta: suoritettava lause pitää valita joko jonkin ehtolausekkeen totuusarvon mukaan tai sitten jonkin toisen lausekkeen arvon mukaan. Toki jälkimmäinen riittäisi yksin,

7 5.4. VALINTALAUSEET 53 mutta edellinen on niin tärkeä erityistapaus, että sille on oma konstruktionsa. If-lauseen semantiikka on kaikille tuttu: selvitetään annetun testin totuusarvo if-lauseen kohdalla ja sitten suoritetaan jompi kumpi annetusta vaihtoehtoisesta lauseesta. Seuraavan denotationaalisen merkitysopin pohjana on luvussa 4.3 esitetty suoraviivaohjelmien kieli vahvistettuna luvussa esitetyllä totuusarvojen käsittelytavalla. e, f Expr s, t Stmt s, t ::= if e then s else t E C if e then s else t σ = C s σ C t σ jos B e = E jos B e = t jos B e = f (5.31) If-lauseen konkreetti syntaksi on hieman mielenkiintoisempi kysymys. Aivan vanhimmissa kielissä if-lauseeseen oli kovakoodattu go to, vain hyppääminen oli mahdollista. Tästä ei pidetä korkean tason ohjelmoinnissa, joten moderneissa ohjelmointikielissä if-lauseen then- ja else-osat voivat olla mielivaltaisen monimutkaisia, yleensä lohkoja. Tyypillinen konkreetti syntaksi on Pascalin käyttämän tyyppinen if x 0 then if x < 0 then writeln("negatiivinen") else writeln("nolla") else writeln("positiivinen") tai C:n tyylinen: if (x 0) if (x < 0) puts("negatiivinen\n"); else puts("nolla\n"); else puts("positiivinen\n");

8 54 LUKU 5. KONTROLLIVUON OHJAUS Jos kumpi tahansa näistä kirjoitetaan ilmiselvällä tavalla konkreetiksi kieliopiksi ja else-osan pois jättäminen sallitaan, kuten on tapana esimerkiksi 1 statement: if ( expression ) statement if ( expression ) statement else statement niin tällainen konkreetti kielioppi on moniselitteinen: kumpaan if-lauseeseen else-osa liittyy ohjelmanpätkässä if (x >= 0) if (x == 0) printf("1"); else printf("0"); eli tulostaako ohjelmanpätkä 0 silloin kun x on negatiivinen vai silloin kun se on positiivinen? Tätä ongelmaa sanotaan orvoksi elseksi (engl. dangling else), ja siihen on useita ratkaisuja: Orvon elsen ongelma juontuu siitä, että if-lauseen loppu ei ole yksikäsitteisesti määrätty. Tämä voidaan korjata niin, että lisätään iflauseen loppuun jokin lopetusavainsana; tyypillisiä ovat endif, end if ja fi (if väärin päin). Näin toimivat esimerkiksi Bourne Shell ja Algolit. Edellistä ratkaisua mukaillen voidaan tehdä myös niin, että thenlauseen tai jopa myös else-lauseen pitää olla lohko. Tällöin ei myöskään jää epäselväksi, mihin if-lause päättyy. Näin toimii esimerkiksi Perl. Vielä yksi edellisten muunnelma on ilmaista ohjelman lohkorakenne sisennyksillä niin, että sisennyksillä on semanttista merkitystä. Tämän seurauksena kieliopin näkökulmasta jokainen then- ja elselause on lohko, joten ratkaisu on sukua edelliselle ratkaisulle. Näin toimii esimerkiksi Python. Mahdollista on myös pakottaa else-haaran käyttäminen kaikissa iflauseissa. Haskell noudattaa tätä ajatusta. Yleisin ratkaisu lienee kuitenkin julistaa, että if-else-parit löydetään etsimällä ensin sisimmälle if-lauseelle sitä tekstuaalisesti lähinnä oleva else ja sitten toiseksi sisimmälle if-lauseelle sitä tekstuaalisesti lähinnä oleva vielä käyttämätön else jne. Tämä vastaa sitä, mitä ohjelmoijat yleensä tarkoittavat. 1 Tässä C-kielen määrittelyssä käytetyssä notaatiossa vaihtoehdot on erotettu toisistaan siten, että ne kirjoitetaan eri riveille. Lisäksi välikesymbolit kirjoitetaan kursiivilla ja päätesymbolit tasalevyisellä kirjasimella.

9 5.5. TOISTOLAUSEET ELI SILMUKAT 55 If-lause toteuttaa valinnan kahden vaihtoehdon välillä riippuen ehtolauseen tuloksesta. Monesti käyttökelpoisempi on usean vaihtoehdon välillä valitseminen käyttäen valintaperusteena mielivaltaisen (yleensä kokonaislukutyyppisen) lausekkeen arvoa. Tällainen lause on case-lause (Csukuisissa kielissä switch-case). Case-lauseen rakenne on yksinkertainen. Se koostuu erottelulausekkeesta (engl. discriminator) sekä vähintään yhdestä arvo lause-parista. Sen suoritus alkaa laskemalla erottelulausekkeen arvo. Jos lauseessa on arvoa vastaava arvo lause-pari, kyseinen osalause suoritetaan. Yleensä lauseessa on myös mukana oletuslause, joka suoritetaan, jos erottelulausekkeen arvoa ei ollut paritettu minkään lauseen kanssa. switch (op) case OP_ADD: result = lrand + rrand; break; case OP_SUB: result = lrand - rrand; break; case OP_MUL: result = lrand * rrand; break; default: fputs("bad operator!\n", stderr); } 5.5 Toistolauseet eli silmukat Imperatiivisen ohjelmoinnin ytimessä on sijoituslauseiden ja peräkkäisyyden lisäksi silmukat (engl. loops) eli toistolauseet (engl. repetition statements). Varsin harvinainen mutta kaikista yleiskäyttöisin rakenne on loop. s, t ::= loop s exit if e t Tämän silmukan intuitiivinen semantiikka on, että joka iteraatiolla suoritetaan ensin s, sitten katsotaan, onko e tosi ja jos on, silmukka päättyy, muuten suoritetaan t ja aloitetaan uusi iteraatio. Varsin tavallinen tilanne, jossa tästä muodosta on hyötyä, on syötteen lukeminen, sillä monissa kielissä tiedon loppuminen saadaan selville yrittämällä lukea syötteen päättymisen jälkeen: loop c getchar; exit if c = EOF;... end loop

10 56 LUKU 5. KONTROLLIVUON OHJAUS Silmukkarakenteista kuuluisin on varmastikin while-rakenne: s, t ::= while e do s Tarpeellinen on usein myös perinteinen for-silmukka: s, t ::= for x e 1 to e 2 step e 3 do s joka tavallisesti määritellään kielioppimakeisena while-lauseen perusteella: for x e 1 to e 2 step e 3 do s my x = e 1 ; while (x < e 2 ) do s; x x + e 3 } } Ohjelmointikieltä, jossa on tuki suoraviivaohjelmille sekä if- ja whilelauseille, sanotaan joskus while-kieleksi. Sillä on keskeinen merkitys ohjelmoinnin teoriassa imperatiivisen ohjelmointikielen arkkityyppinä. Tämä johtuu siitä, että while-kielelle on olemassa selkeitä ohjelmien oikeaksi todistamiseen liittyviä formalismeja ja siitä, että while-kieli on yksinkertaisimmasta päästä kieliä, joka on laskennallisesti yhtä ilmaisuvoimainen kuin Turingin kone eli kykenee laskemaan kaikki (yleis)rekursiiviset (engl. general recursive) funktiot Vastaavasti kieltä, joka on muuten samanlainen kuin while-kieli paitsi, että while-silmukan tilalla on for-silmukka ja jossa lisäksi vaaditaan, että silmukkamuuttujaan ei voi sijoittaa silmukan sisällä, sanotaan for-kieleksi. Se ei, yllättäen, ole yhtä ilmaisuvoimainen kuin while-kieli, sillä sillä ei voi tehdä päättymätöntä silmukkaa eikä ylipäätään mitään silmukkaa, jonka iteraatioiden lukumäärä ei ole etukäteen tiedossa. Niinpä for-kieli kykenee laskemaan primitiivirekursiiviset (engl. primitive recursive) funktiot ja on Turingin konetta aidosti heikompi. On houkuttelevaa määritellä while-silmukan denotationaalinen merkitysoppi näin: E jos B e σ = E C while e do s σ = σ jos B e σ = f C while e do s (C s σ) jos B e σ = t mutta se rikkoo aiemmin esitettyä ehtoa, jonka mukaan yhtälön oikealla puolella saa määriteltävä semanttinen funktio (tässä C) esiintyä vain siten, että semanttisten sulkeiden sisällä on jokin vasemmalla puolella esiintyvä (meta)muuttuja. Tässähän C:lle annetaan parametriksi koko vasemmalla puolella esiintyvä while-rakenne!

11 5.5. TOISTOLAUSEET ELI SILMUKAT 57 Konkreettinen esimerkki siitä, miksi tuo on huono määritelmä, on tapaus while true do x x; tällöinhän yhtälö sievenee muotoon C while true do x x σ = C while true do x x σ (5.32) joka ei aseta minkäänlaisia rajoituksia sille, mikä kyseisen konstruktion sisältö on! Tuo huono määritelmä voidaan kuitenkin kirjoittaa myös näin: missä C while e do s σ = F e s (C while e do s ) σ E σ F e s f σ = E f (C s σ) jos E e = E jos E e = f jos E e = t ja C s σ = E muuten Niinpä C while e do s on (ei-rekursiivisen) funktion F e s (jokin) kiintopiste. Jos olisi olemassa operaattori µ, jolle pätee µ f = f (µ f ) toisin sanoen µ f on f :n kiintopiste voitaisiin while-lauseen semantiikka määritellä seuraavasti: C while e do s σ = (µ(f e s))σ (5.33) missä F on sama kuin edellä. Onko µ-operaattori olemassa? Siitä seuraavassa Kiintopisteteoriaa Osittain järjestetty joukko (X, X ) on hila (engl. lattice), jos jokaiselle epätyhjälle äärelliselle S X on olemassa pienin yläraja S (join, supremum) ja suurin alaraja S (meet, infimum). Hila on täydellinen (engl. complete), jos join ja meet on kaikilla, ei pelkästään äärellisillä, epätyhjillä osajoukoilla. Kansi (engl. top) on = P(X) ja pohja (engl. bottom) on = P(X); nämä ovat aina olemassa täydellisessä hilassa. Olkoon (X, ) osittain järjestetty joukko ja olkoon f : X X. Jos kaikilla x, y X pätee x y f (x) f (y), on f järjestyksen säilyttävä eli monotoninen. Olkoon (X, ) osittain järjestetty joukko, olkoon f : X X ja olkoon x X. Tällöin

12 58 LUKU 5. KONTROLLIVUON OHJAUS 1. x on f -suljettu, jos f (x) x, 2. x on f -konsistentti, jos x f (x) ja 3. x on f :n kiintopiste, jos se on sekä f -suljettu että f -konsistentti eli jos x = f (x). Teoreema 1 (Knaster Tarski). Olkoon (X, ) täydellinen hila ja olkoon f : X X monotoninen. Tällöin f :llä on ainakin yksi kiintopiste, ja sen kiintopisteiden joukko P on itse täydellinen hila. Erityisesti P = x x f (x) } ja P = x f (x) x } pätevät ja ovat itse f :n kiintopisteitä. Todistus. Sivuutetaan. Olkoon (X, ) täydellinen hila, olkoon f : X X monotoninen ja olkoon f :n kiintopisteiden joukko P. Tällöin merkitään µ f = P ( f :n pienin kiintopiste) ja ν f = P ( f :n suurin kiintopiste). Olkoon f : X X funktio ja olkoon S X. Tällöin merkintä f [S] tarkoittaa joukkoa f (x) x S }. Olkoon f : X X funktio. Tällöin f on Scott-jatkuva, jos sille pätee f [S] = f ( S) kaikilla S X. Teoreema 2 (Kiintopisteiteraatio). Olkoon (X, ) täydellinen hila, olkoon f : X X monotoninen ja Scott-jatkuva, olkoon s 0 = ja olkoot s i+1 = f (s i ) kaikilla i N. Jos s n on f :n kiintopiste, niin s n = µ f pätee. Todistus. Todetaan aluksi, että jos µ f =, on lause triviaalisti tosi. Voidaan siksi olettaa, että µ f =. Todistuksen muoto on reductio ad absurdum. Olkoon s n f :n kiintopiste ja olkoon s n = µ f. Koska kiintopisteet muodostavat hilan, täytyy olla µ f s n. Olkoon k N, k < n, siten että s k µ f ja s k+1 µ f. Nyt s k, µ f } = µ f ja f (µ f ) = µ f. Toisaalta f (sk ), f (µ f )} = s k+1, µ f } = µ f! Oletuksesta s n = µ f seuraa siis, että f ei ole Scott-jatkuva. Koska f on Scott-jatkuva, täytyy olla s n = µ f Informaatiojärjestys Denotationaalisessa merkitysopissa tarkasteltava osittaisjärjestys on informaatiojärjestys, jossa s t tarkoittaa, että toisaalta s:ssä on vähemmän informaatiota kuin t:ssä.

13 5.6. VAHTIKOMENNOT 59 Perusdatan, kuten lukujen, kanssa informaatiojärjestys on varsin tylsä. Tyyppivirhettä edustava E on vähiten informaatiota sisältävä alkio eli pohja. Tällöin informaatiojärjestys on seuraavanlainen: E a a b kun a = E Jotta saataisiin täydellinen hila, on lisättävä vastaavanlainen kansialkio. Sen tulkinta on normaalissa ohjelmoinnissa varsin eriskummallinen on liikaa, ristiriitaista tietoa mutta vahtikomentojen kohdassa sille on luonnollinen tulkinta (kaikki vastaukset kelpaavat). Mikään ei pakota siihen, että f ( ) = pätisi. Mikäli se pätee, f :n sanotaan olevan tarkka (engl. strict). Mikäli se ei päde, f :n sanotaan olevan epätarkka (engl. nonstrict). While-lauseen määritelmässä halutaan nimenomaan pienin kiintopiste; tällöin yhtälöin (5.32) tarkoittamassa tilanteessa merkitykseksi tulee pohjafunktio σ E. 5.6 Vahtikomennot Mielenkiintoinen variantti while-kielestä saadaan, kun kaikki if-lauseet ja silmukkarakenteet korvataan Dijkstran vahtikomennoilla Dijkstra (1976): s, t ::= if g do g g GuardedStmt g ::= e s g 1 g 2 Vahtikomento e s ilmaisee, että lause s suoritetaan vain jos e on tosi. Jos e on epätosi, vahtikomennon sanotaan olevan suorituskelvoton (engl. infeasible). Vahtikomento g 1 g 2 valitsee vahtikomennoista g 1 ja g 2 suoritettavaksi jomman kumman, kuitenkin niin, että suorituskelvotonta ei valita. Käytännössä siis vahtikomento e 1 s 1 e n s n toimii niin, että se valitsee jonkin sellaisen i:n, jolla vahtilauseke e i on tosi, ja suorittaa sitten s i :n; ja jos sellaista i:tä ei ole, koko vahtikomento on suorituskelvoton. Vahtikomentopohjainen if-lause suorittaa vahtikomennon, jos se on suorituskelpoinen, ja muuten ei tee mitään, sen sijaan do-lause suorittaa vahtikomennon toistuvasti kunnes se muuttuu suorituskelvottomaksi.

14 60 LUKU 5. KONTROLLIVUON OHJAUS Esimerkki 1. Seuraava vahtikomentopohjainen if-lause valitsee muuttujien a ja b arvoista pienemmän ja sijoittaa sen muuttujaan min: if a b min a a b min b Vahtikomennot tuovat ohjelmointikieleen epädeterminismin (engl. nondeterminism): täsmälleen samalla syötteellä sama ohjelma voi käyttäytyä eri tavoin. Denotationaalisesti ajatellen tämä tarkoittaa, että ohjelma tuottaa useita vastauksia (osittaisjärjestys on, pohja on ja kansi on Env): C : Stmt Env P(Env) σ (x, E e σ)}} jos E e σ = E C x e σ = σ (x, B e σ)}} jos B e σ = E (5.34) muuten C s; t σ = C t σ (5.35) C if g σ = σ C s σ σ} jos G g σ = G g σ muuten (5.36) C do g σ = µ(f g) σ (5.37) F : GuardedStmt (Env P(Env)) Env P(Env) σ} jos G g σ = F g ϕ σ = ϕσ muuten (5.38) σ G g σ G : GuardedStmt Env P(Env) C s σ jos B e σ = t G e s σ = muuten (5.39) G g 1 g 2 σ = G g 1 σ G g 2 σ (5.40) Epädeterminismiä on kahdenlaista: hyväntahtoista (engl. angelic nondeterminism) ja pahantahtoista (engl. demonic nondeterminism). Näiden kuvaavien nimien takaa löytyy kysymys siitä, miten suoritettava lause valitaan, kun vaihtoehtoja on useita. Hyväntahtoisessa epädeterminismissä valitaan aina ohjelman kannalta suotuisin suoritusvaihtoehto (toisin sanoen, jos valintakohdassa toinen

15 5.6. VAHTIKOMENNOT 61 vaihtoehto johtaa virhetilanteeseen ja toinen antaa oikean tuloksen, valitaan se oikeaan tulokseen johtava). Tämän toteuttaminen tietokoneohjelmassa tapahtuu yleensä kahdella mahdollisella tavalla: valintaa tehtäessä arvataan ja jos arvaus osoittautuu myöhemmin vääräksi, valinta tehdään uudestaan (peruutus, engl. backtracking) valintaa ei tehdä heti, vaan kaikki vaihtoehdot suoritetaan rinnakkain, ja jokin valmistuneista palautetaan tulokseksi Edellinen toimii vain, jos mikään vaihtoehto ei johda tunnistamattomaan umpisilmukkaan. Kumpikaan tapa ei ole kovin houkutteleva, jos ohjelmalla on valinnasta riippuvia sivuvaikutuksia. Vahtikomentojen epädeterministisyys on käytännössä aina pahantahtoista, sillä se on helpoin toteutettava. Kääntäjälle annetaan täysi valinnan vapaus: se voi esimerkiksi valita aina ensimmäisen niistä, aina viimeisen niistä tai sitten se voi esimerkiksi heittää arpaa niiden välillä (hui!). Fiksu optimoiva kääntäjä saattaa valita aina sen, joka on kevyin suorittaa. Pääsääntö on siis, että valinnanvapaus annetaan kääntäjälle (ja sen toteuttajalle) ja ohjelmoijan pitää hyväksyä se, että mikä tahansa suorituskelpoisista vaihtoehdoista valitaan. Ohjelmoija joutuu koodaamaan Murphyn laki mielessään: jos jokin voi mennä pieleen, se menee pieleen. Esimerkki 2. Seuraavassa ohjelmapätkässä a, b ja c ovat lukutaulukoita ja sekä a että b on järjestetty kasvavaan suuruusjärjestykseen. Ohjelmanpätkä yhdistää a:n ja b:n c:hen niin, että c:ssä on jokainen a:n ja b:n alkio ja c on kasvavassa suuruusjärjestyksessä. Muuttujassa n on taulukon a koko ja muuttujassa m on taulukon b koko. Taulukko c on riittävän iso. var i : unsigned int; j : unsigned int; k : unsigned int; begin i 0; j 0; k 0; do i < n (j m a[i] b[j]) begin c[k] a[i]; i i + 1; k k + 1 end j < m (i n a[i] b[j]) begin c[k] b[j]; j j + 1;

16 62 LUKU 5. KONTROLLIVUON OHJAUS end end k k Väitteet Väitteet (engl. assertions) ovat ehtolausekkeita, joiden odotetaan olevan aina tosia. Niiden tarkoituksena on dokumentoida ohjelmoijien tekemiä oletuksia ja osoittaa, milloin näitä oletuksia rikotaan. Ne ovat pääsääntöisesti testauksen apuvälineitä (testioraakkeleita). Yleiskäyttöisin tapa lisätä väitteet kieleen on lisätä siihen assert-lause: s, t ::= assert e C assert e σ = σ E jos B e σ = t muuten Tässä E edustaa tyyppivirheen lisäksi myös väitevirhettä. Hyödyllinen olisi lohkorakenne pre e 1 ; s; post e 2 }, jossa e 1 on väitelauseke, jonka tulee olla totta lohkoon tultaessa, ja jossa e 2 on väitelauseke, jonka tulee olla totta lohkosta poistuttaessa. Väitettä e 1 sanotaan esiehdoksi (engl. precondition) ja väitettä e 2 sanotaan jälkiehdoksi (engl. postcondition). Ajatus on, että tämä lohkorakenne ilmaisee sopimuksen: lohkon käyttäjän vastuulla on, että esiehto pätee, ja lohkon itsensä vastuulla on, että jälkiehto pätee. Jos lohkon käyttäjä rikkoo sopimuksen ja esiehto ei pädekään, lohkolla ei ole mitään vastuuta eikä sen tarvitse huolehtia jälkiehdosta. Näin esimerkiksi voidaan kirjoittaa seuraavasti: } pre a 0 b > 0; q a / b; r a % b; post a = q b + r 0 r r < b Muita hyödyllisiä väitteitä ovat ns. pysyväisväittämät (engl. invariants). Pysyväisväittämä liittyy tavallisesti johonkin muuttujaan tai tyyppiin rajoittaen ko. muuttujan tai tyypin arvoja. Esimerkiksi kalenterityypin pysyväisväittämä saattaa vaatia, että huhtikuussa on enintään 30 päivää. Toi-

17 5.7. VÄITTEET 63 saalta while-ohjelmien todistustekniikoissa merkittävä rooli on silmukkainvariantilla, joka ilmaisee jonkin (yleensä hyvinkin epätriviaalin) suhteen silmukkamuuttujan ja muiden muuttujien välillä. Tony Hoare on kirjoittanut mielenkiintoisia artikkeleita Hoare (2003, 2004) väitteiden käytöstä teoriassa ja käytännössä.

18 64 LUKU 5. KONTROLLIVUON OHJAUS

19 Luku 6 Lyhytaskelsemantiikka Denotationaalisen semantiikan hankaluutena on, että se vaatii nopeasti tuekseen voimakkaita matemaattisia välineitä pelkät silmukat tarvitsevat kiintopisteteoriaa, ja konstruktioiden kehittyessä myös tarvittava matemaattinen koneisto monimutkaistuu. Gordon Plotkinin Plotkin rakenteinen operationaalinen semantiikka (engl. structural operational semantics) eli siirtymäsemantiikka (engl. transition semantics) eli lyhytaskelsemantiikka (engl. small-step semantics) on vaihtoehto, jolla ei ole tätä ongelmaa. Sen idea on kuvata matemaattisesti ja sopivasti abstrahoituna tietokone, jonka konekieli kohdekieli on. 6.1 Tilat Lyhytaskelsemantiikan käyttämällä abstraktiotasolla tietokone on tilakone: kone on aina jossakin tilassa (engl. configuration), ja kone suorittaa ohjelmaa siirtymällä tilasta toiseen. Kuten oikeassakin tietokoneessa, suoritettava ohjelma on osa koneen tilaa. Samoin tilaan sisältyy ohjelmassa kulloinkin näkyvissä olevien muuttujien arvot (vrt. denotationaalisen semantiikan ympäristö-käsite). Joissakin koneissa tilaan sisältyy myös muuta. Tiloja on kahdenlaisia: välitiloja (engl. nonterminal state) ja päätöstiloja (engl. terminal state). Välitila on sellainen tila, jossa suoritettavaa on vielä, päätöstilassa ohjelman suoritus on päättynyt. Niinpä päätöstilaan ei sisälly ohjelmaa. Seuraavassa on yksinkertainen esimerkki siitä, miten suoraviivaohjelman x x + 1; y y + x suoritus voisi tällaisessa koneessa edetä, kun 65

20 66 LUKU 6. LYHYTASKELSEMANTIIKKA x:n alkuarvo on 5 ja y:n alkuarvo on 7: ( x x + 1; y y + x, (x, 5), (y, 7)}) ( y y + x, (x, 6), (y, 7)}) (x, 6), (y, 13)} Tässä siis välitilat ovat muotoa Γ N = Stmt Env ja päätöstilat muotoa Γ T = Env. Kaikkien tilojen joukkoa merkitään Γ = Γ N Γ T. Matemaattisesti ajatellen tilojen väliset siirtymät muodostavat relaation ( ) Γ N Γ. 6.2 Päättely Plotkinin keskeinen idea oli määritellä tilakoneen toiminta päättelyjärjestelmänä (engl. inference system). Se koostuu päättelysäännöistä (engl. inference rules), jotka ovat muotoa γ 1 γ 2 γ 3 γ 4 Tällainen päättelysääntö määrittelee, että siirtymä γ 3 γ 4 (eli säännön johtopäätös) on sallittu, jos siirtymä γ 1 γ 2 (eli säännön premissi) on sallittu. Useinkaan säännöllä ei ole yhtään premissiä, mutta useampi kuin yksi on harvinaista. Joskus säännölle annetaan reunaehtoja (engl. side conditions), joiden pitää olla tosi jotta sääntöä saisi käyttää. Päättelyjärjestelmässä on voimassa ns. suljetun maailman sääntö: jos jotain siirtymää ei salli mikään annettu sääntö, kyseinen siirtymä on kielletty. 6.3 While-kieli Suoraviivaohjelman lyhytaskelsemantiikka voidaan määritellä seuraavasti: ( x e, σ) σ (x, E e σ)} ( x e, σ) σ (x, B e σ)} ( s, σ) σ ( s ; t, σ) ( t, σ ) E e σ = E (6.1) B e σ = E (6.2) (6.3)

21 6.4. EPÄDETERMINISMI 67 ( s, σ) ( s, σ ) ( s ; t, σ) ( s ; t, σ ) (6.4) Tässä on yksinkertaisuuden vuoksi otettu käyttöön lausekkeiden denotationaalisesti määritellyt semanttiset funktiot B ja E. While-lauseen lyhytaskelsemantiikka on yksinkertainen: ( while e do s, σ) ( s ; while e do s, σ) B e σ = t (6.5) ( while e do s, σ) σ B e σ = f (6.6) Lausekkeidenkin laskeminen voitaisiin määritellä esimerkiksi seuraavaan tyyliin: ( y e, σ) σ (y, c)} ( x e + f, σ) ( x c + f, σ) ( y f, σ) σ (y, c)} ( x e + f, σ) ( x e + c, σ) σ(y) e N (6.7) σ(y) e N (6.8) ( x c + c, σ) σ (x, c + c )} (6.9) 6.4 Epädeterminismi Edellä annettu lausekkeiden lyhytaskelsemantiikka on jo epädeterministinen, koska se sallii yhteenlaskun operandien laskemisen kummassa järjestyksessä tahansa. Tämä epädeterminismi on kuitenkin mielenkiinnotonta, koska sillä ei voi olla vaikutusta ohjelman lopputulokseen. Todellinen epädeterminismi ilmenee vahtikomennoissa. Nyt tilat määritellään seuraavasti: Γ N = F} ((Stmt GuardedStmt) Env) Γ T = Env Tässä F merkitsee suorituskelvottomaksi todettua vaihtoehtoa. Lyhytaskelsemantiikka: ( g, σ) ( s, σ ) ( do g, σ) ( s; do g, σ ) ( g, σ) F ( do g, σ) σ (6.10) (6.11)

22 68 LUKU 6. LYHYTASKELSEMANTIIKKA ( g, σ) ( s, σ ) ( if g, σ) ( s, σ ) (6.12) ( e s, σ) ( s, σ) B e σ = t (6.13) ( e s, σ) F ( g 1, σ) ( s, σ ) ( g 1 g 2, σ) (s, σ ) ( g 2, σ) ( s, σ ) ( g 1 g 2, σ) (s, σ ) ( g 1, σ) F ( g 2, σ) F ( g 1 g 2, σ) F B e σ = f (6.14) (6.15) (6.16) (6.17) Jos kone on välitilassa ja on useampi kuin yksi sääntö, jota voidaan soveltaa, kone valitsee niistä jonkin. Jos kone on välitilassa eikä ole yhtään sovellettavissa olevaa sääntöä, kone jumiutuu (engl. becomes stuck), mikä aina ilmentää ohjelmassa taikka semantiikan määritelmässä olevaa virhettä. 6.5 Siirräntä Siirräntä eli viestintä ulkomaailman kanssa vaatii siirtymärelaation muokkaamista. Ensin kuitenkin laajennetaan kieli sisältämään syöte- ja tulostelauseet: c N x, y, z Var e, f Expr s, t Stmt s, t ::= x e s ; t if e then s else t while e do s read x write e Ideana on, että sellainen siirtymä, johon liittyy tulostusta tai lukemista, laputetaan kyseisellä tapahtumalla. Näin siirtymärelaatio onkin ( ) Γ N Γ T L, missä L = ɛ}?c c Q }!c c Q } on lappujen joukko. Lappu ɛ tarkoittaa, että siirräntää ei ole (ja se jätetäänkin yleensä

23 6.5. SIIRRÄNTÄ 69 kirjoittamatta näkyviin); huutomerkkilappu tarkoittaa tulostusta ja kysymysmerkkilappu tarkoittaa lukemista. Metamuuttujaa λ käytetään ilmaisemaan mielivaltaista lappua. Lappu kirjoitetaan tavallisesti nuolen päälle. Siirräntälauseiden lyhytaskelsemantiikka on seuraavanlainen: ( read x, σ)?c σ (x, c)} ( x e, σ) σ (x, c)} ( write e, σ)!c σ Samalla pitää peräkkäistys kirjoittaa uudestaan: (6.18) σ(x) (6.19) ( s, σ) λ σ ( s ; t, σ) λ ( t, σ ) ( s, σ) λ ( s, σ ) ( s ; t, σ) λ ( s ; t, σ ) (6.20) (6.21) Esimerkiksi ohjelma read x; x x + 1; write x käyttäytyy seuraavasti (kun syötteenä on 42): ( read x; x x + 1; write x, )?42 ( x x + 1; write x, (x, 42)}) ( write x, (x, 43)})!43 (x, 43)}

24 70 LUKU 6. LYHYTASKELSEMANTIIKKA

TIES542 kevät 2009 Denotaatio

TIES542 kevät 2009 Denotaatio TIES542 kevät 2009 Denotaatio Antti-Juhani Kaijanaho 27.1.2009 (korjauksia 28.1.2009) Denotationaalisessa merkitysopissa kukin (ohjelmointi)kielen konstrktiolle määritellään matemaattinen otus, jota sanotaan

Lisätiedot

kontrollivuon analyysejä optimointiensa tueksi ja myös tiettyjen merkitysopillisten

kontrollivuon analyysejä optimointiensa tueksi ja myös tiettyjen merkitysopillisten Luku 4 Kontrolli Tässä viimeisessä luvussa paneudutaan ohjelman kontrollin hallintaan. Keskeisin asia on aliohjelmakäsite, joka on teoreettisesti niin vahva, että valtaosa muista aiheeseen liittyvistä

Lisätiedot

Rekursiiviset tyypit

Rekursiiviset tyypit Rekursiiviset tyypit TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 20. helmikuuta 2007 Hiloista Kiintopisteet (Ko)rekursio Rekursiiviset

Lisätiedot

TIES542 kevät 2009 Kontrollivuon ohjaus

TIES542 kevät 2009 Kontrollivuon ohjaus TIES542 kevät 2009 Kontrollivuon ohjaus Antti-Juhani Kaijanaho 20. tammikuuta 2009 Sisältö 1 Testit 2 2 Käskykielten kontrollinohjaus 3 2.1 Valintalauseet 4 2.2 Toistolauseet eli silmukat 5 2.3 Vahtikomennot

Lisätiedot

Lisää pysähtymisaiheisia ongelmia

Lisää pysähtymisaiheisia ongelmia Lisää pysähtymisaiheisia ongelmia Lause: Pysähtymättömyysongelma H missä H = { w111x w validi koodi, M w ei pysähdy syötteellä x } ei ole rekursiivisesti lueteltava. Todistus: Pysähtymisongelman komplementti

Lisätiedot

Java-kielen perusteita

Java-kielen perusteita Java-kielen perusteita valintalauseet 1 Johdantoa kontrollirakenteisiin Tähän saakka ohjelmissa on ollut vain peräkkäisyyttä eli lauseet on suoritettu peräkkäin yksi kerrallaan Tarvitsemme myös valintaa

Lisätiedot

Ohjelmointikielten periaatteet Syksy Antti-Juhani Kaijanaho

Ohjelmointikielten periaatteet Syksy Antti-Juhani Kaijanaho Ohjelmointikielten periaatteet Syksy 2004 Antti-Juhani Kaijanaho Copyright c 2002, 2004 Antti-Juhani Kaijanaho Tästä teoksesta saa valmistaa kappaleita ja sen saa saattaa yleisön saataviin, muuttamattomana

Lisätiedot

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n)) Määritelmä: on O(g(n)), jos on olemassa vakioarvot n 0 > 0 ja c > 0 siten, että c g(n) kun n > n 0 O eli iso-o tai ordo ilmaisee asymptoottisen ylärajan resurssivaatimusten kasvun suuruusluokalle Samankaltaisia

Lisätiedot

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin. 2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet

Lisätiedot

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5) Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,

Lisätiedot

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 12 (opetusmoniste, kappaleet )

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 12 (opetusmoniste, kappaleet ) T-79.144 Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 12 (opetusmoniste, kappaleet 9.1 9.5) 30.11. 3.12.2004 1. Osoita lauselogiikan avulla oheisten ehtolausekkeiden ekvivalenssi. (a)!(a

Lisätiedot

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) Toistaiseksi helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Vaikeaa eroavuudet Pythonin ja C:n

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen

Lisätiedot

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

vaihtoehtoja TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 13. lokakuuta 2016 TIETOTEKNIIKAN LAITOS TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 13. lokakuuta 2016 Sisällys Harjoitustehtävätilastoa Tilanne 13.10.2016 klo 9:42 passed waiting redo submitters

Lisätiedot

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 5. Timo Savola. 28. huhtikuuta 2006 UNIX-käyttöjärjestelmä Luento 5 Timo Savola 28. huhtikuuta 2006 Osa I Shell-ohjelmointi Ehtolause Lausekkeet suoritetaan jos ehtolausekkeen paluuarvo on 0 if ehtolauseke then lauseke

Lisätiedot

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

Säännölliset kielet. Sisällys. Säännölliset kielet. Säännölliset operaattorit. Säännölliset kielet TIEA241 Automaatit ja kieliopit, kesä 2013 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 24. toukokuuta 2013 Sisällys Formaalit kielet On tapana sanoa, että merkkijonojen joukko on (formaali) kieli. Hieman

Lisätiedot

Ehto- ja toistolauseet

Ehto- ja toistolauseet Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden

Lisätiedot

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

Alityypitys. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos Alityypitys TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 5. maaliskuuta 2007 Muistatko tietueet? {I 1 = E 1,..., I n = E n } : {I

Lisätiedot

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti C! Perusteet 19.1.2017 Palautteesta (1. kierros toistaiseksi) (Erittäin) helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Ei selvää että main funktion pitikin

Lisätiedot

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

FORMAALI SYSTEEMI (in Nutshell): aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus FORMAALI SYSTEEMI (in Nutshell): Formaali kieli: aakkosto: alkeismerkkien joukko kieliopin määräämä syntaksi: sallittujen merkkijonojen rakenne, formaali kuvaus esim. SSM:n tai EBNF:n avulla Semantiikka:

Lisätiedot

Matematiikan tukikurssi, kurssikerta 3

Matematiikan tukikurssi, kurssikerta 3 Matematiikan tukikurssi, kurssikerta 3 1 Epäyhtälöitä Aivan aluksi lienee syytä esittää luvun itseisarvon määritelmä: { x kun x 0 x = x kun x < 0 Siispä esimerkiksi 10 = 10 ja 10 = 10. Seuraavaksi listaus

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2016 TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 8. syyskuuta 2016 Sisällys a https://tim.jyu.fi/view/kurssit/tie/ tiea241/2016/videoiden%20hakemisto Matemaattisen

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys For-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. If-else-lause vaihtoehtoisesti

Lisätiedot

ALKEIS-kielen semantiikan aksiomaattinen määrittely

ALKEIS-kielen semantiikan aksiomaattinen määrittely ALKEIS-kielen semantiikan aksiomaattinen määrittely Antti Jokipii antti.jokipii@republica.fi Antti Vuorenmaa anvuoren@cc.jyu.fi Eero Lempinen eerolem@cc.jyu.fi Pete Räsänen peter@cc.jyu.fi Tiivistelmä

Lisätiedot

Tietojenkäsittelyteorian alkeet, osa 2

Tietojenkäsittelyteorian alkeet, osa 2 TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 12. syyskuuta 2016 Sisällys vs Ovat eri asioita! Älä sekoita niitä. Funktiot Funktio f luokasta A luokkaan B, merkitään

Lisätiedot

13. Loogiset operaatiot 13.1

13. Loogiset operaatiot 13.1 13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.

Lisätiedot

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

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin Sisällys 17. Ohjelmoinnin tekniikkaa for-lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. if-else-lause vaihtoehtoisesti

Lisätiedot

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla

tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla 2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 19. syyskuuta 2016 TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 19. syyskuuta 2016 Sisällys Neuvoja opintoihin tee joka päivä ainakin vähän uskalla mennä epämukavuusalueelle en

Lisätiedot

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014 Yhtälönratkaisusta Johanna Rämö, Helsingin yliopisto 22. syyskuuta 2014 Yhtälönratkaisu on koulusta tuttua, mutta usein sitä tehdään mekaanisesti sen kummempia ajattelematta. Jotta pystytään ratkaisemaan

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015 TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 30. marraskuuta 2015 Sisällys t Väitöstilaisuus 4.12.2015 kello 12 vanhassa juhlasalissa S212 saa tulla 2 demoruksia

Lisätiedot

Insinöörimatematiikka A

Insinöörimatematiikka A Insinöörimatematiikka A Mika Hirvensalo mikhirve@utu.fi Matematiikan ja tilastotieteen laitos Turun yliopisto 2018 Mika Hirvensalo mikhirve@utu.fi Luentoruudut 3 1 of 23 Kertausta Määritelmä Predikaattilogiikan

Lisätiedot

Rekursiiviset palautukset [HMU 9.3.1]

Rekursiiviset palautukset [HMU 9.3.1] Rekursiiviset palautukset [HMU 9.3.1] Yleisesti sanomme, että ongelma P voidaan palauttaa ongelmaan Q, jos mistä tahansa ongelmalle Q annetusta ratkaisualgoritmista voidaan jotenkin muodostaa ongelmalle

Lisätiedot

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

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten Sisällys 16. Ohjelmoinnin tekniikkaa Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

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

jäsennyksestä TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 29. syyskuuta 2016 TIETOTEKNIIKAN LAITOS Kontekstittomien kielioppien TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 29. syyskuuta 2016 Sisällys Harjoitustehtävätilastoa Tilanne 29.9.2016 klo 8:41 (lähes kaikki kommentoitu) passed

Lisätiedot

16. Ohjelmoinnin tekniikkaa 16.1

16. Ohjelmoinnin tekniikkaa 16.1 16. Ohjelmoinnin tekniikkaa 16.1 Sisällys Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti

Lisätiedot

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A. Tehtävä. Tämä tehtävä on aineistotehtävä, jossa esitetään ensin tehtävän teoria. Sen jälkeen esitetään neljä kysymystä, joissa tätä teoriaa pitää soveltaa. Mitään aikaisempaa tehtävän aihepiirin tuntemusta

Lisätiedot

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

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: S A S B Samaan jäsennyspuuhun päästään myös johdolla S AB Ab ab: S A S B Yhteen jäsennyspuuhun liittyy aina tasan yksi vasen

Lisätiedot

5/20: Algoritmirakenteita III

5/20: Algoritmirakenteita III Ohjelmointi 1 / syksy 2007 5/20: Algoritmirakenteita III Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/17 Tämän

Lisätiedot

11. Javan toistorakenteet 11.1

11. Javan toistorakenteet 11.1 11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin

Lisätiedot

on rekursiivisesti numeroituva, mutta ei rekursiivinen.

on rekursiivisesti numeroituva, mutta ei rekursiivinen. 6.5 Turingin koneiden pysähtymisongelma Lause 6.9 Kieli H = { M pysähtyy syötteellä w} on rekursiivisesti numeroituva, mutta ei rekursiivinen. Todistus. Todetaan ensin, että kieli H on rekursiivisesti

Lisätiedot

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

Logiikan kertausta. TIE303 Formaalit menetelmät, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos. TIE303 Formaalit menetelmät, kevät 2005 Logiikan kertausta Antti-Juhani Kaijanaho antkaij@mit.jyu.fi Jyväskylän yliopisto Tietotekniikan laitos TIE303 Formaalit mentetelmät, 2005-01-27 p. 1/17 Luento2Luentomoniste

Lisätiedot

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista

Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista Täydentäviä muistiinpanoja Turingin koneiden vaihtoehdoista Antti-Juhani Kaijanaho 15. maaliskuuta 2012 1 Apumääritelmä Määritelmä 1. Olkoon Σ merkistö, jolla on olemassa täydellinen järjestys ( ) Σ 2.

Lisätiedot

Eloisuusanalyysi. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2009 TIETOTEKNIIKAN LAITOS. Eloisuusanalyysi.

Eloisuusanalyysi. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2009 TIETOTEKNIIKAN LAITOS. Eloisuusanalyysi. TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 16. marraskuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe E tiistai 1.12. klo 10 koodigenerointi (ilman rekisteriallokaatiota)

Lisätiedot

Muistutus aikatauluista

Muistutus aikatauluista Muistutus aikatauluista (Nämä eivät välttämättä koske avoimen yo:n opiskelijoita Erkki Kailan rinnakkaisella kurssilla) Luento 1: kotitehtävät sulkeutuvat 20.9 12:00, ennen tutoriaalia Tutoriaali 1 sulkeutuu

Lisätiedot

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. 31. maaliskuuta 2011 TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 31. maaliskuuta 2011 Sisällys Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti

Lisätiedot

Matematiikan tukikurssi, kurssikerta 2

Matematiikan tukikurssi, kurssikerta 2 Matematiikan tukikurssi kurssikerta 1 Relaatioista Oletetaan kaksi alkiota a ja b. Näistä kumpikin kuuluu johonkin tiettyyn joukkoon mahdollisesti ne kuuluvat eri joukkoihin; merkitään a A ja b B. Voidaan

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 5. marraskuuta 2015 TIEA24 Automaatit ja kieliopit, syksy 205 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 5. marraskuuta 205 Sisällys Käsiteanalyysiä Tarkastellaan koodilukkoa äärellisenä automaattina. Deterministinen äärellinen

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 2. helmikuuta 2012 TIEA241 Automaatit ja, kevät 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 2. helmikuuta 2012 Sisällys Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti lueteltava

Lisätiedot

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

Laskennan rajoja. TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 10. joulukuuta 2015 TIETOTEKNIIKAN LAITOS. TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 10. joulukuuta 2015 Sisällys TM vs yleiset kieliopit Lause Jokaiselle kielelle A seuraavat ovat yhtäpitävät: 1.

Lisätiedot

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

Geneeriset tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos Geneeriset tyypit TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 6. maaliskuuta 2007 Kysymys Mitä yhteistä on seuraavilla funktioilla?

Lisätiedot

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

DFA:n käyttäytyminen ja säännölliset kielet säännölliset kielet TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 9. marraskuuta 2015 Sisällys toiminta formaalisti Olkoon M = (Q, Σ, δ, q 0, F) deterministinen

Lisätiedot

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. tammikuuta 2012 TIEA241 Automaatit ja kieliopit, kevät 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 12. tammikuuta 2012 Sisällys Sisällys Äärellisiä automaatteja PUSH ON PUSH OFF Q T Q J C C H S C,Q C,Q 0 50s 1e

Lisätiedot

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I G. Gripenberg Aalto-yliopisto 3. huhtikuuta 2014 G. Gripenberg (Aalto-yliopisto) MS-A0402 Diskreetin matematiikan perusteetesimerkkejä,

Lisätiedot

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia

TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia TIES542 kevät 2009 Tyyppijärjestelmän laajennoksia Antti-Juhani Kaijanaho 16. helmikuuta 2009 Tyypitetyt ohjelmointikielet sisältävät paljon muitakin konstruktioita kuin yksinkertaisesti tyypitetyn lambda-kielen,

Lisätiedot

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä

Sekalaiset tehtävät, 11. syyskuuta 2005, sivu 1 / 13. Tehtäviä Sekalaiset tehtävät, 11. syyskuuta 005, sivu 1 / 13 Tehtäviä Tehtävä 1. Johda toiseen asteen yhtälön ax + bx + c = 0, a 0 ratkaisukaava. Tehtävä. Määrittele joukon A R pienin yläraja sup A ja suurin alaraja

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 16. marraskuuta 2015 ja ja TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho NFA:ksi TIETOTEKNIIKAN LAITOS 16. marraskuuta 2015 Sisällys ja NFA:ksi NFA:ksi Kohti säännöllisiä lausekkeita ja Nämä tiedetään:

Lisätiedot

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I

MS-A0402 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I MS-A040 Diskreetin matematiikan perusteet Esimerkkejä, todistuksia ym., osa I G. Gripenberg Aalto-yliopisto 3. huhtikuuta 014 G. Gripenberg (Aalto-yliopisto) MS-A040 Diskreetin matematiikan perusteetesimerkkejä,

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 1 Määrittelyjoukoista Tarkastellaan funktiota, jonka määrittelevä yhtälö on f(x) = x. Jos funktion lähtöjoukoksi määrittelee vaikkapa suljetun välin [0, 1], on funktio

Lisätiedot

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9

Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9 Diskreetin matematiikan perusteet Laskuharjoitus 2 / vko 9 Tuntitehtävät 9-10 lasketaan alkuviikon harjoituksissa ja tuntitehtävät 13-14 loppuviikon harjoituksissa. Kotitehtävät 11-12 tarkastetaan loppuviikon

Lisätiedot

Jäsennys. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Jäsennys. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Jäsennys TIEA341 Funktio ohjelmointi 1 Syksy 2005 Muistutus: Laskutehtävä ja tulos data Laskutehtava = Luku Double Yhteen Laskutehtava Laskutehtava Vahennys Laskutehtava Laskutehtava Tulo Laskutehtava

Lisätiedot

811120P Diskreetit rakenteet

811120P Diskreetit rakenteet 811120P Diskreetit rakenteet 2016-2017 4. Joukot, relaatiot ja funktiot Osa 3: Funktiot 4.3 Funktiot Olkoot A ja B joukkoja. Funktio joukosta A joukkoon B on sääntö, joka liittää yksikäsitteisesti määrätyn

Lisätiedot

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014 18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 19. tammikuuta 2012 TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 19. tammikuuta 2012 Sisällys Sisällys Muistathan A B -konstruktion 0 k 1 i 2 s 3 s 4 a 5 0 k 1 o 2 i 3 r 4

Lisätiedot

T kevät 2007 Laskennallisen logiikan jatkokurssi Laskuharjoitus 1 Ratkaisut

T kevät 2007 Laskennallisen logiikan jatkokurssi Laskuharjoitus 1 Ratkaisut T-79.5101 kevät 2007 Laskennallisen logiikan jatkokurssi Laskuharjoitus 1 Ratkaisut 1. Jokaiselle toteutuvalle lauselogiikan lauseelle voidaan etsiä malli taulumenetelmällä merkitsemällä lause taulun juureen

Lisätiedot

Pinoautomaatit. Pois kontekstittomuudesta

Pinoautomaatit. Pois kontekstittomuudesta TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. joulukuuta 2015 Sisällys Pinoautomaatti NFA:n yleistys automaatilla on käytössään LIFO-muisti 1 eli pino Pino

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 22. toukokuuta 2013 TIEA24 Automaatit ja kieliopit, kesä 3 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 22. toukokuuta 3 Sisällys Äärellisiä automaatteja ON PUSH PUSH OFF Q T J Q C C H S C,Q C,Q 0 40 60 80 00, 70 90 Deterministinen

Lisätiedot

b) Määritä myös seuraavat joukot ja anna kussakin tapauksessa lyhyt sanallinen perustelu.

b) Määritä myös seuraavat joukot ja anna kussakin tapauksessa lyhyt sanallinen perustelu. Johdatus yliopistomatematiikkaan Helsingin yliopisto, matematiikan ja tilastotieteen laitos Kurssikoe 23.10.2017 Ohjeita: Vastaa kaikkiin tehtäviin. Ratkaisut voi kirjoittaa samalle konseptiarkille, jos

Lisätiedot

Turingin koneen laajennuksia

Turingin koneen laajennuksia Turingin koneen laajennuksia Turingin koneen määritelmään voidaan tehdä erilaisia muutoksia siten että edelleen voidaan tunnistaa tasan sama luokka kieliä. Moniuraiset Turingin koneet: nauha jakautuu k

Lisätiedot

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016 ICS-C2000 Tietojenkäsittelyteoria Kevät 2016 Kierros 6, 22. 26. helmikuuta Huom: arviointiviikolla 15. 19.2. ei ole laskuharjoituksia! Demonstraatiotehtävien ratkaisut D1: (a) Osoita, että seuraava yhteydetön

Lisätiedot

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

Konsensusongelma hajautetuissa järjestelmissä. Niko Välimäki Hajautetut algoritmit -seminaari Konsensusongelma hajautetuissa järjestelmissä Niko Välimäki 30.11.2007 Hajautetut algoritmit -seminaari Konsensusongelma Päätöksen muodostaminen hajautetussa järjestelmässä Prosessien välinen viestintä

Lisätiedot

Palautetta viime luennosta

Palautetta viime luennosta Palautetta viime luennosta Kuka saa ja kenen täytyy suorittaa 5op kokonaisuus? Sivuaineopiskelijat suorittavat jos heidän sivuainekokonaisuuteen on merkitty niin Kokonaisuuksia on useita eri tiedekunnittain,

Lisätiedot

Luku 3. Syntaktisia kysymyksiä. 3.1 Lausekkeet

Luku 3. Syntaktisia kysymyksiä. 3.1 Lausekkeet Luku 3 Syntaktisia kysymyksiä Syntaksi eli kielioppi käsittelee ohjelmien muodollista oikeellisuutta pohtimatta merkitysopillisia eli semanttisia kysymyksiä. Kieliopilliset ominaisuudet ovat (useimmiten)

Lisätiedot

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, literaalivakio, nimetty vakio Tiedon merkkipohjainen tulostaminen 1 Tunnus Java tunnus Java-kirjain Java-numero

Lisätiedot

14.1 Rekursio tyypitetyssä lambda-kielessä

14.1 Rekursio tyypitetyssä lambda-kielessä Luku 14 Rekursiiviset tyypit Edellisessä luvussa esitetyt tietue- ja varianttityypit eivät yksinään riitä kovin mielenkiintoisten tietorakenteiden toteuttamiseen. Useimmissa ohjelmissa tarvitaan erilaisia

Lisätiedot

Attribuuttikieliopit

Attribuuttikieliopit TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. toukokuuta 2011 Sisällys t Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti

Lisätiedot

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä Ohjelmoinnin peruskurssien laaja oppimäärä Luento 8: Pienen ohjelmointikielen tulkki (ohjelmoitava laskin) (mm. SICP 4-4.1.5 osin) Riku Saikkonen 15. 11. 2012 Sisältö 1 Nelilaskintulkki, globaalit muuttujat

Lisätiedot

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna

Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna Epädeterministisen Turingin koneen N laskentaa syötteellä x on usein hyödyllistä ajatella laskentapuuna. q 0 x solmuina laskennan mahdolliset tilanteet juurena alkutilanne lehtinä tilanteet joista ei siirtymää,

Lisätiedot

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

jäsentämisestä TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho 27. marraskuuta 2015 TIETOTEKNIIKAN LAITOS TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 27. marraskuuta 2015 Sisällys Rekursiivisesti etenevä engl. recursive descent parsing Tehdään kustakin välikesymbolista

Lisätiedot

12. Javan toistorakenteet 12.1

12. Javan toistorakenteet 12.1 12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu

Lisätiedot

11/20: Konepelti auki

11/20: Konepelti auki Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon

Lisätiedot

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli TIE-20306 PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli Seminaariesitelmä ryhmä 24 Markku Ahokas Jani Kuitti i SISÄLLYSLUETTELO 1. YLEISTÄ EIFFELISTÄ... 1 1.1 Historia ja tausta... 1 1.2

Lisätiedot

Insinöörimatematiikka A

Insinöörimatematiikka A Insinöörimatematiikka A Demonstraatio 3, 3.9.04 Tehtävissä 4 tulee käyttää Gentzenin järjestelmää kaavojen johtamiseen. Johda kaava φ (φ ) tyhjästä oletusjoukosta. ) φ ) φ φ 3) φ 4) φ (E ) (E ) (I, ) (I,

Lisätiedot

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

Pinoautomaatit. TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 6. kesäkuuta 2013 TIETOTEKNIIKAN LAITOS. Pinoautomaatit. TIEA241 Automaatit ja kieliopit, kesä 2013 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 6. kesäkuuta 2013 Sisällys Aikataulumuutos Tämänpäiväinen demotilaisuus on siirretty maanantaille klo 14:15 (Ag Delta).

Lisätiedot

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

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 8. maaliskuuta 2012 TIEA241 Automaatit ja kieliopit, kevät 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 8. maaliskuuta 2012 Sisällys Ongelma-analyysiä Sisällys Ongelma-analyysiä Hypoteettinen ongelma The Elite Bugbusters

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 1 1 Matemaattisesta päättelystä Matemaattisen analyysin kurssin (kuten minkä tahansa matematiikan kurssin) seuraamista helpottaa huomattavasti, jos opiskelija ymmärtää

Lisätiedot

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

TIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013 TIEA241 Automaatit ja kieliopit, kesä 2013 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 29. toukokuuta 2013 Sisällys Chomskyn hierarkia (ja muutakin) kieli LL(k) LR(1) kontekstiton kontekstinen rekursiivisesti

Lisätiedot

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

Propositiot: Propositiot ovat väitelauseita. Totuusfunktiot antavat niille totuusarvon T tai E. Propositiot: Propositiot ovat väitelauseita. Totuusfunktiot antavat niille totuusarvon T tai E. Perusaksioomat: Laki 1: Kukin totuusfunktio antaa kullekin propositiolle totuusarvoksi joko toden T tai epätoden

Lisätiedot

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

Hahmon etsiminen syotteesta (johdatteleva esimerkki) Hahmon etsiminen syotteesta (johdatteleva esimerkki) Unix-komennolla grep hahmo [ tiedosto ] voidaan etsia hahmon esiintymia tiedostosta (tai syotevirrasta): $ grep Kisaveikot SM-tulokset.txt $ ps aux

Lisätiedot

Tutoriaaliläsnäoloista

Tutoriaaliläsnäoloista Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus

Lisätiedot

S BAB ABA A aas bba B bbs c

S BAB ABA A aas bba B bbs c T-79.148 Kevät 2003 Tietojenkäsittelyteorian perusteet Harjoitus 8 Demonstraatiotehtävien ratkaisut 4. Tehtävä: Laadi algoritmi, joka testaa onko annetun yhteydettömän kieliopin G = V, Σ, P, S) tuottama

Lisätiedot

FI3 Tiedon ja todellisuuden filosofia LOGIIKKA. 1.1 Logiikan ymmärtämiseksi on tärkeää osata erottaa muoto ja sisältö toisistaan:

FI3 Tiedon ja todellisuuden filosofia LOGIIKKA. 1.1 Logiikan ymmärtämiseksi on tärkeää osata erottaa muoto ja sisältö toisistaan: LOGIIKKA 1 Mitä logiikka on? päättelyn tiede o oppi muodollisesti pätevästä päättelystä 1.1 Logiikan ymmärtämiseksi on tärkeää osata erottaa muoto ja sisältö toisistaan: sisältö, merkitys: onko jokin premissi

Lisätiedot

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

Testaa: Vertaa pinon merkkijono syötteeseen merkki kerrallaan. Jos löytyy ero, hylkää. Jos pino tyhjenee samaan aikaan, kun syöte loppuu, niin Yhteydettömien kielioppien ja pinoautomaattien yhteys [Sipser s. 117 124] Todistamme, että yhteydettömien kielioppien tuottamat kielet ovat tasan samat kuin ne, jotka voidaan tunnistaa pinoautomaatilla.

Lisätiedot

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. 16. toukokuuta 2011 TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 16. toukokuuta 2011 Sisällys engl. random-access machines, RAM yksinkertaistettu nykyaikaisen (ei-rinnakkaisen)

Lisätiedot