Johdanto. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Johdanto. Luennoija.

Koko: px
Aloita esitys sivulta:

Download "Johdanto. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Johdanto. Luennoija."

Transkriptio

1 TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 8. syyskuuta 2009

2 assistentti Antti-Juhani Kaijanaho matematiikan opiskelijaksi JY:oon 1997 tietotekniikan LuK 2001 (tutkielma roskienkeruusta) tietotekniikan FM 2002 (pro gradu eräästä ohjelmistotekniikan formaalista menetelmästä) jatko-opintojen aihepiiri funktiokielten toteutustekniikat

3 n kääntäjätekniikan kokemus keskeneräisiä kääntäjiä eri kielille mallikääntäjiä ohjelmointikielten periaatteet -kurssille 2004 ja 2007 C-esikääntäjä 2006 (pääosin toimiva, ei aktiivikäytössä) Agora BASIC -kääntäjä 2006 (minimaalisesti käyttökelpoinen; kehitys pysähtynyt muiden projektien varjossa)

4 n yhteystiedot työhuone Ag C416.1 (tavattavissa parhaiten iltapäivisin) vastaanotto ti työpuhelin (014) sähköposti IRC: Freenode,IRCnet,OFTC kurssin IRC-kanava IRCnet (kanava-avain kaantajat)

5

6 Lähiopetus Suoritus Lähiopetus Suoritus

7 Lähiopetus luentoja maanantaisin klo ja tiistaisin klo (yht. 58 h) pääsääntöisesti Ag C233.1 poikkeuksellisesti Ag C133.1 ti ja ti poikkeuksellisesti Ag D121.1 ti 6.10., ti ja ti ohjausta keskiviikkoisin klo Finland-mikroluokassa (AgB212.1) pääosin ei läsnäolopakkoa Lähiopetus Suoritus

8 Muistutus: influenssapandemia influenssa A (H1N1) todennäköisesti yliopistolla yleinen tänä lukuvuonna luennoija saattaa sairastua todennäköisesti viikon tauko opetuksessa vaikutus harjoitustyöaikatauluun todennäköinen opiskelijoita todennäköisesti sairastuu ehdottomasti ei luennoille jne kuumeisena tai nuhaisena yksi kuumeeton päivä ja muiden oireiden huippu ohitettu ennen yliopistolle palaamista sairastuminen hyväksytään force majeure -esteeksi muutokset harjoitustyöaikatauluun sovitaan tarpeen mukaan erikseen Lähiopetus Suoritus

9 Tehdään 2 3 hengen ryhmissä. Hyväksytty tulos arvostellaan asteikolla 2 4. koko ryhmän yhteinen arvolause arvosteluperusteina työn valmiusaste tehtyjen ratkaisujen onnistuneisuus ja omintakeisuus aiheen vaativuusaste koodin selkeys ja dokumentointiaste Lähiopetus Suoritus

10 Tentti Tenttipäivät ovat , ja Hyväksytty tentti arvostellaan asteikolla 1 2. kysymykset esseetyyppisiä, edellyttävät kokonaisuuden ymmärtämistä Lähiopetus Suoritus

11 Kurssin arvolause Hyväksyttyyn suoritukseen vaaditaan hyväksytty tentti tai hyväksytty harjoitustyö. Arvolause (1 5) saadaan laskemalla tentin ja harjoitustyön arvolauseet yhteen. Lähiopetus Suoritus

12

13 Peruskysymys Mitä hyötyä on kääntäjätekniikastan opiskelusta, jos ei aio kääntäjäteknikoksi?

14 tekeminen on haasteellista Kääntäjäprojektin tekeminen kehittää ohjelmointi- ja projektinhallintataitoja. Onnistunut kääntäjäprojekti on vahva näyttö osaamisesta.

15 Teoria ja käytäntö kohtaavat Kääntäjä on käytännönläheinen ja hyödyllinen ohjelma. sisällä jylläävät algoritmit ja tietorakenteeet ovat epätriviaaleja ja pitkän tutkimustyön huipentumia. Kääntäjätekniikka oli tietojenkäsittelytieteen merkittävä tutkimusalue ja 1970-luvuilla. Nykyisin tutkimus keskittyy hienosäätöön ja tämän kurssin sisältöön kuulumattomiin optimointitekniikoihin.

16 Näkemystä kääntäjien toimintaan Kääntäjätekniikan tuntemus auttaa ymmärtämään teollisten kääntäjien aivoituksia. Olemassaolevia kääntäjiä ja kieliä oppii siten käyttämään paremmin.

17 Kääntäjätekniikka ei ole vain kääntäjiä varten Määritelmä Tietokonekieli on kieli, joka on tarkoitettu tietokoneen ymmärrettäväksi. Esimerkkejä monet dokumenttitiedostomuodot (.doc,.xml,.html,.odt,... ) useimmat sovellustason verkkoprotokollat (HTTP, ESMTP, NNTP, XMPP,... ) konfiguraatiotiedostot määrittelykielet (B, Z, VDM,... ) ohjelmointikielet

18

19 Konekieli Konekieli on tietokonekieli, jota tietokoneen keskusyksikkö ymmärtää sellaisenaan. Mikrokoodi Käytännössä konekieltä ei ymmärrä suoraan rauta, vaan keskusyksikön sisällä on ns. mikrokoodilla kirjoitettu tulkki tai JIT-kääntäjä. Tämä ei kuitenkaan näy ohjelmoijalle.

20 Instruction Set Architecture Konekieliä on erilaisia, ja tietokoneet jaetaan eri luokkiin (instruction set architecture eli ISA, suomeksi yleensä käskykanta-arkkitehtuuri) sen mukaan, mitä konekieltä kukin hallitsee: Tunnetuin on PC-koneiden x86(-32) eli IA32. PC:issä yleistymässä on x86-64 eli AMD64. Mobiililaitteissa yleisin on ARM. Macintosh-koneissa on tavallisesti m68k tai PowerPC luvun kotitietokoneissa usein 65xx, Z80 tai m68k ja 1990-lukujen työasemissa yleinen SPARC. Teollisessa käytössä on kuitenkin useita kymmeniä erilaisia ISA:ita.

21 Konekielten yleispiirteitä erittäin yksinkertainen tyypittömyys ( kaikki on sanoja ) rekisterit alkeistoimituksiin rajoittuminen abstraktiokeinojen puute

22 Konekielen Konekielinen ohjelma on jono käskyjä Kukin käsky koostuu (tavallisesti) operaatiokoodista eli opkoodista (engl. opcode) sekä 0 3 operandista: Käskyjen koodaustapa riippuu ISA:sta. Esimerkiksi IA32:ssa kolmitavuinen käsky 80 F1 12 käskee XORraamaan luvun 18 ja erään rekisterin arvon ja tallettamaan tuloksen ko. rekisteriin.

23 Symbolinen konekieli Tunnetaan myös nimellä assembly. Ihmisen luettavaksi tarkoitettu konekielen esitystapa. Yksi käsky esitetään yhdellä rivillä. Kullakin opkoodilla on lyhyt nimi eli muistikas (engl. mnemonic). Operandit esitetään havainnollisella tavalla. Yksinkertainen kääntäjä, ns. assembler, kääntää symbolisen konekielen konekieleksi. Joka ISA:lla on oma assemblynsä, joillakin on jopa useampia.

24 Esimerkki, osa I: C-kielinen ohjelma unsigned long str2ulong(char const * s) { unsigned long rv = 0; for (/**/; *s!= 0; s++) { rv = 10 * rv + (*s - 0 ); } return rv; }

25 Esimerkki, osa II: IA32:n AT&T-assembly.text.p2align 4,,15.globl str2ulong.type str2ulong: pushl %ebp xorl %edx, %edx movl %esp, %ebp movl 8(%ebp), %ecx movzbl (%ecx), %eax testb %al, %al je.l8.p2align 4,,15.L6: movsbl %al,%eax incl %ecx leal (%edx,%edx,4), %edx leal -48(%eax,%edx,2), %edx movzbl (%ecx), %eax testb %al, %al jne.l6.l8: popl %ebp movl %edx, %eax ret

26 Esimerkki, osa III: UltraSparc-assembly.section ".text".align 4.global str2ulong.type str2ulong, #function.proc 016 str2ulong:!#prologue# 0!#PROLOGUE# 1 ldub [%o0], %o4 sll %o4, 24, %g1 cmp %g1, 0 be.ll8 mov 0, %o3 mov %g1, %o4.ll6: add %o0, 1, %o0 ldub [%o0], %g1 sra %o4, 24, %o5 sll %g1, 24, %g1 orcc %g1, 0, %o4 sll %o3, 2, %g1 add %g1, %o3, %g1 add %g1, %g1, %o3 add %o3, %o5, %g1 bne.ll6 add %g1, -48, %o3.ll8: retl mov %o3, %o0

27 Esimerkki, osa IV: PowerPC-assembly.section ".text".align 2.globl str2ulong.type str2ulong: mr 11,3 lbz 0,0(11) li 3,0 cmpwi 0,0,0 bclr 12,2.L6: slwi 9,3,3 add 9,9,3 add 9,9,3 addi 9,9,-48 add 3,0,9 lbzu 0,1(11) cmpwi 0,0,0 bc 4,2,.L6 blr

28 Konekielen tyypit Konekielessä kaikki data on eri mittaisia bittijonoja. Kohdedatan pituus ja tulkinta riippuvat täysin opkoodista. Tyyppitarkastusta ei ole. tyypillisiä konekielen tyyppejä: n-bittinen etumerkitön kokonaisluku (aritmetiikka modulo 2 n ) n-bittinen etumerkillinen kokonaisluku (kahden komplementti) n bitin bittijono n bitin IEEE-liukuluku n = 8, 16, 32, 64 (paitsi liukuluvuilla n = 32, 64)

29 Tavallisimmat operandit Välitön operandi (immediate operand) Operandi on käskyyn sisältyvä lukuvakio. Rekisterioperandi (register operand) Operandi on rekisteri. Suora osoitus (direct addressing) Operandi on muistipaikka, jonka osoite sisältyy käskyyn. Epäsuora osoitus (indirect addressing) Operandi on muistipaikka, jonka osoite saadaan laskemalla yhteen rekisterin arvo ja käskyyn sisältyvä (etumerkillinen) lukuvakio.

30 Rekisterit keskusyksikön sisällä olevia nimettyjä muistiyksiköitä rekisterin käyttö olennaisesti muistin käyttöä nopeampaa joissakin ISA:issa laskenta mahdollista vain rekistereissä erittäin rajattu määrä, kourallisesta muutamaan kymmeneen 32-bittisiä kokonaislukurekistereitä IA32:ssa 8 kpl 32-bittisiä yleisrekistereitä ARM:ssa 16 kpl 64-bittisiä kokonaislukurekistereitä AMD64:ssa 16 kpl 64-bittisiä yleisrekistereitä SPARC:ssa 32 kpl

31 Käskylajit aritmeettiset alkeisoperaatiot bitittäiset alkeisoperaatiot ehdolliset ja ehdottomat hypyt muistinkäsittelyoperaatiot

32

33 Kääntäjä, lähdekieli ja kohdekieli Määritelmä Kääntäjä (engl. compiler) on tietokoneohjelma, joka ottaa yhdellä kielellä (lähdekieli, engl. source language) kirjoitetun tietokoneohjelman syötteenään ja tuottaa tulos saman tietokoneohjelman kirjoitettuna jollakin toisella kielellä (kohdekieli, engl. target language). Huomautus Usein kohdekieli on jokin konekieli tai symbolinen konekieli, mutta ei aina. Huomautus Tavallisesti kohdekieli on lähdekieltä yksinkertaisempi. Jos tilanne on päinvastainen ja kääntäjä pyrkii idiomaattiseen kohdekoodiin, puhutaan takaisinkääntäjästä (engl. decompiler).

34 Isäntäkieli Määritelmä Kieli, jolla kääntäjä itse on kirjoitettu, on sen isäntäkieli (engl. host language). Huomautus Toisinaan kääntäjän isäntäkieli ja lähdekieli ovat (olennaisilta osin) sama kieli. Tällöin kääntäjän odotetaan kykenevän kääntämään itsensä; tällainen kääntäjä on itsensä isännöivä (engl. self-hosting).

35 Isäntäarkkitehtuuri Määritelmä ISA, jossa kääntäjä on suoritettavissa, on sen isäntäarkkitehtuuri (engl. host architecture). Huomautus Tavallisimmin isäntäarkkitehtuuri on sama kuin kohdekieli. Jos näin ei ole, kääntäjä on ristiinkääntäjä (engl. cross-compiler).

36 Bootstrapping Määritelmä Prosessi, jolla itsensä isännöivä kääntäjä saadaan käännetyksi suoritettavaan muotoon, on nimeltään bootstrapping. Luentotehtävä Olet suunnitellut uuden ohjelmointikielen, ja haluat kirjoittaa sille itsensä isännöivän kääntäjän. Kuinka bootstrapping voisi onnistua?

37

38 Klassinen kääntäjän liukuhihna lähdeohjelma SELAAJA sanasjono JÄSENTÄJÄ VÄLIKOODIN GENEROIJA KOHDEKOODIN GENEROIJA puu välikoodi kohdeohjelma TARKASTAJA SOKERINPILKKOJA OPTIMOIJA OPTIMOIJA

39 Selaaja... lekseri, selain, palastelija, tokenisoija,... syötteenä lähdeohjelmaa esittävä merkkijono tulosteena jono sanasia (engl. token), pienimpiä merkityksellisiä osia, vrt. sanat suomen kielessä; tyypillisesti: kokonaislukuvakio 521 merkkijonovakio "kissa" välimerkki ; luokan nimi Window muuttujan nimi it avainsana while Välilyönnit ym. eivät yleensä ole sanasia. Selaaja voi myös antaa virheilmoituksia ja varoituksia sekä hylätä ohjelman virheellisenä.

40 Jäsentäjä... parseri, parsija, syntaktinen analysaattori,... syötteenä selaajan tuottama sanasjono tulosteena puu eli abstrakti jäsennyspuu tieto, joka kuvaa ohjelman (staattisen) loogisen rakenteen kukin sisäsolmu edustaa operaatiota ja sen lapsisolmut sen operandeja Jäsentäjä voi myös antaa virheilmoituksia ja varoituksia sekä hylätä ohjelman virheellisenä.

41 Tarkastaja... semanttinen analysoija, staattinen tarkastaja,... syötteenä jäsentäjän tai sokerinpilkkojan tuottama puu tulosteena sama puu (mahdollisesti täydennettynä) tarkastaa, että ohjelmassa ei ole mitään sellaisia virheitä, joiden takia kääntäminen tulisi keskeyttää, esimerkiksi: muuttujaa käytetään ennen määrittelyä (jos kieli tämän kieltää) funktiolle annetaan väärä määrä parametreja tyyppimäärittelyt ovat keskenään ristiriitaisia myös usein lisää puuhun muistiinpanoja, esimerkiksi tyyppi-informaatiota Tarkastaja on viimeinen osa, joka voi hylätä ohjelman virheellisenä. Myöhemmät osat olettavat koodin olevan virheetöntä.

42 Sokerinpilkkoja engl. desugarer ei ole kaikissa kääntäjissä syötteenä jäsentäjän tai tarkastajan tuottama puu Valinta riippuu kääntäjästä. Sokerinpilkkojan sijoittaminen tarkastajan jälkeen on käyttäjäystävällistä mutta monimutkaistaa tarkastajaa. tulosteena puu Pilkkoo käyttömukavuutta lisääviä rakenteita (eli syntaktista sokeria) yksinkertaisempiin osiin; esimerkiksi: for (int i = 0; i < n; i++) { s(i); } { int i = 0; while (i < n) { s(i); i++; } }

43 Välikoodin generoija engl. intermediate code generator syötteenä tarkastajan ja sokerinpilkkojan läpikäymä puu tulosteena ohjelma välikielellä esitettynä Välikieli on samalla abstraktiotasolla kuin kohdekieli mutta yksinkertaisempi ja säännöllisempi. esim. rajatun rekisteristön sijasta käytetään rajatonta väliaikaismuuttujien joukkoa Jotkut kääntäjät lopettavat kääntämisen tähän ja luovuttavat välikoodin tulkattavaksi ns. virtuaalikoneelle.

44 Optimoija syö ja tulostaa välikoodia tai syö ja tulostaa kohdekoodia koostuu tavallisesti monesta erillisestä osasta Analyysiosat tutkivat koodia ja tekevät siitä päätelmiä, joista sitten tehdään muistiinpanoja koodiin jatkokäyttöä varten. Muokkausosat muuttavat koodia analyysiosien tekemien havaintojen perusteella. monesti iteroidaan useita kertoja Tällä kurssilla opimointia tarkastellaan lähinnä vain tehokkaan rekisteriallokaation osalta.

45 Kohdekoodin generoija engl. (target) code generator syö välikoodia tulostaa kohdekoodia jos naiivi, tarvitsee usein kohdekoodin optimoijan (tyypillisesti ovisilmäoptimoija) kaverikseen

46 päät Etupää, engl. front end etupää on se osa kääntäjästä, joka on tekemisissä lähdekielen erityispiirteiden kanssa selaaja, jäsentäjä, tarkastaja, sokerinpilkkoja sekä välikoodin generoija. Välipää, engl. middle end välipää on se osa kääntäjästä, joka ei ole sen paremmin lähdekielen kuin kohdekielenkään kanssa tekemisissä suuri osa välikoodin optimoijasta. Takapää, engl. back end takapää on se osa kääntäjästä, joka on tekemisissä kohdekielen erityispiirteiden kassa kohdekoodin generoija, kohdekoodin optimoja sekä mahdollisesti osa välikoodin optimoijasta.

47 Kääntäjäkokoelmat Taitavasti laadittu välipää mahdollistaa etupäiden ja takapäiden vaihtamisen tarvittaessa. Tyypillinen esimerkki on GNU Compiler Collection (GCC). C++-etupää Java-etupää C#-etupää yhteinen välipää IA32-takapää ARM-takapää PowerPC-takapää Kääntäjä, jonka takapää on vaihdettavissa, on tähdättävä kääntäjä, engl. retargetable compiler.

48 vaihejako Vaihe (engl. pass) tarkoittaa ohjelman (sen esitystavasta riippumatta) läpikäyntiä kerran. Monet kääntäjän eri osat (esimerkiksi selaaja ja jäsentäjä) voidaan liittää toisiinsa limittäin siten, että niiden väliin ei muodosteta koko ohjelman kattavaa välitietotta. Tällöin ne muodostavat saman vaiheen. Toisaalta sama kääntäjän osa (tyypillisesti optimoija) saattaa käydä ohjelman läpi useamman kerran, jolloin se muodostaa useamman vaiheen. Menneinä aikoina kääntäjä saattoi olla koneiden resurssipulan vuoksi jaettu useaksi eri ohjelmaksi (kukin yksi vaihe), ja ne kommunikoivat keskenään massamuistin välityksellä. Tällöin vaiheiden määrän minimointi oli kannattavaa.

49 Kääntäjä osana käännöstyökalustoa Nykyaikana kääntäjät tuottavat harvoin suoraan ajettavaa ohjelmaa. Tulos on yleensä joko symbolista konekieltä tai linkittämätön konekielinen ohjelmayksikkö. lähdekielinen ohjelma ohjelmakirjastot KÄÄNTÄJÄ ASSEMBLER LINKITTÄJÄ ajettava ohjelma

50 ajuri lyhyt ohjelma, joka yhdistää kääntäjän vaiheet sekä kääntäjän ulkopuoliset välineet (assembler, linkkeri) helpottaa kääntäjän käyttämistä esim. komento gcc ei ole kääntäjä, vaan ajuri

51

52 Tulkki vs kääntäjä lähdeohjelma TULKKI tuloste syöte lähdeohjelma KÄÄNTÄJÄ syöte kohdeohjelma tuloste syöte syöttö syöjä tulostaja tulostus tuloste

53 Klassinen tulkki ei työstä ohjelmaa etukäteen mitenkään suorittaa ohjelmaa sitä mukaa kuin sitä lukee tekee hypyt siirtämällä syötteen lukukohtaa simuloi siis ko. kieltä suoraan ymmärtävää tietokonetta siksi kutsutaan myös virtuaalikoneeksi tällainen tulkki mahdollinen vain yksinkertaiselle lähdekielelle

54 Moderni tulkki sisältää kääntäjän etupään keskipään ja takapään tilalla välikielen klassinen tulkki välikieltä kutsutaan usein tavukoodiksi lähdekielinen ohjelma ETUPÄÄ tavukoodi syöte VIRTUAALIKONE tuloste

55 Tehtävänanto Suunnitelma Tehtävänanto Suunnitelma

56 n idea Muodostetaan 2 3 hengen ryhmiä. Kukin ryhmä laatii kurssin loppuun mennessä toimivan kääntäjän. Työ jakaantuu seitsemään inkrementtiin. Kunkin inkrementin aluksi luennolla käydään läpi ko. inkrementin teoria. Kunkin inkrementin lopuksi pidetään maanantailuennon paikalla seurantapalaveri, jossa katsotaan, miten kukin ryhmä on onnistunut. Inkrementin pituus 3 viikkoa, mutta inkrementit etenevät limittäin. Tehtävänanto Suunnitelma

57 Alustava aikataulu luennot (kpl) seuranta A (2) B Jäsennys (3) C Staattiset tarkistukset (3) D Välikielet (3) E Staattinen analyysi (3) F Naiivi koodigenerointi (3) G Fiksu koodigenerointi (3) H (2) Huomaa: muutokset ovat mahdollisia. Seurantaluennoilla on harjoitustyötä tekevien syytä olla paikalla (poislukien force majeure -esteet) Tehtävänanto Suunnitelma

58 Inkrementti A: ensimmäinen luento 7.9. seurantapalaveri tehtävänä muodostaa ryhmä ja laatia harjoitustyösuunnitelma Tehtävänanto Suunnitelma

59 Inkrementti B: Jäsennys ensimmäinen luento seurantapalaveri tehtävänä toteuttaa kääntäjän selaaja ja jäsentäjä Tehtävänanto Suunnitelma

60 Inkrementti C: Staattiset tarkistukset ensimmäinen luento seurantapalaveri tehtävänä toteuttaa tarkastaja ja mahdollinen sokerinpilkkoja Tehtävänanto Suunnitelma

61 Inkrementti D: Välikielet ensimmäinen luento seurantapalaveri tehtävänä määritellä välikieli ja toteuttaa välikielen generoija tähän inkrementtiin on lupa lopettaa, jos B D hyvin tehty harjoitustyön arvolause tyypillisesti 2 Tehtävänanto Suunnitelma

62 Inkrementti E: Staattinen analyysi ensimmäinen luento seurantapalaveri tehtävänä toteuttaa myöhemmin tarkemmin esiteltävät välikoodin optimoijan analyysiosat Tehtävänanto Suunnitelma

63 Inkrementti F: Naiivi koodigeneraattori ensimmäinen luento seurantapalaveri tehtävänä toteuttaa yksinkertainen kohdekoodin generaattori tarkoitus on, että kääntäjä tuottaa tämän vaiheen päätteeksi toimivaa koodia harjoitustyön arvolause tyypillisesti 3 Tehtävänanto Suunnitelma

64 Inkrementti G: Fiksu koodigeneraattori ensimmäinen luento seurantapalaveri tehtävänä toteuttaa myöhemmin tarkemmin esiteltävät välikoodin optimoijan analyysiosat sekä täydentää kohdekooin generaattoria iottamaan tästä hyöty irti Tehtävänanto Suunnitelma

65 Inkrementti H: Valmis harjoitustyö Luennot ovat varalla aikataulun lipsumisen varalta; jos lipsumista ei esiinny, ne käytetään kertaukseen ym. Inkrementti on tarkoitettu harjoitustyön viilaukseen: debuggaus, posliinin asentaminen jne. Ei seurantapalaveria; työ palautetaan luennoijalle arvioitavaksi viimeistään Arvio valmistuu viimeistään Tehtävänanto Suunnitelma

66 Huomautus aikataulusta Kurssi järjestetään ensimmäistä kertaa, joten aikataulu on lähinnä alustava arvio. Aikataulua tarkistetaan kurssin edetessä. Tehtävänanto Suunnitelma

67 Suunnitelmassa on oltava kääntäjän työnimi ryhmäläisten nimet ja yhteystiedot (vähintään sähköpostiosoite) lähdekielen alustava määrittely (myös alustavia esimerkkiohjelmia) kohdekielen alustava määrittely isäntäkielen valinta mahdollisesti vaatimusten prioriteettijärjestys ryhmän vastuualuejako alustava testaussuunnitelma Tehtävänanto Suunnitelma

68 Lähdekieli suositeltavaa ottaa olemassaoleva ohjelmointikieli pohjaksi suunnitelmassa hahmoteltava poikkeamat pohjaksi otetusta kielestä Kurssin aikana keretään todennäköisesti toteuttaa vain osa kielestä, joten halutut ominaisuudet on hyvä priorisoida. Tehtävänanto Suunnitelma

69 Lähdekielen vaatimukset Pakollisia (korkein prioriteeti): lukukelpoinen (ei siis binäärimössöä) kommentit vähintään kaksi eri tietotyyppiä (tyyppivirheet huomattava viimeistään ajon aikana) kokonaislukuaritmetiikka valintojen tekeminen (if tai muu vastaava) toisto (silmukka tai muu vastaava) paikalliset muuttujat parametrisoitavat aliohjelmat (esim. funktiot tai metodit) Tehtävänanto Suunnitelma

70 Hyviä kohdekieliä 1. simuloidussa ympäristössä suoritettava RISC-tyyppinen (symbolinen) konekieli Donald E. Knuthin MMIX (simulaattori asennettu mikroluokkiin) ARM (simuloituna) MIPS (simuloituna) PowerPC (simuloituna) Sparc (simuloituna) 2. aidossa ympäristössä suoritettava (symbolinen) konekieli IA-32 (hankala, erityisesti liukulukujen käsittelyssä) AMD64 PowerPC ARM 3. standardoitu välikieli (ei suositella turhan helppoa) LLVM JVM Parrot CIL Tehtävänanto Suunnitelma

71 Isäntäkielen valinnasta mikä tahansa ohjelmointikieli, jonka tulkkaaminen tai kääntäminen onnistuu luentosalissa (viimeistään omalla läppärillä) kiinnitä huomiota: Kuinka hyvin kieli tukee laajojen ohjelmien tekemistä? Kuinka helppoa sillä on käsitellä puu- ja graafitietorakenteita? Onko sille olemassa kielioppityökaluja (vrt. yacc, CUP)? Kuinka hyvin osaat kieltä jo valmiiksi? Suosittelen Haskellia ja muita ML-suvun kieliä (SML, OCaml), vain jos osaat niitä jo valmiiksi. Tehtävänanto Suunnitelma

72 Vastuun jako Ryhmässä on hyvä jakaa seuraavat vastuut: ryhmänjohtaja, joka huolehtii siitä, että tekeminen etenee ja ratkaisee kiistat siitä, kuka tekee mitäkin (lähde)kielitsaari, joka ratkaisee kiistat lähdekielen ominaisuuksista testi-inkvisiittori, joka vastaa testauksen kattavuudesta kohdekieliguru, joka tutustuu kohdekielen saloihin ja selvittää tarvittaessa vastaukset kohdekieltä koskeviin kysymyksiin työkaluguru, joka tutustuu valittuihin työkaluihin ja selvittää tarvittaesa vastaukset työkaluja koskeviin kysymyksiin Luonnollisesti samalla henkilöllä voi olla useita rooleja. Jokainen tietenkin osallistuu itse tekemiseen! Tehtävänanto Suunnitelma

73

74 Luennoilla mallina käytettävä esimerkkikääntäjä. Lähdekieli on C-kielestä mallia ottava kieli, joka tukee yksinkertaista olio-ohjelmointia ja yksinkertaista innokasta funktio-ohjelmointia. Kohdekielenä on AMD64:n symbolinen konekieli (nasm) Linuxissa. Isäntäkielenä on Java koska se on kaikille toivottavasti tuttu. En varsinaisesti suosittele.

75 Lähdekieli neljä sisäänttua tyyppiä: void (kuten C:ssä), bool (true ja false), byte (0 255) ja int (64 bittiä, etumerkillinen) taulukot pääosin kuten C:ssä funktiot pääosin kuten C:ssä sisäkkäiset funktiot sallittuja ylikuormitus kuin Javan metodeilla yksinkertaiset luokat ei moniperintää, ei Javan kaltaisia rajapintoja syntaksi kuin Javassa metodien ylikuormitus kuten Javassa rakentimet kuin Javassa roskienkeruu, ei finalisoijaa ei parametrisoituja tyyppejä

76 Hello, World! void main() { print("hello"); }

77 Kissa naukuu class Elain { public void aantele(); } class Kissa extends Elain { public void aantele() { print("miau!") } } void main() { Elain foo = new Kissa(); foo.aantele(); }

78 Taulukko-mapsum int mapsum(int(int) f, int[] a, int n) { int rv = 0; for (int i = 0; i < n; i = i + 1) { rv = rv + f(a[i]); } return rv; }

79 Testaussuunnitelma yksikkötestausta junitilla esimerkkiohjelmakokoelma

80

81 Seuraava deadline maanantai klo 12 ryhmä muodostettu ja harjoitustyösuunnitelma laadittu

Konekielinen ohjelmointi

Konekielinen ohjelmointi Konekielinen ohjelmointi Antti-Juhani Kaijanaho 9. tammikuuta 2007 1 Konekielet Konekielellä tarkoitetaan sitä kieltä, jota tietokone ymmärtää suoraan. Koska kaikki nykytietokoneet perustuvat samaan ideaan

Lisätiedot

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

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 9. marraskuuta 2009 TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 9. marraskuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe D tiistai 10.11. klo 10 välikielen generointi Vaihe E tiistai

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

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla ohjelmoida useita komponenteiltaan ja rakenteeltaan

Lisätiedot

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009 TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 27. lokakuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe D tiistai 10.11. klo 10 välikielen generointi Kääntäjän rakenne

Lisätiedot

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

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

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

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 13. lokakuuta 2009

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 13. lokakuuta 2009 TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 13. lokakuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe C tiistai 20.10. klo 10 kielivirheiden diagnoosi, sokerin

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 26. lokakuuta 2009

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 26. lokakuuta 2009 TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 26. lokakuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe D tiistai 10.11. klo 10 välikielen generointi Kääntäjän rakenne

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

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

Tietotekniikan valintakoe

Tietotekniikan valintakoe Jyväskylän yliopisto Tietotekniikan laitos Tietotekniikan valintakoe 2..22 Vastaa kahteen seuraavista kolmesta tehtävästä. Kukin tehtävä arvostellaan kokonaislukuasteikolla - 25. Jos vastaat useampaan

Lisätiedot

4. Lausekielinen ohjelmointi 4.1

4. Lausekielinen ohjelmointi 4.1 4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Hyvä ohjelmointitapa. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

Lisätiedot

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

Jäsennysalgoritmeja. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 29. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Jäsennysalgoritmeja TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 29. syyskuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe B tiistai 6.10. klo 10 selaaja ja jäsentäjä toimivat Kääntäjän

Lisätiedot

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä olevilla komponenteilla? Voisiko jollakin ohjelmointikielellä

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

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Luento

Lisätiedot

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1 5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2

Lisätiedot

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone

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

Käännös, linkitys ja lataus

Käännös, linkitys ja lataus Luento 10 (verkkoluento 10) Käännös, linkitys ja lataus Ohjelmasta prosessiin Käännösyksikkö Kääntämisen vaiheet Makrot, literaalit Staattinen ja dynaaminen linkitys Nimien sidonta Lausekielestä suoritukseen

Lisätiedot

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen Chapel TIE-20306 Ryhmä 91 Joonas Eloranta Lari Valtonen Johdanto Chapel on Amerikkalaisen Cray Inc. yrityksen kehittämä avoimen lähdekoodin ohjelmointikieli. Chapel on rinnakkainen ohjelmointikieli, joka

Lisätiedot

Silmukkaoptimoinnista

Silmukkaoptimoinnista sta TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 8. joulukuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe F maanantai 14.12. klo 12 rekisteriallokaatio Arvostelukappale

Lisätiedot

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.

Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia. Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka

Lisätiedot

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

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 2. marraskuuta 2009 ja ja TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 2. marraskuuta 2009 Sisällys ja Sisällys ja Seuraava deadline ja Vaihe D tiistai 10.11. klo 10 välikielen generointi

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

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

Java-kielen perusteet

Java-kielen perusteet Java-kielen perusteet Tunnus, varattu sana, kommentti Muuttuja, alkeistietotyyppi, merkkijono, Vakio Tiedon merkkipohjainen tulostaminen Ohjelmointi (ict1tx006) Tunnus (5.3) Javan tunnus Java-kirjain Java-numero

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

7. Näytölle tulostaminen 7.1

7. Näytölle tulostaminen 7.1 7. Näytölle tulostaminen 7.1 Sisällys System.out.println- ja System.out.print-operaatiot. Tulostus erikoismerkeillä. Edistyneempää tulosteiden muotoilua. 7.2 Tulostusoperaatiot System.out.println-operaatio

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

ITKP102 Ohjelmointi 1 (6 op)

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

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

Laitteistonläheinen ohjelmointi

Laitteistonläheinen ohjelmointi Laitteistonläheinen ohjelmointi 4 op Luennoija: Pertti Lehtinen Luennot: Perjantai 12-14 TB104 Esitiedot: Mikroprosessorit Perusohjelmointikurssi Kurssin osat: luennot, harjoitustyö, tentti Materiaali:

Lisätiedot

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

TIE448 Kääntäjätekniikka, syksy 2009. Antti-Juhani Kaijanaho. 7. joulukuuta 2009 TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 7. joulukuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe F maanantai 14.12. klo 12 rekisteriallokaatio Arvostelukappale

Lisätiedot

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

Ohjelmointi 1 / 2009 syksy Tentti / 18.12 Tentti / 18.12 Vastaa yhteensä neljään tehtävään (huomaa että tehtävissä voi olla useita alakohtia), joista yksi on tehtävä 5. Voit siis valita kolme tehtävistä 1 4 ja tehtävä 5 on pakollinen. Vastaa JOKAISEN

Lisätiedot

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten, Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten, että se pystyy suorittamaan kaikki mahdolliset algoritmit?

Lisätiedot

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä 12.1 12.2 12.3 12.4 Sisällys 12. Näppäimistöltä lukeminen Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä.. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit. Scanner-luokka.

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

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

TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. lokakuuta 2016 TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. lokakuuta 2016 Sisällys n tunnistin Jay : An Efficient Context-Free Parsing Algorithm. Communications of the

Lisätiedot

Muita rekisteriallokaatiomenetelmiä

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

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

ELM GROUP 04. Teemu Laakso Henrik Talarmo

ELM GROUP 04. Teemu Laakso Henrik Talarmo ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................

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

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

// Tulostetaan double-tyyppiseen muuttujaan hinta tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf(%.1f euros. Lue kukin tehtävänanto huolellisesti ja kokonaisuudessaan ennen kuin aloitat vastaamisen. Kustakin tehtävästä voi saada 0 6 pistettä. Tentin läpipääsyraja on 12 / 24 pistettä. Ratkaisut palautetaan WETO-järjestelmään

Lisätiedot

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta C++ - perusteet Java-osaajille luento 5/7: operaattoreiden ylikuormitus, oliotaulukko, parametrien oletusarvot, komentoriviparametrit, constant, inline, Operaattoreiden ylikuormitus Operaattoreiden kuormitus

Lisätiedot

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++? JAVA-OHJELMOINTI 3op A274615 JAVAN PERUSTEET LYHYT KERTAUS Teemu Saarelainen teemu.saarelainen@kyamk.fi Lähteet: http://java.sun.com/docs/books/tutorial/index.html Vesterholm, Kyppö: Java-ohjelmointi,

Lisätiedot

.NET ajoympäristö. Juha Järvensivu 2007

.NET ajoympäristö. Juha Järvensivu 2007 .NET ajoympäristö Juha Järvensivu juha.jarvensivu@tut.fi 2007 Käännösprosessi C# lähdekoodi C# kääntäjä CILtavukoodi JITkäännös Ajettava natiivikoodi Kehitysympäristössä ohjelmoijan toimesta Ajonaikana.NET

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

12. Näppäimistöltä lukeminen 12.1

12. Näppäimistöltä lukeminen 12.1 12. Näppäimistöltä lukeminen 12.1 Sisällys Arvojen lukeminen näppäimistöltä yleisesti. Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. Luetun arvon tarkistaminen. Tietovirrat ja ohjausmerkit.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

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

5. HelloWorld-ohjelma 5.1

5. HelloWorld-ohjelma 5.1 5. HelloWorld-ohjelma 5.1 Sisällys Lähdekoodi. Lähdekoodin (osittainen) analyysi. Lähdekoodi tekstitiedostoon. Lähdekoodin kääntäminen tavukoodiksi. Tavukoodin suorittaminen. Virheiden korjaaminen 5.2

Lisätiedot

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi 1 Javan perusteet Ohjelmointi IPO-malli Java lähdekoodista suoritettavaksi ohjelmaksi Vakio Muuttuja Miten Javalla näytetään tietoa käyttäjälle, miten Javalla luetaan käyttäjän antama syöte Miten Javalla

Lisätiedot

Harjoitustyön testaus. Juha Taina

Harjoitustyön testaus. Juha Taina Harjoitustyön testaus Juha Taina 1. Johdanto Ohjelman teko on muutakin kuin koodausta. Oleellinen osa on selvittää, että ohjelma toimii oikein. Tätä sanotaan ohjelman validoinniksi. Eräs keino validoida

Lisätiedot

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo Concurrency - Rinnakkaisuus Group: 9 Joni Laine Juho Vähätalo Sisällysluettelo 1. Johdanto... 3 2. C++ thread... 4 3. Python multiprocessing... 6 4. Java ExecutorService... 8 5. Yhteenveto... 9 6. Lähteet...

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 21.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 21.1.2009 1 / 32 Tyypeistä Monissa muissa ohjelmointikielissä (esim. Java ja C) muuttujat on määriteltävä ennen

Lisätiedot

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

C-ohjelmoinnin peruskurssi. Pasi Sarolahti C! C-ohjelmoinnin peruskurssi Pasi Sarolahti Mitä haluan oppia C-kurssilla? ja miksi? Tutustu lähimpään naapuriin Keskustelkaa miksi halusitte / jouduitte tulemaan kurssille 3 minuuttia è kootaan vastauksia

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

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

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista Sisällys 1. Omat operaatiot Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op FT Ari Viinikainen Tietokoneen rakenne Keskusyksikkö, CPU Keskusmuisti Aritmeettislooginen yksikkö I/O-laitteet Kontrolliyksikkö Tyypillinen Von Neumann

Lisätiedot

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer)

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer) Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer) 1 Suorituksenaikainen suorittimen ja muistin sisältö muisti suoritin

Lisätiedot

Johdanto Meta Kielten jaotteluja Historia. Aloitusluento. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho

Johdanto Meta Kielten jaotteluja Historia. Aloitusluento. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho Aloitusluento TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 8. tammikuuta 2007 Luennoija Antti-Juhani Kaijanaho

Lisätiedot

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen Ohjelmointitaito (ict1td002, 12 op) Kevät 2009 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-kehitysympäristö Java-ohjelma ja luokka

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 4 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten lauseisiin, lausekkeisiin ja aliohjelmiin liittyvät kysymykset. Tehtävä 1. Mitä

Lisätiedot

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1

Tietorakenteet ja algoritmit syksy Laskuharjoitus 1 Tietorakenteet ja algoritmit syksy 2012 Laskuharjoitus 1 1. Tietojenkäsittelijä voi ajatella logaritmia usein seuraavasti: a-kantainen logaritmi log a n kertoo, kuinka monta kertaa luku n pitää jakaa a:lla,

Lisätiedot

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

System.out.printf(%d / %d = %.2f%n, ekaluku, tokaluku, osamaara); Kysy Karilta tai Kimmolta, jos tehtävissä on jotain epäselvää. Kerro WETOon liittyvät ongelmat suoraan Jormalle sähköpostitse (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja

Lisätiedot

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

// Tulostetaan double-tyyppiseen muuttujaan hinta tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf(%.1f euros. Lue kukin tehtävänanto huolellisesti ja kokonaisuudessaan ennen kuin aloitat vastaamisen. Kustakin tehtävästä voi saada 0 6 pistettä. Tentin läpipääsyraja on 12 / 24 pistettä. Ratkaisut palautetaan WETO-järjestelmään

Lisätiedot

1. Omat operaatiot 1.1

1. Omat operaatiot 1.1 1. Omat operaatiot 1.1 Sisällys Yleistä operaatioista. Mihin operaatioita tarvitaan? Oman operaation määrittely. Yleisesti, nimeäminen ja hyvä ohjelmointitapa, määreet, parametrit ja näkyvyys. HelloWorld-ohjelma

Lisätiedot

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,

Lisätiedot

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Osoittimet Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan. Muistilohkon koko riippuu muuttujan tyypistä, eli kuinka suuria arvoja muuttujan

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

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1 9. Periytyminen Javassa 9.1 Sisällys Periytymismekanismi Java-kielessä. Piirteiden näkyvyys periytymisessä. Ilmentymämetodien korvaaminen. Luokkametodien peittäminen. Super-attribuutti. Override-annotaatio.

Lisätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti Tentaattori: Antti-Jussi Lakanen 20. toukokuuta 2016 Yleistä Tentti 1 oli pistekeskiarvon (11.6) perusteella vaikea. Omasta tehtäväpaperista saa kopion Antti-Jussilta,

Lisätiedot

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b Pythonin Kertaus Cse-a1130 Tietotekniikka Sovelluksissa Versio 0.01b Listat 1/2 esimerkkejä listan peruskäytöstä. > lista=['kala','kukko','kissa','koira'] ['kala','kukko','kissa','koira'] >lista.append('kana')

Lisätiedot

4. Luokan testaus ja käyttö olion kautta 4.1

4. Luokan testaus ja käyttö olion kautta 4.1 4. Luokan testaus ja käyttö olion kautta 4.1 Olion luominen luokasta Java-kielessä olio määritellään joko luokan edustajaksi tai taulukoksi. Olio on joukko keskusmuistissa olevia tietoja. Oliota käsitellään

Lisätiedot

Tiedon esitysmuodot. Luento 6 (verkkoluento 6) Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto

Tiedon esitysmuodot. Luento 6 (verkkoluento 6) Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto Luento 6 (verkkoluento 6) Tiedon esitysmuodot Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto Ohjelman esitysmuoto Rakenteellinen tieto 1 Tiedon tyypit Kommunikointi

Lisätiedot

Virtuaalikoneiden generointi Vmgen-kääntäjällä

Virtuaalikoneiden generointi Vmgen-kääntäjällä Virtuaalikoneiden generointi Vmgen-kääntäjällä Risto Saarelma Helsinki 18.4.2005 Ohjelmointikielten kääntäjät -kurssi HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos 1 Johdanto 1 Virtuaalikoneet ovat

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 12. huhtikuuta 2019 Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä. Yksi A4-kokoinen lunttilappu

Lisätiedot

Kertausluento luennoista 1-3 1

Kertausluento luennoista 1-3 1 Kertausluento 1 (lu01, lu02, lu03) Tietokonejärjestelmän rakenne ttk-91 ja sillä ohjelmointi Järjestelmän eri tasot Laitteiston nopeus ttk-91 rakenne ja käskykantaarkkitehtuuri Konekielinen ohjelmointi

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 19.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 19.1.2009 1 / 25 Mihin teekkari / diplomi-insinööri tarvitsee ohjelmointia? Pienten laskentasovellusten kirjoittaminen.

Lisätiedot

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus Luento 1 (verkkoluento 1) Tietokonejärjestelmä Järjestelmän e eri tasot Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus 1 Tietokone- järjestelmäj ä Käyttäjä Tietokonelaitteisto Oheislaitteet

Lisätiedot

8. Näppäimistöltä lukeminen 8.1

8. Näppäimistöltä lukeminen 8.1 8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)

Lisätiedot

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tällä luennolla Algebralliset tietotyypit Hahmonsovitus (pattern matching) Primitiivirekursio Esimerkkinä binäärinen hakupuu Muistattehan...

Lisätiedot

Harjoitus 3 (viikko 39)

Harjoitus 3 (viikko 39) Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Vältä liian pitkiä rivejä. Ohjelmointitehtävien

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen

Lisätiedot

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

System.out.printf(%d / %d = %.2f%n, ekaluku, tokaluku, osamaara); Mikäli tehtävissä on jotain epäselvää, laita sähköpostia vastuuopettajalle (jorma.laurikkala@uta.fi). Muista nimetä muuttujat hyvin sekä kommentoida ja sisentää koodisi. Ohjelmointitehtävien osalta palautetaan

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

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tyyppejä ja vähän muutakin TIEA341 Funktio ohjelmointi 1 Syksy 2005 Viime luennolla... Haskellin alkeita pääasiassa Hello World!... ja muita tutunoloisia ohjelmia Haskellilla Haskellin voima on kuitenkin

Lisätiedot

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

Oliot ja tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos Oliot ja tyypit TIES542 Ohjelmointikielten periaatteet, kevät 2007 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 19. maaliskuuta 2007 Olion tyyppi? attribuutti on oikeastaan metodi,

Lisätiedot