Johdanto. TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 8. syyskuuta 2009 TIETOTEKNIIKAN LAITOS. Johdanto. Luennoija.
|
|
- Jussi Hakala
- 7 vuotta sitten
- Katselukertoja:
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 Antti-Juhani Kaijanaho 9. tammikuuta 2007 1 Konekielet Konekielellä tarkoitetaan sitä kieltä, jota tietokone ymmärtää suoraan. Koska kaikki nykytietokoneet perustuvat samaan ideaan
LisätiedotTIE448 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ätiedotEloisuusanalyysi. 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ätiedotOngelma(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ätiedotTIE448 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ätiedotTIE448 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ätiedotJava-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ätiedotTIE448 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ätiedotTIEP114 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ätiedot4. 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ätiedotTIEP114 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ätiedotTIE448 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ätiedotTIEA241 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ätiedotHarjoitustyö: virtuaalikone
Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman
LisätiedotTietotekniikan 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ätiedot4. 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ätiedotLuento 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ätiedotLuento 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ätiedotJä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ätiedotOngelma(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ätiedotITKP102 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ätiedotLuento 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ätiedot5. 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ätiedotLuento 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ätiedot815338A 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ätiedotKää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ätiedotChapel. 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ätiedotSilmukkaoptimoinnista
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ätiedotAS-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ätiedotOhjelmointitaito (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ätiedotTIE448 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ätiedotAttribuuttikieliopit
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ätiedotTIE 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ätiedotJava-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ätiedotOhjelmoinnin 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ätiedot7. 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ätiedotOhjelmointikielten 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ätiedotITKP102 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ätiedot11/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ätiedotLaitteistonlä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ätiedotTIE448 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ätiedotOhjelmointi 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ätiedotOngelma(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ätiedotSisä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ätiedot11. 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ätiedotTIEA241 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ätiedotMuita 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ätiedot12. 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ätiedotELM 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ätiedotTIEA241 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.
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ätiedotOperaattoreiden 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ätiedotJAVA-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 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ätiedottää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ätiedot12. 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ätiedotOhjelmoinnin 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ätiedotLisää 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ätiedot5. 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ätiedotJavan 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ätiedotHarjoitustyö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ätiedotConcurrency - 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ätiedotOhjelmoinnin 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ätiedotC-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ätiedot12. 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ätiedotSe 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ätiedotSisä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ätiedotOhjelmassa 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ätiedotTIEP114 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ätiedotLuento 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ätiedotJohdanto 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ätiedotOhjelmointitaito (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ätiedot815338A 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ätiedotTietorakenteet 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ätiedotSystem.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.
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ätiedot1. 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ätiedot815338A 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ätiedotOhjelmassa 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ätiedotTutoriaalilä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ätiedot9. 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ätiedot8. 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ätiedotITKP102 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ätiedotPythonin 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ätiedot4. 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ätiedotTiedon 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ätiedotVirtuaalikoneiden 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ätiedotITKP102 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ätiedotKertausluento 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ätiedotOhjelmoinnin 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ätiedotLuento 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ätiedot8. 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ätiedotAlgebralliset 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ätiedotHarjoitus 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ätiedotOhjelmoinnin 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ätiedotSystem.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ätiedotTIEA241 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ätiedot815338A 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ätiedotTyyppejä 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ätiedotOliot 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