TARTU ÜLIKOOL MATEMAATIKA-INFORMAATIKATEADUSKOND Arvutiteaduse instituut Infotehnoloogia eriala Roman Jagomägis Programmeerimiskeel privaatsust säilit

Suurus: px
Alustada lehe näitamist:

Download "TARTU ÜLIKOOL MATEMAATIKA-INFORMAATIKATEADUSKOND Arvutiteaduse instituut Infotehnoloogia eriala Roman Jagomägis Programmeerimiskeel privaatsust säilit"

Väljavõte

1 TARTU ÜLIKOOL MATEMAATIKA-INFORMAATIKATEADUSKOND Arvutiteaduse instituut Infotehnoloogia eriala Roman Jagomägis Programmeerimiskeel privaatsust säilitavate rakenduste loomiseks Bakalaureusetöö (4 AP) Juhendaja: Dan Bogdanov Autor: mai 2008 Juhendaja: mai 2008 Lubada kaitsmisele Professor mai 2008 TARTU 2008

2 Sisukord 1 Sissejuhatus 4 2 Privaatsust säilitavad arvutused Ülesandepüstitus Arvutusraamistik Sharemind Lahenduse kirjeldus Keele struktuur Registrimasin Kommentaarid Identifikaatorid Instruktsioonid Andmetüübid Avaldised Muutujad Vektoritega töötamine Sisend ja väljund Vookontroll Matemaatilised käsud Privaatsust säilitavad instruktsioonid Pinumasin Pinu modifitseerimine Kuhja käsud Andmebaasi käsud Aritmeetika Keele ja interpretaatori ehitamine Interpretaator, selle struktuur ja tööp~ohim~ote Leksikaanalüsaator Süntaksianalüsaator Andmed Avaldised Instruktsioonid Käsuprotsessor Vookontroll Tulemused 32 5 Kokkuv~ote 33 2

3 6 A programming language for creating privacy-preserving applications Kasutatud kirjandus 35 Lisa 1 36 Lisa 2 38 Lisa

4 1 Sissejuhatus Privaatsuse säilitamine on oluline, seda eriti meditsiini, finantsi ja ühiskonna valdkonnas, kus tihtipeale soovitakse koguda ja analüüsida tundlikke andmeid. Andmete kogumine osutub raskeks privaatsuse rikkumise t~ottu. Inimesed ei usalda teineteist ning seega jääb arengut toov andmete statistiline analüüs tegemata v~oi satuvad andmed valesse kätesse. Tagajärjena on raskendatud erinevate eluvaldkondade parendamine, andmeid kuritarvitatakse ning ühiskonna areng pidurdub. On loodud lahendusi, mis lubavad analüüsida andmeid privaatsust rikkumata. Need ei ole kahjuks eriti paindlikud v~oi on nende abil privaatsust säilitavate süsteemide ehitamine liiga keeruline. Seega oleks vaja luua lihtne viis selliste süsteemide ehitamiseks. Käesolevas töös luuakse suhteliselt madalatasemeline, ent piisavalt paindlik keel ja selle interpretaator, mis p~ohineb privaatsust säilitavaid arvutusi teha v~oimaldaval raamistikul Sharemind. Loodava keele abil saab v~oimalikuks lihtne ja kiire privaatsust säilitavaid arvutusi teostavate rakenduste loomine. Kogu keerukus peidetakse keele interpretaatori sisse. Lisaks privaatsete süsteemide ehitamise lihtsustamisele on motivatsiooniks ka Sharemindi raamistiku areng. Loodav keel ja interpretaator saavad raamistiku osaks ning pikemas perspektiivis hakkavad toetama selle koosseisus töötava virtuaalmasina autonoomset juhtimist. Töös kirjeldatakse lühidalt Sharemindi raamistikku, loodud keelt, selle grammatikat, käsustikku ja keele interpretaatorit. Tööga koos esitatakse töötava interpretaatori lähtekood. Lisaks tuuakse ka m~oned näidisprogrammid, mis on kirjutatud loodud keeles ja mida saab interpretaatori abil käivitada. 4

5 2 Privaatsust säilitavad arvutused 2.1 Ülesandepüstitus Dan Bogdanov ja Sven Laur on kirjeldanud Sharemindi-nimelise raamistiku [1], mis kujutab endast privaatsust säilitavate operatsioonidega virtuaalmasinat. Selle abil on v~oimalik ehitada süsteeme, mis tagavad andmete privaatsuse säilimise. Raamistikus on k~oik operatsioonid realiseeritud eraldi funktsioonidena, kuid nende abil programmide tegemine on ebamugav. Programmeerija peab kogu aeg kontrollima, kas operatsioonide tegemisel ei tekkinud vahepeal vigu. Vigade kontrollimine viib aga tähelepanu tegelikust lahendusest eemale ning teeb programmikoodi kohmakaks ja raskemini arusaadavaks. Antud probleem on lahendatav sellise interpretaatori ehitamisega, mis kasutab virtuaalmasinat ning oskaks programmide täitmisel ise vigu kontrollida. Lisaks on tarvis luua lihtne keel, milles programme kirja panna. Teiseks, privaatsust säilitav virtuaalmasin töötab eraldi autonoomse süsteemina, mida peaks olema v~oimalik mingil määral kaugjuhtida. Seega on pikemas perspektiivis vaja süsteemile lisada saadetavate käskude v~oi koguni suuremate programmide täitmise tugi. Virtuaalmasina juhtimine ühe käsu haaval, kasutades juba sisseehitatud funktsioone, ei luba süsteemile piisavalt keerulisi ja paindlikke ülesandeid anda. Samuti on tavalises kompileeritavas keeles kirjutatud programme keeruline teises süsteemis käivitada. Need probleemid on lahendatavad uue keele loomise ning virtuaalmasinasse keele interpretaatori sisseehitamise abil. Süsteemi osana töötav interpretaator laseb käivitada programme, ilma et süsteemi peaks iga kord taaskäivitama. Arvestades tekkinud probleeme ja vajadusi koostatakse käesolevas töös lihtne keel, mis v~oimaldab kasutada Sharemindi privaatseid funktsioone. Loodava keele süntaks on assembleri stiilis, kuid sisaldab ka m~oningaid k~orgemate keelte elemente, näiteks matemaatilisi, loogilisi ja s~oneavaldisi. Kuna Sharemindi raamistiku operatsioonid töötavad näiteks vektoriseeritud ja s~oneandmetega, siis tuleb keeles realiseerida k~oik vajalikud andmetüübid. Samuti peab keel mingil määral v~oimaldama programmivoo kontrolli, mis on vajalik keerulisemate algoritmide koostamiseks. Lisaks luuakse interpretaatori osana lihtne virtuaalmasin avalike funktsioonide ja andmete kasutamiseks. Interpretaatori üheks ülesandeks on ka veakontroll. Interpretaatorit peab olema v~oimalik lihtsal moel integreerida ka rakenduse sisse, kus see saaks ükshaaval täita sealt saadud instruktsioone. Samuti peab saama lugeda ja täita suuremaid programme otse failist. Seega on m~oistlik luua klass, mis pakuks lihtsat liidest interpretaatori kasutamiseks. Seda klassi kasutades kirjutatakse ka väike rakendus, mis töötaks inimese ja interpretaatori vahelülina, täites inimese poolt sisestatud instruktsioone. 5

6 2.2 Arvutusraamistik Sharemind Sharemind on privaatsust säilitavaid arvutusi v~oimaldav raamistik, mille alusideeks on osakutega arvutamine. Raamistikus kasutatakse andmete salvestamiseks aditiivset ühissalastusskeemi, mis p~ohim~otteliselt tähendab andmete osakuteks jagamist ning viimaste erinevate osapoolte vahel ära jaotamist. Iga osapool saab andmetest ühe osaku, millest ei ole v~oimalik originaalseid andmeid taastada. Nüüd saavad osapooled nende andmetega arvutusi teha, kasutades raamistikus kirjeldatud turvalisi ühisarvutuse protokolle. Hetkel toetab Sharemind kolme osapoolega konfiguratsiooni. Sharemindi protokollid on informatsiooni-teoreetiliselt turvalised ausas-kuid-uudishimulikus mudelis. Kuigi see ei kaitse andmeid pahatahtlike osapoolte eest, annab see rohkem kui m~oistliku privaatsusgarantii. Raamistik kujutab endast pinumasina p~ohim~ottel töötavat virtuaalmasinat, millel on andmetega opereerimiseks sisse ehitatud vajalikud pinud, kuhi, andmebaas ja hulk erinevaid operatsioone, mida saab mainitud andmestruktuurides sisalduvate andmetega teostada. Virtuaalmasin koosneb andmekaevandusserveritest, mida edaspidi nimetame mineriteks. Iga osapoolel jookseb üks mineri instants, millel on ligipääs arvutiv~orku. Minerid omakorda kujutavad endast autonoomseid virtuaalmasinaid igal mineril on oma pinu ja muud vajalikud meetmed osakute töötlemiseks ja säilitamiseks ning käskude täitmiseks. Samuti on olemas üks keskne server kontroller, mis juhib minerite tööd. Sharemind töötab nii, et kontrollerist sisestatud andmed jaotatakse osakuteks ning jaotatakse seejärel minerite vahel ära. Iga miner saab ühe osaku ning salvestab selle mällu. Siis annab kontroller mineritele käske, mida nende andmetega teha. Minerid suhtlevad omavahel üle arvutiv~orgu, kasutades turvalisi protokolle, mis säilitavad andmete privaatsuse. Tulemusena muudetakse minerite mälus olevad osakud nii, et nendes kajastuvad tehtud operatsioonid, kuid andmete privaatsus ei ole rikutud. Raamistiku p~ohiliseks disainieesmärgiks on efektiivsus ja kasutuslihtsus. Kasutatavad protokollid ei tugine aegan~oudvatel krüptograafilistel primitiividel ning seega ei vaja nende täitmine suurt arvutusj~oudlust. Raamistiku eeliseks on v~oime opereerida suurte andmehulkadega. Implementeeritud protokollid on komponeeritavad, seega saab neid kasutada järjestikuliselt ja paralleelselt. See lubab teha andmetega järjest erinevaid operatsioone sisuliselt kirjutada programme. Sharemindi kontroller pakub liidest mineritele käskude saatmiseks ning v~oimaldab seega ehitada privaatsust säilitavaid arvutusi teostavaid rakendusi. 6

7 3 Lahenduse kirjeldus 3.1 Keele struktuur Keele instruktsioonid jagunevaks kaheks: Sharemindi raamistikul p~ohinevad privaatsust säilitavad instruktsioonid ja avalikud instruktsioonid. Selles osas käsitleme erinevaid keele osi, mis on seotud avalike andmete ja nendega opereerimisega Registrimasin Registrimasin on seade, millel on l~oplik arv registreid x 1,..., x m. Iga register on v~oimeline hoidma mistahes suurusega täisarvu. Registrimasina programm on l~oplik instruktsioonide loetelu, mida programmi täitmisel järjest läbitakse. Seda tüüpi masinale on iseloomulik, et instruktsioonidele antakse operandidena ette konstantsed andmed ja/v~oi registrid. Masinas on ka käsuloendaja register, milles hoitakse hetkel täidetava käsu aadressi. Täitmist alustatakse esimesest instruktsioonist ning iga käsu täitmisega suurendatakse käsuloendajat ühe v~orra. Käsuloendajat muutes on v~oimalik programmi täitmist suunata. Nii suunavad vookontrolli käsud programmi täitmist loendaja sisu muutmise teel. Antud töös interpretaatori osana ehitatav avalik virtuaalmasin kujutab endast registrimasina varianti. Programmi täitmisel hoitakse mälus mingi hulk muutujaid, mida v~oib pidada registriteks. Neid saab käskudele operandidena ette anda. Samas saab loodavas masinas instruktsioonidele ette anda ka keerulisemaid andmeid nagu avaldised. Käskude täitmine on realiseeritud käesolevas peatükis kirjeldatuga sarnasel viisil Kommentaarid Kommentaarid on lähtekoodi osa, mida interpretaator ignoreerib. Seega ei ole neil programmivooga mingit seost. Kommentaaride ülesandeks on lubada programmeerijal lisada oma lähtekoodi märkusi v~oi seletusi. Sharemindi keel toetab kahte tüüpi kommentaare: ühe- ja mitmerealised ehk plokkkommentaarid. // üherealine kommentaar /* mitmerealine ehk plokk-kommentaar */ Üherealine kommentaar sisaldab endas k~oike, mis asub pärast kaldkriipsude paari // kuni sama rea l~opuni. Mitmerealine kommentaar aga sisaldab k~oike, mis on märkide /* ja esimese esineva */ märkide kombinatsiooni vahel, ning lubab seega sisaldada 7

8 endas rohkem kui ühte rida teksti. Ülejäänud programmifaili sisu, mille puhul ei rakendata märke //, /* ja */, käsitletakse instruktsioonide ja avaldistena ning täidetakse interpretaatori poolt Identifikaatorid Identifikaatoriks peetakse ühest v~oi rohkemast tähest, numbrist v~oi alakriipsust _ koosnevat jada, mis algab kas tähe v~oi alakriipsuga. Teised märgid ei v~oi selles jadas esineda. Samuti ei v~oi identifikaator alata numbriga. Identifikaatoreid kasutatakse keeles muutujate nimede ja pealdiste üles leidmisel. Ka keele reserveeritud s~onad on olemuselt identifikaatorid ning neid ei v~oi kasutada muutujate v~oi pealdiste nimedena. Reserveeritud s~onade hulka kuuluvad keeles kasutusel olevate instruktsioonide nimed, tüübid ning s~onalised väärtused true ja false Instruktsioonid Keele p~ohilisteks komponentideks on käsud ehk instruktsioonid. Iga instruktsioon koosneb operatsiooni mnemoonilisest koodist, millele v~oib järgneda null v~oi rohkem operande. Operatsiooni kood viitab avaliku v~oi privaatse virtuaalmasina instruktsioonile. Selline käsuformaat sarnaneb tavalise assemblerkeele omaga. Samas on Sharemindi keele oluline erinevus operandide väljendusv~oimsuses iga operand on mingit tüüpi avaldis. See lubab tavalisest assemblerist paindlikumat ja mugavamat programmeerimist, kuna nüüd v~oib operandi väärtus s~oltuda korraga mitmest teisest väärtusest. Samuti v~oimaldab see instruktsioonidel kontrollida etteantavate andmete tüüpe ning käituda tüübist lähtudes erinevalt. Programm koosneb instruktsioonide jadast, mida täidetakse üks teise järel. Täitmise ajal v~oib interpretaator vookontrolli instruktsioonide abil hüpata jada m~onda märgistatud kohta, v~oimaldades nii keerulisemate algoritmide loomist ja käivitamist Andmetüübid Sharemindi raamistik kasutab funktsioonide sisendiks ja väljundiks erinevat tüüpi andmeid. Viimaseid tuleb vahendada läbi instruktsioonide operandide nii, et instruktsioonid oskaks nendega midagi peale hakata. Andmeid on tarvis kuidagi töötleda, teha nendega erinevaid operatsioone ja teostada ka veakontrolli. Selleks peab keele interpretaator teadma, missuguste andmetega on tegu, ning kuidas nende puhul käituda. Lähtudes Sharemindi raamistikust ning tüüpide vajadusest on antud keeles loodud tugi järgmiste andmetüüpide jaoks: 32-bitine märgita täisarv (int), 32-bitiste täisarvude massiiv ehk vektor (int[]), s~one (string), t~oeväärtus (bool) ja märgend. 8

9 Täisarvud. Sharemindi raamistiku ja keele p~ohiliseks andmetüübiks on 32-bitine märgita täisarv, mille väärtused saavad olla vahemikus 0 kuni Maksimaalsest järgmine arv loetakse uuesti 0-ks, sellest järgmine 1-ks jne. Sisuliselt käsitletakse täisarve modulo Vektorid. Täisarvudest on v~oimalik luua vektor. Vektor kujutab endast dünaamilist massiivi, kuhu saab lisada uusi elemente ning lugeda, muuta ja eemaldada olemasolevaid elemente. Viimaseid saab vektorist kätte indeksite kaudu. P~ohim~otteliselt pole vektori pikkusel teisi piiranguid kui arvuti vaba operatiivmälu maht. S~oned. S~one tüüp kujutab endast märkide jada ning v~oimaldab käsitleda ja töödelda teksti. S~onede tugi Sharemindi keeles on lisatud selleks, et oleks v~oimalik väljastada teateid ja informatsiooni. Keeles on olemas ka s~onede konkatenatsiooni tugi, mis lubab olemasoleva s~one otsa liita mistahes teist tüüpi avaldise väärtuse tekstilise esituse ning pärast näiteks väljastada see ekraanile. Tänu konkatenatsiooni lihtsusele on väljundi konstrueerimisel v~oimalik palju aega kokku hoida. Selle tüübi pikkust piirab samuti ainult arvuti vaba operatiivmälu maht. T~oeväärtused. Kuna keeles on loogiliste avaldiste tugi, siis on vajalik ka t~oeväärtuse tüüp. T~oeväärtus iseloomustab loogilisi avaldisi ja nende vahetulemusi ning saab olla kas t~oene v~oi väär (true v~oi false). Märgendid. Märgend on andmetüüp, mida käsitletakse teistest tüüpidest erineval viisil. Keeles ei ole v~oimalik deklareerida märgendi tüüpi muutujat, samas on v~oimalik deklareerida märgendit, mis määrab programmis ära koha, kuhu interpretaator saab vajadusel programmi täitmisel liikuda. Samuti saab märgendit anda operandina vookontrolli teostavatele instruktsioonidele. Selle t~ottu tuleb märgendeid osaliselt käsitleda kui andmetüüpi Avaldised K~oik Sharemindi keele instruktsioonide operandidena käsitletavad andmed on avaldised. Avaldised jagunevad kaheks: triviaalsed ja mittetriviaalsed. Triviaalseid avaldisi iseloomustavad andmete tüüp ja tüübile vastav väärtus. Triviaalsed avaldised on näiteks konstant ja muutuja. Mittetriviaalseteks loeme aga selliseid avaldisi, millel on keerulisem struktuur. Avaldise väärtusel on alati kindel andmetüüp. Sharemindi keeles on v~oimalik teha avaldistega tehteid. Tehted on mittetriviaalsed avaldised. Neil peab olema määratud tüüp, tehtekood ja tehte argumendid, mille peal tehet rakendatakse. Tehte argumendid on samuti avaldised ning seega v~oivad nad 9

10 omakorda olla kas andmed v~oi tehted. Nii tekib ettekujutus mittetriviaalsest avaldisest kui puustruktuurist ning selle tüübi määrab puu juure tehtekood ja esimese argumendi tüüp. Tehte määrab keeles tehtemärk ehk operaator. Avaldisi v~oib keele andmetüüpidele toetudes klassifitseerida järgmiselt: matemaatilised, loogilised, s~one- ja märgendiavaldised. K~oigi klasside jaoks välja arvatud märgendid, on defineeritud teatud hulk v~oimalikke tehteid. Järgnevalt vaatleme avaldiseklasse eraldi. Matemaatilised avaldised. Seda liiki triviaalseteks avaldiseks v~oivad olla täisarvu tüüpi konstandid, muutujad v~oi vektori elemendid. Samasse hulka v~oib lugeda ka vektori tüüpi avaldisi, kuid nende jaoks pole kirjeldatavas keeles tehteid defineeritud. Täisarvulise tüübiga töötamiseks on Sharemind keeles defineeritud järgmised tehted: liitmine (+), lahutamine ( ), korrutamine ( ), jagamine (/), jäägi leidmine (%), astendamine (^) ja vastandväärtustamine (unaarne ). K~oik need tehted moodustavad koos oma argumentidega täisarvu tüüpi avaldised ning selle t~ottu saavad nende väärtusteks olla ainult täisarvud. Jagamisel saab avaldise väärtuseks jagatise täisosa. Matemaatiliste avaldiste puhul peavad konsistentsuse tagamiseks nii tehte, kui k~oigi selle argumentide (avaldiste) tüübid olema täisarvud. Mainitud tehted (v.a. unaarne miinus) on vasakassotsiatiivsed. See tähendab, et tehte argumentidest väärtustatakse esimesena vasakpoolne argument ning siis parempoolne argument. Seejärel kasutatakse tehte rakendamisel vasakut argumenti esimese parameetrina ja paremat argumenti teise parameetrina. Näiteks avaldise A B puhul lahutatakse väärtusest A väärtus B mitte vastupidi. Toome välja ka matemaatiliste avaldiste grammatika: AVALDIS : KONSTANT VEKTORI_ELEMENT MUUTUJA AVALDIS + AVALDIS AVALDIS - AVALDIS AVALDIS * AVALDIS AVALDIS / AVALDIS AVALDIS % AVALDIS AVALDIS ^ AVALDIS - AVALDIS (AVALDIS) V~oib täheldada, et grammatika on rekursiivse ülesehitusega ning toetab l~opmatult 10

11 sügavaid avaldisi. Loogilised avaldised. Antud liiki avaldised on alati loogilise t~oeväärtuse tüüpi bool ning nende v~oimalikeks väärtusteks on kas t~oene v~oi väär (true v~oi false). Triviaalseteks loogilisteks avaldisteks v~oivad Sharemindi keeles olla ainult konstandid ja muutujad. Seoses t~oeväärtuse tüübiga on keeles defineeritud hulk tehteid (operaatoreid), mis ise on küll loogilised avaldised, kuid argumentide poolest v~oib neid jagada v~ordlusoperaatoriteks ja loogilisteks operaatoriteks: esimesed v~otavad argumentideks ainult matemaatilisi v~oi s~oneavaldisi ja teised ainult loogilisi avaldisi. V~ordlusoperaatorid on m~oeldud matemaatiliste ja s~oneavaldiste väärtuste v~ordlemiseks. Keeles on implementeeritud järgmised vasakassotsiatiivsed v~ordlusoperaatorid: väiksem-v~oi-v~ordne ( ), suurem-v~oi-v~ordne ( ), väiksem-kui (<), suurem-kui (>), v~ordne (==), mittev~ordne (!=). Loogilisi operaatoreid on kolm: konjunktsioon (&&), disjunktsioon ( ) ja loogiline eitus (!). Konjunktsioon ja disjunktsioon on samuti vasakassotsiatiivsed, kuid nende argumentide väärtustamine käib teistest operaatoritest erinevalt. Esimesena väärtustatakse vasakpoolne argument. Seejärel s~oltuvalt tehtest käitutakse taas erineval viisil. Konjunktsiooni puhul vaadatakse esimese argumendi väärtust ning kui see on väär, siis parempoolset argumenti enam ei väärtustata, vaid tagastatakse kogu avaldise väärtuseks väär. Disjunktsiooni puhul väärtustatakse kogu avaldis kohe t~oeseks, kui vasakpoolse argumendi väärtuseks on t~oene. Loogiline eitus on paremassotsiatiivne tehe. See tähendab, et esimesena väärtustatakse tehte parempoolne argument (tehet rakendatakse paremalt vasakule). Loogiline eitus muudab oma parempoolse argumendi t~oeväärtuse vastupidiseks: t~oene muudetakse vääraks ning väär t~oeseks. Matemaatiliste avaldiste puhul töötavad v~ordlusoperaatorid intuitiivselt - sisuliselt nad v~ordlevad omavahel täisarve. S~oneavaldiste puhul on v~ordlustehe keerulisem: s~one A on suurem s~onest B, kui esimene samal positsioonil olev mittev~ordne sümbol on s~one A puhul tähestikus s~one B omast kaugemal - seda nimetatakse ka leksikograafiliseks v~ordluseks. Toome välja ka loogiliste avaldiste grammatika, kus prefiks LOOG viitab loogilist tüüpi avaldisele ning MS matemaatilise v~oi s~one tüüpi avaldisele: LOOG_AVALDIS : KONSTANT MUUTUJA MS_AVALDIS MS_AVALDIS 11

12 MS_AVALDIS MS_AVALDIS MS_AVALDIS < MS_AVALDIS MS_AVALDIS > MS_AVALDIS MS_AVALDIS == MS_AVALDIS MS_AVALDIS!= MS_AVALDIS LOOG_AVALDIS && LOOG_AVALDIS LOOG_AVALDIS LOOG_AVALDIS (LOOG_AVALDIS)! LOOG_AVALDIS S~oneavaldised. Ka triviaalseks s~oneavaldiseks saab olla kas konstant v~oi muutuja. Seda tüüpi avaldiste puhul on defineeritud lisaks loogilistele tehetele ka üks vasakassotsiatiivne s~onede liitmistehe ehk konkatenatsioon. S~onede liitmise v~oimalus on realiseeritud (+) operaatori abil ning sarnaneb C++ v~oi Java keeles oleva s~onede liitmisega. Eksisteerib üks kitsendus: konkateneerida saab ainult siis, kui tehte esimene argument on s~one (S~ONE+AVALDIS) - see määrab tulemusena saadud avaldise tüübi, milleks peab olema samuti s~one. Kui näiteks liita vektorile s~one, siis ei ole tehte semantika enam selge. Samas liites s~onele üksk~oik mis teist tüüpi avaldis konverteeritakse viimase väärtus samuti s~oneks ning tulemusena liidetakse üks s~one teise otsa, mis ongi olemuselt konkatenatsioon. Märgendid. Nagu varem mainitud, saab märgendeid anda operandina ette vookontrolli instruktsioonidele. Kuna operandid on avaldised, siis v~oimaldamaks märgendit instruktsioonidele ette anda peab lugema märgendid erilist tüüpi avaldisteks. Sisuliselt antakse sellise avaldisega instruktsioonile üle märgendi nimi, mille järgi saab instruktsioon vastavast tabelist üles leida märgendile vastava koha programmis. Muud funktsiooni seda tüüpi avaldistel ei ole. Tehete prioriteedid. Antud alampeatükis on kirjeldatud hulk erinevaid tehteid kuid jäid käsitletamata nende prioriteedid. Tehete prioriteedid määravad, millises järjekorras neid täidetakse - k~orgem prioriteet esimesena. Sharemindi keeles on tehete prioriteedid järgmised (üleval k~orgemad prioriteedid): 1. astendamine (^) 2. loogiline eitus (!) 3. unaarne miinus ( ) 4. korrutamine ( ), jagamine (/), jäägi leidmine (%) 12

13 5. liitmine (+), lahutamine ( ) 6. väiksem-v~oi-v~ordne ( ), suurem-v~oi-v~ordne ( ), väiksem-kui (<), suurem-kui (>) 7. v~ordlus (==) 8. konjunktsioon (&&) 9. disjunktsioon ( ) Avaldisi saab tehete järjekorra muutmiseks grupeerida. Nii on näiteks avaldiste ja (2 + 3) väärtusteks vastavalt 17 ja Muutujad Algoritmide realiseerimiseks on tarvis käsitletavaid andmeid töötleda ja säilitada. Sharemindi keeles täidavad avalike andmete meeles pidamise ülesannet muutujad. Iga muutuja on avaldis, seega on tal ka tüüp. Tüüp määratakse muutuja deklareerimisel ning hiljem ei ole v~oimalik seda enam muuta. Muutujale antakse ka unikaalne t~ostutundlik nimi. Muutuja deklareerimine on lihtne uuel real tuleb kirjutada muutuja tüüp ning kohe pärast seda muutuja nime tähistav identifikaator ilma jutumärkideta: muutuja_tüüp muutuja_nimi Deklareerimisel väärtustatakse muutuja s~oltuvalt tema tüübist teatud vaikeväärtusega. Tabelis 1 toome välja nimekirja andmetüüpidest ja nendele vastavatest vaikeväärtustest. Tüüp Vaikeväärtuse tekstiline esitus Kommentaar int 0 null int[] {} tühi vektor bool true t~oene string tühi s~one Tabel 1: Andmetüübid ja nende vaikeväärtused Pärast muutuja deklareerimist saab selle väärtust ümber defineerida (muuta). Selleks on Sharemindi keelde konstrukeeritud mov-nimeline instruktsioon. See v~otab kaks operandi, millest esimene peab olema muutuja, kuhu uus väärtus salvestatakse ning teine peab olema avaldis, kust see väärtus v~oetakse. Programmikoodi tuleb kirjutada: 13

14 mov muutuja avaldis Avaldis peab üldjuhul andmete konsistentsuse tagamiseks olema muutujaga sama tüüpi. Kui aga avaldis on s~one tüüpi, siis üritatakse sealt vastavalt muutuja tüübile välja lugeda seda tüüpi väärtus. Selleks peab s~one sisaldama muutuja tüübile vastava väärtuse korrektset tekstilist esitust. Antud implementatsioonis eeldatakse, et sisestatakse korrektseid andmeid, seega s~onest väärtuse välja lugemise eba~onnestumisel l~opetatakse programmi töö Vektoritega töötamine Vektor kujutab endast dünaamilist massiivi, kus igal elemendil on järjekorranumber ehk indeks. Sharemindi keeles on v~oimalik luua täisarvude vektorit. Seda tehakse järgmise deklaratsiooniga: int[] muutuja_nimi Deklaratsiooni tulemusena luuakse tühi täisarvu tüüpi vektor. Edasi on sellega v~oimalik teha mitmeid operatsioone, mis on realiseeritud instruktsioonidena. Vektoritega töötamiseks m~oeldud instruktsioonide esimese operandina v~oetakse muutuja, sest vektori tüüpi konstantidega opereerimine ei oma antud keeles m~otet. Näiteks konstantse vektori puhul läheks konstant pärast elemendi lisamist kaduma ning sellega ei saaks edasi midagi teha. Muutuja väärtus aga jääb mällu. Vektori l~oppu elemendi lisamine. Instruktsioon vecinsert v~otab esimese operandina eelnevalt deklareeritud vektori muutuja ja teise operandina täisarvu tüüpi avaldise. Siis lisab vecinsert täisarvu väärtuse vektori l~oppu. Vektori pikkus suureneb ühe v~orra. vecinsert vektori_muutuja täisarv Vektori l~opust elemendi eemaldamine. üks element ning vektori pikkus kahaneb ühe v~orra. Etteantud vektori l~opust eemaldatakse vecremove vektori_muutuja 14

15 Vektori suuruse lugemine. Teine operand on täisarvu tüüpi muutuja, kuhu salvestatakse esimese operandina antud vektori pikkus. vecsize vektori_muutuja täisarvuline_muutuja Vektori tühjendamine. elemendid ning vektori pikkuseks saab 0. Etteantud vektor tühjendatakse - kustutatakse k~oik tema vecclear vektori_muutuja Sisend ja väljund Sisendi ja väljundi instruktsioonide kaudu lubab Sharemindi keel programmi ja kasutaja vahelist suhtlust - programmis on v~oimalik väljastada andmed ekraanile ja küsida kasutajalt läbi käsurea sisendit. Andmete ekraanile väljastamiseks on kaks instruktsiooni: print ja println. Nende ainus vahe on väljundi l~opus uuele reale minek - print ei lisa väljundi l~oppu uue rea märki, println aga lisab, viies kursori uuele reale. M~olemad käsud v~otavad ühe operandi, mille tüübiks v~oib olla suvaline keeles deklareeritatavatest andmetüüpidest. Operandiks v~oib olla nii konstant, muutuja, kui nendest mingis kombinatsioonis koosnev keerulisem legaalne avaldis. Ekraanile väljastatakse operandi väärtuse tekstilise esituse. Toome m~oned näited andmete ekraanile väljastamisest: int a // defineerime täisarvulise muutuja a mov a,7 // paneme muutuja a väärtuseks 7 println a // trükime ekraanile 7 ja viime kursori uuele reale println muutuja a väärus on +(a+1) // trükime ekraanile s~one ning selle järel 8 println 3+4*(5+a) // trükime ekraanile avaldise väärtuse, milleks on 51 Andmeid saab programm kasutajalt küsida käsu input abil. S~oltuvalt vajalike andmete iseloomust peab käsu operandiks olema vastavat tüüpi muutuja. Kui sisestatud andmete tekstiline esitus on teisendatav tegelikuks andmestruktuuriks, siis salvestatakse tulemus etteantud muutujasse. Vastasel juhul l~opetab programm töö. Käsu input muutuja väljakutsel tekib käsureale > märk, mille järel saab kasutaja andmed sisestada. 15

16 Vookontroll Programmile üheks iseloomulikuks omaduseks on täidetavate instruktsioonide järjekord. See järjekord ei pea alati olema lineaarne. Programmi täitmise protsessis on tihtipeale tarvis teha hargnemisi v~oi kordumisi - tuleb otsustada, mida, millal ja mis tingimustel teha. Selleks on Sharemindi keeles loodud vookontrolli meetmed, mis p~ohinevad märgendi ja märgendile hüppe ideel. Deklareerides märgendeid on v~oimalik märgistada programmis ära teatud kohad, kuhu hiljem samu märgendeid teatud instruktsioonidele ette andes saab programmi täitmist suunata. Märgendi deklareerimiseks tuleb programmi lähtekoodi eraldi real kirjutada märgendi nime tähistav identifikaator, mille järgi lisatakse koolon: märgendi_nimi: Hüppe tegemiseks on kaks viisi: tingimuslik ja tingimuseta hüpe. Tingimuseta hüppe tegemiseks on instruktsioon jmp. See v~otab ühe märgendi tüüpi argumendi, ning jätkab programmi täitmist sealt, kus antud märgend oli deklareeritud. Märgendi operandina instruktsioonile ette andmiseks tuleb operandi kohale kirjutada koolon, millele järgneb vajaliku märgendi nime tähistav identifikaator, näiteks: jmp :märgendi_nimi Toome välja lihtsa programmi, mis l~opmatus tsüklis trükib ekraanile arve: int a tsykk: println a mov a,a+1 jmp :tsykk Tingimuslik hüpe tähendab seda, et enne tegelikku hüpet tehakse otsus, kas hüpata v~oi mitte. Otsuse tegemiseks on keeles olemas käsk cmp, mis v~otab operandiks loogilise avaldise. Avaldise väärtus salvestatakse cmp poolt interpretaatori v~ordlustulemuste pinusse, kust hiljeb saavad selle väärtuse kätte käsud jt ja jf. Käsu nimi jt tuleneb inglisekeelsest fraasist jump if true (hüppa, kui t~oene) ning jf vastavalt fraasist jump if false (hüppa, kui väär). Need kaks käsku saavad operandina ette märgendi ning teevad täpselt seda, mida käskude nimed ütlevad: hüppavad märgendi poolt osutatud kohta programmis, kui eelnevalt v~ordlustulemuste pinusse salvestatud väärtus on vastavalt kas t~oene v~oi väär. Järgnev näidisprogramm trükib ekraanile arvud nullist üheksani ning k~oige l~oppu trükib s~one L~opp!. 16

17 int a tsykk: println a mov a,a+1 cmp a<10 jt :tsykk println L~opp! Matemaatilised käsud Matemaatiliste andmetega töötamiseks on keelde lisatud m~oningad kasulikud instruktsioonid. Käsk inc v~otab operandina täisarvu tüüpi muutuja ning suurendab selle väärtust ühe v~orra. Kui muutuja a väärtus on 7, siis pärast inc a käivitamist on a väärtuseks 8. Sarnase tööp~ohim~ottega on käsk dec, mis muutuja väärtuse suurendamise asemel vähendab seda. Juhuslike arvude genereerimiseks on instruktsioon random, mis v~otab operandina täisarvu tüüpi muutuja ja paneb selle väärtuseks krüptograafiliselt turvalise juhusliku täisarvu. 3.2 Privaatsust säilitavad instruktsioonid Sharemindi raamistikul p~ohinevad instruktsioonid v~oimaldavad teha operatsioone andmetega privaatsust säilitaval viisil. Raamistik töötab privaatse virtuaalmasinana, ning selle sees täidetavad käsud töötavad juba turvaliselt osadeks jaotatud andmetega - nimetame viimaseid privaatseteks andmeteks. Keele intepretaator töötab aga avaliku virtuaalmasinana ning selle muutujates olevad andmed on avalikud ning k~oigile nähtavad. Seega k~oik andmed, mis saadetakse avalikust virtuaalmasinast privaatsesse, muutuvad privaatseteks. Antud osas käsitleme instruktsioone, mida täidetakse privaatses virtuaalmasinas Pinumasin Kuna privaatne virtuaalmasin on oma olemuselt pinumasin, siis käsitleme lühidalt pinumasina m~oistet ja tööp~ohim~otet. Pinumasin kujutab endast arvutusmudelit, milles arvutimälu esitatakse ühe v~oi rohkema pinuna. Pinumasina käsud töötavad pinu tipus olevate väärtustega. Pinust v~oetakse arvutusteks vajalikud väärtused, teostatakse nendega teatud arvutus ning tulemus pannakse tagasi pinusse. 17

18 Tavaliselt on sellistel masinatel ka suvalise mäluaadressi poole pöördumise käsud. Sharemindi virtuaalmasinas on realiseeritud ka kuhja ehk mälupesaga töötamise käsud. Nii saab nende abil andmed mälust pinusse ja vastupidi laadida Pinu modifitseerimine Järgmised käsud on m~oeldud privaatse virtuaalmasina pinuga töötamiseks. Need on realiseeritud Sharemindi kontrollerliidest kasutades. Tabelis 2 kirjeldame lühidalt iga käsu ülesannet. Operandi nime järel olev küsimärk tähistab seda, et antud operand v~oib olemata jääda ja sellisel juhul loetakse tema väärtus üheks. Käsk dup n? swap n? stacksize size clearstack push src pop dest, n? pushgte n? pushgteres n? pusheqres n? Kirjeldus Loeb pinust n-elemendilise vektori ning paneb pinusse tagasi vektori koopia. Sellega duplitseerib käsk pinu ülemised n elementi. Kui pinus on 10 elementi, siis pärast käsu dup 5 käivitamist on pinus 15 elementi. Kaks ülemist 5-elemendilist vektorit on seejärel v~ordsed ning sama elementide järjekorraga. Vahetab omavahel ära pinu kaks ülemist n-elemendilist vektorit. Antud suurusega vektorid loetakse pinust maha ning pannakse tagasi vastupidises järjekorras. V~otab operandiks muutuja ning paneb selle väärtuseks pinus olevate elementide arvu. Käseb privaatsel virtuaalmasinal oma pinu tühjendada. Paneb etteantud vektori pinusse muutes andmed privaatseks. V~otab pinust n-elemendilise vektori ning salvestab selle käsu esimese operandina oleva vektori tüüpi muutujasse. Kui pinust v~oetakse ainult üks element, siis tagastatakse ühe-elemendiline vektor. V~otab pinust kaks n-elemendilist vektorit ning paneb tagasi vektori, mis koosneb kahe vektori paariti suurematest elementidest. V~ordleb pinu kahe ülemise n-elemendilise vektori elemente ning paneb tagasi vektori, mille iga bitt tähistab vastavast paarist suuremat elementi. Kui t~oeväärtuseks on t~oene, siis esimese vektori vastav väärtus oli suurem. V~ordleb pinu kahe ülemise n-elemendilise vektori elemente ning paneb tagasi vektori, mille iga bitt tähistab, kas vektorite vastavad väärtused olid v~ordsed v~oi mitte. Tabel 2: Käsud privaatse virtuaalmasina pinuga töötamiseks Oluline on tähele panna, et need v~ordlused on privaatsust säilitavad. 18

19 3.2.3 Kuhja käsud Tabel 3 kirjeldab privaatse virtuaalmasina kuhjaga töötavaid instruktsioone. Käsk hpush addr hpop addr hread addr, dest hwrite addr, src hwritebit addr, src Kirjeldus Loeb antud aadressilt kuhjast väärtuse ning paneb selle pinu tippu Eemaldab pinu tipust ühe väärtuse ning salvestab selle ette antud aadressile kuhja. Loeb antud aadressil kuhjas oleva väärtuse ning salvestab selle teise operandina ette antud täisarvu tüüpi muutujasse. Salvestab teise operandina ette antud täisarvulise väärtuse esimese operandina ette antud aadressile kuhja. Salvestab teise operandina ette antud biti väärtuse esimese operandina ette antud aadressil kuhja. Biti väärtust käsitletakse modulo 2 Tabel 3: Käsud privaatse virtuaalmasina kuhjaga töötamiseks 19

20 3.2.4 Andmebaasi käsud Privaatne virtuaalmasin v~oimaldab töötada lihtsustatud relatsioonilise andmebaasiga. Järgnevas tabelis 4 kirjeldame andmebaasiga töötamiseks m~oeldud instruktsioonid. Käsk Kirjeldus dbload name Valmistutakse tööks antud nimega andmebaasiga. dbaddcol name Lisab andmebaasi ette antud nimega tabelisse uue veeru. Tühja tabeli nime puhul kasutatakse parajasti valitud tabelit. dbcreatetbl name, cols Loob andmebaasi antud nime ja veergude arvuga uue tabeli. dbtblexists table, result Kontrollib, kas avatud andmebaasis eksisteerib ette antud nimega olev tabel. Tulemus salvestatakse teise operandina antud t~oeväärtuse tüüpi muutujasse. dbdroptbl name Kustutab andmebaasist antud nime kandva tabeli. dbusetbl name Valib aktiivse andmebaasi tabeli. Kui on valitud vaikimisi aktiivne tabel, siis teistes andmebaasiga seotud käskudes v~oib table operandiks panna tühja s~one. Sellisel juhul kasutatakse seal vaikimi aktiivset tabelit. dbcolcount colcount, table Tagastab andmebaasi tabeli veergude arvu. Tulemus salvestatakse esimese operandina ette antavasse täisarvu tüüpi muutujasse. Tühja tabeli nime puhul kasutatakse parajasti aktiivset tabelit. dbrowcount rowcount, table Tagastab andmebaasi tabeli ridade arvu. dbpushcol colnum, table Paneb andmebaasi tabeli veeru pinusse. Esimene operand tähistab veeru indeksit. dbpushrow rownum, table Paneb andmebaasi tabeli rea pinusse. Esimene operand tähistab rea indeksit. dbpushval row, col, table Paneb andmebaasi tabeli rea ja veeru indeksite poolt määratud väärtuse pinu tippu. dbsavevec vec, table Salvestab ette antud vektori andmebaasi tabelisse uue reana. dbdelrow row, table Kustutab andmebaasi tabelist ette antud indeksit omava rida. Tabel 4: Privaatse virutaalmasina andmebaasiga töötavad käsud 20

21 3.2.5 Aritmeetika Tabelis 5 kirjeldatud käsud töötavad samuti pinu andmetega, kuid nende tööülesanded on rohkem seotud aritmeetikaga. Käsk add n? sum n? mul n? mulc c, n? extractbits n? convz2 n? Kirjeldus V~otab pinust kaks n-elemendilist vektorit ning liidab nende elemendid paarikaupa kokku. Tulemusvektor pannakse pinu tippu. V~otab pinust ühe n-elemendilise vektori, liidab tema elemendid kokku ning paneb saadud summa pinusse tagasi. V~otab pinust kaks n-elemendilist vektorit ning korrutab nende elemendid paarikaupa. Tulemusvektor pannakse pinusse. Korrutab pinu tipus oleva n-elemendilise vektori elemendid konstandiga c V~otab pinust n-elemendilise vektori ning iga tema elemendi väärtuse kohta tekitab tulemusvektorisse väärtuse bitiesituse (32 elementi, iga element on üks bitt). Seejärel pannakse pinusse 32 n pikkune tulemusvektor. Antud käsk on tähtis privaatse virtuaalmasina sisemiste protokollide jaoks. See v~otab pinult n-elemendilise vektori ning konverteerib tema osakute väärtused Z 2 Z Seejärel pannakse konverteeritud vektor tagasi pinusse. bitwiseadd m, n V~otab pinult m n-elemendilist vektori paari. Seejärel teostatakse nende bitihaaval liitmine ja tulemusvektor pannakse koos ülekandebittidega pinusse tagasi. Tabel 5: Privaatse virutaalmasina pinuga töötavaid aritmeetilisi käske 3.3 Keele ja interpretaatori ehitamine Interpretaator, selle struktuur ja tööp~ohim~ote Intepretaator on tarkvararakendus, mis oskab lugeda ja käivitada loodavas keeles kirjutatud programme. Selleks peab interpretaator oskama programmi osi selle tekstist välja lugeda. Lähtekoodi lugemisest käskude täitmiseni j~oudmine on keerukas protsess - selleks tuleb läbida mitu etappi. Iga etapi eest vastutab interpretaatori teatud plokk, millel on olemas sisend ja tulem. Ülevaate koostatavast intepretaatorist annab joonis 1. 21

22 Programmi lähtekood Lekseemide jada Leksikaanalüsaator Süntaksianalüsaator Programmi puu Sharemind virtuaalmasina kontrollerliides Käsuprotsessor Privaatsust säilitava virtuaalmasina käsk Avaliku virtuaalmasina käsk Joonis 1: Interpretaatori struktuur ja tööp~ohim~ote Esimene suurem plokk on leksikaanalüsaator. Selle sisendiks on Sharemindi keeles kirjutatud programmi lähtekood. Leksikaanalüsaatori ülesandeks on leida lähtekoodis lekseemid, k~oige väiksemad iseseisva tähendusega lähtekoodi tekstijupid: kommentaarid, s~oned, toetatavate andmete tekstilised esitused, lähtekeele v~otmes~onad, identifikaatorid, operaatorid, eraldajad. Samuti eemaldatakse ülearused tühikud, mis lubab lähtekoodi kokku suruda ja seega kiirendada järgnevaid etappe. Leksikaanalüsaatori tulemusena muutub lähtekoodi sümbolite jada lekseemide jadaks. Järgmine plokk on süntaksianalüsaator, mille sisendiks on eelmise ploki väljund ehk lekseemide jada. Antud ploki ülesandeks on lekseemide jada programmikäskudeks ja avaldisteks teisendamine ning nendest programmi puu ehitamine. Kolmas on käsuprotsessori plokk see kujutab endast avalikku virtuaalmasinat, mille sisendiks on süntaksianalüsaatorilt saadud programmi puu. Seda interpreteeritakse ja täidetakse käskhaaval. Programmi puu koosneb instruktsioonide jadast ning nende operandidest. Viimased väärtustatakse jooksvalt programmi täitmise ajal. Käsuprotsessori ülesannete hulka kuuluvad ka muutujate ja märgendite haldus, tüübi- ja veakontroll, avaldiste konsistentsuse ja legaalsuse kontroll ning nende väärtustamine. Käsuprotsessoris hallatavad andmed on avalikud andmed, mis on k~oigile nähtavad. Seega nimetame käsuprotsessorit ka avalikuks virtuaalmasinaks. Neljas plokk on Sharemindi virtuaalmasina kontrollerliides, mille kaudu saadetakse privaatsete andmetega töötavad käsud privaatsele virtuaalmasinale. Viimases töödeldavad andmed on hästi kaitstud seal tehtavad operatsioonid teostatakse privaatsust säilitaval viisil sisuliselt reaalseid andmeid teadmata. 22

23 Kaks esimest plokki moodustavad keele translaatori ning kaks viimast plokki moodustavad loogikaprotsessori, kus lähtekoodist transleeritud programmi täidetakse. Kuna interpretaator peab programmi täitmiseks läbima mitu plokki ning iga neist peidab endas suurt hulka loogikat, siis m~oistagi on interpreteeritud programmid kompileeritud programmidest aeglasemad neis tehtakse palju jooksvaid teisendusi selle asemel, et käske otse masinkoodis täita. Küll aga pole antud keele interpretaatori kiirus k~oige suurem prioriteet, sest käskude täitmisel on privaatne virtuaalmasin oma ehituse t~ottu avalikust virtuaalmasinast oluliselt aeglasem ning interpretaatori kiirus m~ojutab kogukiirust vähe Leksikaanalüsaator Leksikaanalüsaatori ehk skanneri genereerimiseks kasutati antud töös Flex-nimelist vahendit (Fast Lexical Analyzer). Flex teisendab talle antud translaatori leksikat sisaldava faili Scanner.ll C v~oi C++ programmiks, mida hiljem kasutatakse interpretaatori koodi osana. Failis Scanner.ll toodud leksikaanalüsaatori kirjeldus koosneb kolmest üksteisest %% sümbolitega eraldatud osast: definitsioonid, reeglid ja kasutaja funktsioonid. Flexi abil kirjeldatud skanner on tegelikult lihtsalt sisendteksti alaml~oikude teisendaja: ta asendab definitsioonid-osas kirjeldatud regulaarsetele avaldistele vastavad l~oigud skaneeritavas programmis (skanneri sisendis) vastavalt osas reeglid esitatud reeglitele. Sisendi need osad, mis ei vasta ühelegi seal kirjeldatud regulaarsele avaldisele, kopeeritakse väljundisse muutumatult. Asendatud l~oigud nimetame lekseemideks need on k~oige väiksemad iseseisva tähendusega lähtekoodi tekstitükid. Lekseemide kirjeldamiseks kasutatakse terminale ja mitteterminale. Terminalid on defineeritavates jadades kasutatavad märgid (näiteks täisarvude defineerimisel numbrid 0, 1, 2,..., 9). Mitteterminalid on definitsiooni käigus kasutatavad abim~oisted (näiteks NUMBER, INT). Osas definitsioonid defineeritud lekseemide kirjeldustes kasutatavate mitteterminalide regulaaravaldised on toodud tabelis 6. Regulaaravaldisi kasutatakse lekseemide äratundmisel. 23

24 Mitteterminal Regulaaravaldis CHARACTER [a-za-z_] DIGIT [0-9] NUMBER {DIGIT}+ IDENT {CHARACTER}({CHARACTER} {DIGIT})* STRING \"[^"\n]*["\n] SINGLE_LINE_COMMENT \/\/.* MULTIPLE_LINE_COMMENT \/\*([^*] [\r\n] (\*+([^*/] [\r\n])))*\*+\/ INTVECTOR \{([0-9]+,)*([0-9]+)*\} Tabel 6: Lekseemide kirjeldustes kasutatavad mitteterminalid Lekseemi definitsioon v~oib p~ohineda ka eelnevalt defineeritud lekseemide definitsioonidel. Näiteks koosneb identifikaatori lekseem IDENT varem defineeritud CHARACTER ja DIGIT lekseemide kombinatsioonist. Samuti v~oib lekseeme kirjeldavaid regulaaravaldisi kasutada otse reeglid-osas suurem hulk lekseeme ongi antud keele leksikaanalüsaatori puhul sellisel viisil kirjeldatud. K~oik loodava keele leksikaanalüsaatori poolt otsitavad ja tagastatavad avaliku virtuaalmasinaga seotud lekseemid on toodud tabelis 8. 24

25 Otsingu regulaaravaldis Tagastatav lekseem Väärtus, kui olemas {SINGLE_LINE_COMMENT} ei tagastata {MULTIPLE_LINE_COMMENT} ei tagastata {STRING} STRING jutumärkidevaheline s~one true BOOLEAN true false BOOLEAN false {NUMBER} INTEGER arv {INTVECTOR} INTVECTOR täisarvuline vektor int T_INTEGER int\[\] T_INTVECTOR bool T_BOOLEAN string T_STRING mov MOV input INPUT print PRINT println PRINTLN cmp CMP jt JT jf JF jmp JMP inc INC random RANDOM vecinsert VECINSERT vecremove VECREMOVE vecsize VECSIZE vecclear VECCLEAR {IDENT} IDENT s~one [ \t]+ ei tagastata [\n\r] EOL \<= LE \>= GE == EQ!= NE && AND \ \ OR. muutumatul kujul Tabel 8: K~oik otsitavad ja tagastatavad avaliku virtuaalmasinaga seotud lekseemid Lähtetekstis leitud kommentaarid eemaldatakse, nagu ka üleliigsed tühikud. S~oned, identifikaatorid, ja muud lekseemid edastatakse süntaksianalüsaatorile Süntaksianalüsaator Süntaksianalüsaator rakendab talle edastatud lekseemide jadale grammatikareegleid, teisendab selle programmikäskudeks ja avaldisteks ning ehitab siis viimastest keele 25

26 grammatikale vastava programmi puu. Käesolevas töös kasutati süntaksianalüsaatori genereerimiseks programmi Bison. Bisoni sisendiks on fail Parser.yy, mis sisaldab transleeritava programmeerimiskeele süntaksit kirjeldavat kontekstivaba grammatikat. Ka sellest failist genereeritakse hiljem intepretaatori osana kasutatav C++ klass - süntaksianalüsaator. Grammatika sisaldab reegleid, terminale ja mitteterminale. Bisonile esitatava grammatika terminalid on leksikaanalüsaatori poolt leitud lekseemid. Need esitatakse Bisonile v~otmes~ona %token järel ning kirjutatakse suurte tähtedega. Terminalidena v~oib kasutada ka tekstikonstante, näiteks + v~oi *. Grammatika mitteterminalid kirjutatakse väiketähtedega. Neid eraldi ei loeta, Bison tunneb nad ära grammatikareeglitest. Programmil~oikude semantika saab leida ainult selle programmil~oigu struktuuri abil. See struktuur kirjeldatakse grammatikaga ja programmil~oigu tähenduse esitab selle programmil~oigu süntaksipuu ehk derivatsioonipuu, mille p~ohjal see programmil~oik grammatika algussümbolist saadakse. Seega peab programmi üheseltm~oistetavuse tagamiseks ühele grammatikale vastata üks derivatsioonipuu - grammatika peab olema ühene. Flex ja Bison on kaks eraldi vahendit, mis genereerivad C++ koodi, mist~ottu on tarvis seda koodi kasutades leksika- ja süntaksianalüsaatorit koostööks seadistada. Selleks on loodud Flexi ja Bisoni genereeritud koodi kapseldav klass Driver, mis loob liidese analüsaatorite lihtsaks kasutamiseks. Samuti on Driver klassi kapseldatud veateadete edastamise eest vastutav klass ning keelekonteksti klass, kuhu süntaksianalüsaatori poolt ehitatakse programmi puu. Programmi puu ehitamise p~ohim~ote on lühidalt kokku v~ottes järgmine: iga instruktsiooni puhul ehitatakse vajalike avaldiste puud ning lisatakse need vastava instruktsiooni operandide vektorisse. Seejärel lisatakse valmis instruktsioon keelekontekstis olevasse käskude vektorisse. Tsüklit korratakse kuni k~oik programmi käsud on puusse lisatud. Avaldiste ja instruktsioonide puude struktuure vaatleme lähemalt järgnevates peatükkides Andmed Konstandid. Pärast kommentaaride eemaldamist filtreerib leksikaanalüsaator välja erinevat tüüpi andmed: s~oned, t~oeväärtused, arvud ja vektorite tekstilised esitused. Tabelis 8 nägime, kuidas viia otsitava tekstiga vastavusse osa lekseemidest. Konstantsete andmete puhul (s~one, t~oeväärtus, arv, täisarvuline vektor v~oi identifikaator) tagastab leksikaanalüsaator vastava lekseemi ning edastab lekseemile vastava väärtuse. Väärtuse tüübi määrab lekseem: kui lekseem oli INTEGER, siis edastatakse leitud täisarv. Kui aga lekseemiks oli vektori tekstiline esitus, siis edastatakse koos lekseemiga tekstilisest esitusest rekonstrueeritud vektori sisemise vormingu versioon. Seejärel saab süntaksianalüsaator sisendiks lekseemide jada ning leiab, et lekseemid 26

27 INTEGER, BOOLEAN, STRING, INTVECTOR v~oi kooloniga algav märgendit kujutav identifikaator rahuldavad mitteterminaliga constant algavat reeglit. Seega iga variandi puhul konstrueeritakse vastava tüübi ja väärtusega avaldis, mille aadress seotakse mitteterminali constant uue instantsiga. Pärast seda saab seda mitteterminali kasutada näiteks avaldise grammatikareeglis. Muutujad. Muutujad leitakse süntaksianalüsaatori poolt lekseemi IDENT järgi. Nagu ka konstantide puhul, seotakse muutujate puhul mitteterminaliga variable muutujat kujutava avaldise aadress. Avaldis sisaldab muutuja nime, milleks on lekseemiga IDENT edastatud s~one tüüpi väärtus, ning spetsiaalset tehtekoodi, mis tähistab, et avaldis on muutuja. Mitteterminali variable saab seejärel kasutada teistes grammatikareeglites. Muutujate deklareerimisel on vaja neile anda tüübid. Mitteterminali variable_type väärtuseks pannakse andmetüüp vastavalt leksikaanalüsaatorist tulnud lekseemi, milleks v~oib olla T_INTEGER, T_INTVECTOR, T_BOOLEAN v~oi T_STRING. Nüüd saab luua grammatikareegli, mis vastab muutuja deklareerimise süntaksile: i_variable_declaration : variable_type IDENT {...} See reegel läheb kasutusse, kui skaneeritavas programmikoodis leidub paar, kus esimene lekseem tähistab andmetüüpi ja teine on identifikaator, näiteks: int a. Vektori elemendid. Konstantide ja muutujate abil saab töötada tervete vektoritega. Tihti on aga tarvis pääseda ligi vektori elementidele. Selleks peab keeles olema kindel süntaks. Loodavas keeles kasutatakse selleks C ja Java keelest tuntud nurksulge: vektori_nimi[indeks]. Sellise süntaksi lubamiseks on keele grammatikas defineeritud järgmine reegel: vector_element : variable [ exp ] { vector<expression> ve; ve.push_back(*$3); $$ = new Expression(INT, _VARIABLE, ve); $$->name = $1->name; } See reegel ütleb, et kui lekseemide jadas leidub reegli paremal pool toodud alamjada, siis mitteterminali vector_element väärtuseks pannakse sellise muutujat kujutava avaldise aadress, millel on täisarvuline tüüp, variable muutujaga sarnane nimi ning millel on ka üks argument, milleks on indeksit tähistav avaldis. Interpretaator 27

28 oskab selle info järgi hiljem ~oigest vektorist ~oiget elementi üles leida. Mitteterminali vector_element saab nüüd teistes reeglites kasutada ning see tähistab seal mingi vektori mingit elementi Avaldised Loodavas keelel on avaldiste tugi. Toetatakse triviaalseid ja mittetriviaalseid avaldisi ning nende realiseerimiseks on loodud alamavaldist kirjeldav klass. Klassi struktuur ilma funktsioonideta on järgmine: class Expression { string name; expression_types type; exp_value_t value; exp_op_codes op; vector<expression> params; }; Avaldise struktuurist on näha, et sellel on nimi, tüüp, väärtus, tehtekood ja parameetrid. Nimi on tavaline s~one. Tüübiks v~oib olla üks viiest väärtusest: INT, INTV, BOOL, STRING, LABEL. Avaldise väärtus on liittüüp, mis v~oib olla kas t~oeväärtus, 32-bitine täisarv, v~oi viit s~onele, täisarvulisele vektorile v~oi täisarvule mingis vektoris. Tehtekood op v~oib osutada sellele, kas avaldis on konstant, muutuja v~oi vektori element v~oi on ta m~oni matemaatiline, loogiline v~oi s~onetehe. Väli params v~oib sisaldada teisi avaldisi, mis lubab ehitada keeruliste avaldiste puid. Sellese välja lisatakse avaldisi siis, kui tegemist on tehet kujutava avaldisega v~oi vektori elemendiga, mil üheks parameetriks on vektori elemendile osutav indeks. Meil on struktuur, mis v~oimaldab koostada keerulisi avaldisi. Avaldisi on aga vaja kuidagi programmi lähtekoodist välja lugeda. Selleks kasutame eelnevalt käsitletud konstantide, muutujate ja vektori elementide jaoks loodud grammatikareegleid ning lisaks mingit hulka lekseemidest. Saame defineerida uue grammatikareegli, mis sätestab avaldiste ehitamise loogika: exp : constant { $$ = $1; } vector_element { $$ = $1; } variable { $$ = $1; } exp + exp {... } exp - exp {... } 28

Word Pro - diskmatTUND.lwp

Word Pro - diskmatTUND.lwp Loogikaalgebra ( Boole'i algebra ) George Boole (85 864) Sündinud Inglismaal Lincolnis. 6-aastasena tegutses kooliõpetaja assistendina. Õppis 5 aastat iseseisvalt omal käel matemaatikat, keskendudes hiljem

Rohkem

Excel Valemite koostamine (HARJUTUS 3) Selles peatükis vaatame millistest osadest koosnevad valemid ning kuidas panna need Excelis kirja nii, et

Excel Valemite koostamine (HARJUTUS 3) Selles peatükis vaatame millistest osadest koosnevad valemid ning kuidas panna need Excelis kirja nii, et Excel2016 - Valemite koostamine (HARJUTUS 3) Selles peatükis vaatame millistest osadest koosnevad valemid ning kuidas panna need Excelis kirja nii, et programm suudaks anda tulemusi. Mõisted VALEM - s.o

Rohkem

Programmeerimiskeel APL Raivo Laanemets 17. mai a.

Programmeerimiskeel APL Raivo Laanemets 17. mai a. Programmeerimiskeel APL Raivo Laanemets 17. mai 2009. a. Sissejuhatus I APL - A Programming Language I Kenneth E. Iverson (1920-2004) I Elukutselt matemaatik I Uuris matemaatilist notatsiooni I 1960 -

Rohkem

loeng7.key

loeng7.key Grammatikate elustamine JFLAPiga Vesal Vojdani (TÜ Arvutiteaduse Instituut) Otse Elust: Java Spec https://docs.oracle.com/javase/specs/jls/se8/html/ jls-14.html#jls-14.9 Kodutöö (2. nädalat) 1. Avaldise

Rohkem

Failiotsing: find paljude võimalustega otsingukäsk find kataloog tingimused kataloog - otsitakse sellest kataloogist ja tema alamkataloogidest tingimu

Failiotsing: find paljude võimalustega otsingukäsk find kataloog tingimused kataloog - otsitakse sellest kataloogist ja tema alamkataloogidest tingimu Failiotsing: find paljude võimalustega otsingukäsk find kataloog tingimused kataloog - otsitakse sellest kataloogist ja tema alamkataloogidest tingimused: faili nimi faili vanus faili tüüp... 1 Failiotsing:

Rohkem

I Generaatori mõiste (Java) 1. Variantide läbivaatamine Generaator (ehk generaator-klass) on klass, milles leidub (vähemalt) isendimeetod next(). Kons

I Generaatori mõiste (Java) 1. Variantide läbivaatamine Generaator (ehk generaator-klass) on klass, milles leidub (vähemalt) isendimeetod next(). Kons I Generaatori mõiste (Java) 1. Variantide läbivaatamine Generaator (ehk generaator-klass) on klass, milles leidub (vähemalt) isendimeetod next(). Konstruktorile antakse andmed, mis iseloomustavad mingit

Rohkem

loeng2

loeng2 Automaadid, keeled, translaatorid Kompilaatori struktuur Leksiline analüüs Regulaaravaldised Leksiline analüüs Süntaks analüüs Semantiline analüüs Analüüs Masinkoodi genereerimine Teisendamine (opt, registrid)

Rohkem

Infix Operaatorid I Infix operaatorid (näiteks +) ja tüübid (näiteks ->) kirjutatakse argumentide vahele, mitte argumentide ette. Näiteks: 5 + 2, 2*pi

Infix Operaatorid I Infix operaatorid (näiteks +) ja tüübid (näiteks ->) kirjutatakse argumentide vahele, mitte argumentide ette. Näiteks: 5 + 2, 2*pi Infix Operaatorid I Infix operaatorid (näiteks +) ja tüübid (näiteks ->) kirjutatakse argumentide vahele, mitte argumentide ette. Näiteks: 5 + 2, 2*pi*r^2, Float -> Int Infixoperaatori kasutamiseks prefix-vormis

Rohkem

PHP

PHP PHP Autorid: Aleksandr Vaskin Aleksandr Bogdanov Keelest Skriptikeel skript teeb oma tööd pärast seda, kui toimus mingi sündmus* Orienteeritud programmeerija eesmärkide saavutamiseks (mugavus on tähtsam

Rohkem

Andmed arvuti mälus Bitid ja baidid

Andmed arvuti mälus Bitid ja baidid Andmed arvuti mälus Bitid ja baidid A bit about bit Bitt, (ingl k bit) on info mõõtmise ühik, tuleb mõistest binary digit nö kahendarv kahe võimaliku väärtusega 0 ja 1. Saab näidata kahte võimalikku olekut

Rohkem

Microsoft Word - ref - Romet Piho - Tutorial D.doc

Microsoft Word - ref - Romet Piho - Tutorial D.doc Tartu Ülikool Andmetöötluskeel "Tutorial D" realisatsiooni "Rel" põhjal Referaat aines Tarkvaratehnika Romet Piho Informaatika 2 Juhendaja Indrek Sander Tartu 2005 Sissejuhatus Tänapäeval on niinimetatud

Rohkem

DIGITAALTEHNIKA DIGITAALTEHNIKA Arvusüsteemid Kümnendsüsteem Kahendsüsteem Kaheksandsüsteem Kuueteistkü

DIGITAALTEHNIKA DIGITAALTEHNIKA Arvusüsteemid Kümnendsüsteem Kahendsüsteem Kaheksandsüsteem Kuueteistkü DIGITAALTEHNIKA DIGITAALTEHNIKA... 1 1. Arvusüsteemid.... 2 1.1.Kümnendsüsteem....2 1.2.Kahendsüsteem.... 2 1.3.Kaheksandsüsteem.... 2 1.4.Kuueteistkümnendsüsteem....2 1.5.Kahendkodeeritud kümnendsüsteem

Rohkem

Word Pro - digiTUNDkaug.lwp

Word Pro - digiTUNDkaug.lwp / näide: \ neeldumisseadusest x w x y = x tuleneb, et neeldumine toimub ka näiteks avaldises x 2 w x 2 x 5 : x 2 w x 2 x 5 = ( x 2 ) w ( x 2 ) [ x 5 ] = x 2 Digitaalskeemide optimeerimine (lihtsustamine)

Rohkem

Microsoft Word - essee_CVE ___KASVANDIK_MARKKO.docx

Microsoft Word - essee_CVE ___KASVANDIK_MARKKO.docx Tartu Ülikool CVE-2013-7040 Referaat aines Andmeturve Autor: Markko Kasvandik Juhendaja : Meelis Roos Tartu 2015 1.CVE 2013 7040 olemus. CVE 2013 7040 sisu seisneb krüptograafilises nõrkuses. Turvaaugu

Rohkem

G aiasoft Programmi VERP ja Omniva Arvekeskuse liidese häälestamine ja arvete saatmine-lugemine VERP 6.3 ja VERP 6.3E Versioon ja hilisemad K

G aiasoft Programmi VERP ja Omniva Arvekeskuse liidese häälestamine ja arvete saatmine-lugemine VERP 6.3 ja VERP 6.3E Versioon ja hilisemad K Programmi VERP ja Omniva Arvekeskuse liidese häälestamine ja arvete saatmine-lugemine VERP 6.3 ja VERP 6.3E Versioon 6.3.1.51 ja hilisemad Kasutaja juhend 2016 Sisukord 1. Sissejuhatus...3 2. Liidese häälestus...3

Rohkem

Microsoft Word - Errata_Andmebaaside_projekteerimine_2013_06

Microsoft Word - Errata_Andmebaaside_projekteerimine_2013_06 Andmebaaside projekteerimine Erki Eessaar Esimene trükk Teadaolevate vigade nimekiri seisuga 24. juuni 2013 Lehekülg 37 (viimane lõik, teine lause). Korrektne lause on järgnev. Üheks tänapäeva infosüsteemide

Rohkem

Neurovõrgud. Praktikum aprill a. 1 Stohhastilised võrgud Selles praktikumis vaatleme põhilisi stohhastilisi võrke ning nende rakendust k

Neurovõrgud. Praktikum aprill a. 1 Stohhastilised võrgud Selles praktikumis vaatleme põhilisi stohhastilisi võrke ning nende rakendust k Neurovõrgud. Praktikum 11. 29. aprill 2005. a. 1 Stohhastilised võrgud Selles praktikumis vaatleme põhilisi stohhastilisi võrke ning nende rakendust kombinatoorsete optimiseerimisülesannete lahendamiseks.

Rohkem

E-arvete juhend

E-arvete juhend E- arvete seadistamine ja saatmine Omniva kaudu Standard Books 7.2 põhjal Mai 2015 Sisukord Sissejuhatus... 3 Seadistamine... 3 Registreerimine... 4 E- arve konto... 5 Vastuvõtu eelistus... 5 Valik E-

Rohkem

1 / loeng Tekstitöötlus Sisend/väljund Teksti lugemine Sõnad

1 / loeng Tekstitöötlus Sisend/väljund Teksti lugemine Sõnad 1 / 16 7. loeng Tekstitöötlus Sisend/väljund Teksti lugemine Sõnad 2 / 16 Sisend/väljund vaikimisi: Termid: read, write?-read(x). : 2+3. X = 2+3.?-write(2+3). 2+3 true. Jooksva sisendi vaatamine: seeing?-

Rohkem

Pealkiri

Pealkiri Andmebaasid II praktikum Andmebaaside administreerimine Andmete sisestamine KESKKOND, KASUTAJAD, ÕIGUSED Mõisted Tabelid, vaated, trigerid, jpm on objektid Objektid on grupeeritud skeemi Skeemid moodustavad

Rohkem

MS Word Sisukord Uue dokumendi loomine... 2 Dokumendi salvestamine... 3 Faili nimi... 4 Teksti sisestamine... 6 Klaviatuuril mitteleiduvat sümbolite l

MS Word Sisukord Uue dokumendi loomine... 2 Dokumendi salvestamine... 3 Faili nimi... 4 Teksti sisestamine... 6 Klaviatuuril mitteleiduvat sümbolite l MS Word Sisukord Uue dokumendi loomine... 2 Dokumendi salvestamine... 3 Faili nimi... 4 Teksti sisestamine... 6 Klaviatuuril mitteleiduvat sümbolite lisamine... 6 Uue dokumendi loomine Dokumendi salvestamine

Rohkem

Microsoft Word - requirements.doc

Microsoft Word - requirements.doc Dokumendi ajalugu: Versioon Kuupäev Tegevus Autor 1.0 04.03.2008 Dokumendi loomine Madis Abel 1.1 09.03.2008 Kasutuslugude loomine Madis Abel 1.2 12.03.2008 Kasutuslugude täiendused Andres Kalle 1.3 13.03.2008

Rohkem

GRUPI-SMS Veebirakenduse kasutamise juhend Rakendus Elisa grupi-smsi rakendus Väljaandja Elisa Eesti AS Juhendi koostamise kuupäev Versioon

GRUPI-SMS Veebirakenduse kasutamise juhend Rakendus Elisa grupi-smsi rakendus Väljaandja Elisa Eesti AS Juhendi koostamise kuupäev Versioon GRUPI-SMS Veebirakenduse kasutamise juhend Rakendus Elisa grupi-smsi rakendus Väljaandja Elisa Eesti AS Juhendi koostamise kuupäev 05.02.2018 Versiooni kuupäev 30.01.2018 1 SISUKORD 1. ÜLEVAADE... 3 1.1

Rohkem

AWK Aho Weinberger Kernighan struktuurse teksti töötlemise keel rikkalikult tekstitöötlusvahendeid omal alal suhteliselt lihtne ja kiiresti realiseeri

AWK Aho Weinberger Kernighan struktuurse teksti töötlemise keel rikkalikult tekstitöötlusvahendeid omal alal suhteliselt lihtne ja kiiresti realiseeri AWK Aho Weinberger Kernighan struktuurse teksti töötlemise keel rikkalikult tekstitöötlusvahendeid omal alal suhteliselt lihtne ja kiiresti realiseeritav AWK kasutusalad raportite genereerimine ühest formaadist

Rohkem

Relatsiooniline andmebaaside teooria II. 6. Loeng

Relatsiooniline andmebaaside teooria II. 6. Loeng Relatsiooniline andmebaaside teooria II. 5. Loeng Anne Villems ATI Loengu plaan Sõltuvuste pere Relatsiooni dekompositsioon Kadudeta ühendi omadus Sõltuvuste pere säilitamine Kui jõuame, siis ka normaalkujud

Rohkem

SQL

SQL SQL Teine loeng Mõtelda CREATE TABLE ( { INTEGER VARCHAR(10)} [ NOT NULL] ); Standard SQL-86 (ANSI X3.135-1986), ISO võttis üle 1987 SQL-89 (ANSIX3.135-1989) SQL-92 (ISO/IEC 9075:1992)

Rohkem

MTAT Operatsioonisüsteemid - Turvalisus

MTAT Operatsioonisüsteemid - Turvalisus Regulaaravaldised ja skriptimine Windows ja UNIX operatsioonisüstemides WINDOWS 1. slaid Windows käsurida Käsureaks nimetan programme: cmd.exe powershell.exe command.com Nendesse saab kirjutada käske,

Rohkem

Microsoft Word - Toetuste veebikaardi juhend

Microsoft Word - Toetuste veebikaardi juhend Toetuste veebikaardi juhend Toetuste veebikaardi ülesehitus Joonis 1 Toetuste veebikaardi vaade Toetuste veebikaardi vaade jaguneb tinglikult kaheks: 1) Statistika valikute osa 2) Kaardiaken Statistika

Rohkem

Praks 1

Praks 1 Biomeetria praks 3 Illustreeritud (mittetäielik) tööjuhend Eeltöö 1. Avage MS Excel is oma kursuse ankeedivastuseid sisaldav andmestik, 2. lisage uus tööleht, 3. nimetage see ümber leheküljeks Praks3 ja

Rohkem

Loeng03

Loeng03 Loeng 03 Failiõigused ja -manipulatsioon Operatsioonisüsteemide administreerimine ja sidumine I233 Katrin Loodus, Tallinn 2015 Failid ja kataloogid Mis on fail? Linuxi laadsetes süsteemides on kõik failid

Rohkem

lcs05-l3.dvi

lcs05-l3.dvi LAUSELOOGIKA: LOOMULIK TULETUS Loomuliku tuletuse süsteemid on liik tõestussüsteeme nagu Hilberti süsteemidki. Neile on omane, et igal konnektiivil on oma sissetoomise (introduction) ja väljaviimise (elimination)

Rohkem

Mida räägivad logid programmeerimisülesande lahendamise kohta? Heidi Meier

Mida räägivad logid programmeerimisülesande lahendamise kohta? Heidi Meier Mida räägivad logid programmeerimisülesande lahendamise kohta? Heidi Meier 09.02.2019 Miks on ülesannete lahendamise käigu kohta info kogumine oluline? Üha rohkem erinevas eas inimesi õpib programmeerimist.

Rohkem

loogikaYL_netis_2018_NAIDISED.indd

loogikaYL_netis_2018_NAIDISED.indd . Lihtne nagu AB Igas reas ja veerus peavad tähed A, B ja esinema vaid korra. Väljaspool ruudustikku antud tähed näitavad, mis täht on selles suunas esimene. Vastuseks kirjutage ringidesse sattuvad tähed

Rohkem

ITI Loogika arvutiteaduses

ITI Loogika arvutiteaduses Predikaatloogika Predikaatloogika on lauseloogika tugev laiendus. Predikaatloogikas saab nimetada asju ning rääkida nende omadustest. Väljendusvõimsuselt on predikaatloogika seega oluliselt peenekoelisem

Rohkem

raamat5_2013.pdf

raamat5_2013.pdf Peatükk 5 Prognoosiintervall ja Usaldusintervall 5.1 Prognoosiintervall Unustame hetkeks populatsiooni parameetrite hindamise ja pöördume tagasi üksikvaatluste juurde. On raske ennustada, milline on huvipakkuva

Rohkem

Polünoomi juured Juure definitsioon ja Bézout teoreem Vaadelgem polünoomi kus K on mingi korpus. f = a 0 x n + a 1 x n a n 1 x

Polünoomi juured Juure definitsioon ja Bézout teoreem Vaadelgem polünoomi kus K on mingi korpus. f = a 0 x n + a 1 x n a n 1 x 1 5.5. Polünoomi juured 5.5.1. Juure definitsioon ja Bézout teoreem Vaadelgem polünoomi kus K on mingi korpus. f = a 0 x n + a 1 x n 1 +... + a n 1 x + a n K[x], (1) Definitsioon 1. Olgu c K. Polünoomi

Rohkem

Microsoft Word - Vorm_TSD_Lisa_1_juhend_2015

Microsoft Word - Vorm_TSD_Lisa_1_juhend_2015 TSD lisa 1 täitmise juhend Olulisemad muudatused deklareerimisel alates 01.01.2015 vorm TSD lisal 1. Alates 01.01.2015 muutus vorm TSD ja tema lisad. Deklaratsioonivorme muutmise peamine eesmärk oli tagada

Rohkem

(Microsoft PowerPoint - seminar_6_n\365uded-ainemudel tagasiside.ppt [Compatibility Mode])

(Microsoft PowerPoint - seminar_6_n\365uded-ainemudel tagasiside.ppt [Compatibility Mode]) Tarkvara projekt seminar VI Eelmise iteratsiooni tagasivaade, testimine, installatsioonijuhend, järgmise iteratsiooni näited. Karel Kravik Administratiivset:protestid Probleem: protestide hulk ja kvaliteet

Rohkem

PowerPointi esitlus

PowerPointi esitlus Regulaaravaldised ja skriptimine Windows ja UNIX operatsioonisüsteemides WINDOWS 1. slaid Windows käsurida Käsureaks nimetan programme: cmd.exe powershell.exe Nendesse saab kirjutada käske, millega näiteks

Rohkem

Kom igang med Scratch

Kom igang med Scratch Alustame algusest Getting Started versioon 1.4 SCRATCH on uus programmeerimiskeel, mis lubab sul endal luua interaktiivseid annimatsioone, lugusid, mänge, muusikat, taieseid jm Scratch'i saab kasutada

Rohkem

PÄRNU TÄISKASVANUTE GÜMNAASIUM ESITLUSE KOOSTAMISE JUHEND Pärnu 2019

PÄRNU TÄISKASVANUTE GÜMNAASIUM ESITLUSE KOOSTAMISE JUHEND Pärnu 2019 PÄRNU TÄISKASVANUTE GÜMNAASIUM ESITLUSE KOOSTAMISE JUHEND Pärnu 2019 SISUKORD 1. SLAIDIESITLUS... 3 1.1. Esitlustarkvara... 3 1.2. Slaidiesitluse sisu... 3 1.3. Slaidiesitluse vormistamine... 4 1.3.1 Slaidid...

Rohkem

IFI6083_Algoritmid_ja_andmestruktuurid_IF_3

IFI6083_Algoritmid_ja_andmestruktuurid_IF_3 Kursuseprogramm IFI6083.DT Algoritmid ja andmestruktuurid Maht 4 EAP Kontakttundide maht: 54 Õppesemester: K Eksam Eesmärk: Aine lühikirjeldus: (sh iseseisva töö sisu kirjeldus vastavuses iseseisva töö

Rohkem

Microsoft Word - TallinnLV_lihtsustatud_manual_asutuse_juhataja_ doc

Microsoft Word - TallinnLV_lihtsustatud_manual_asutuse_juhataja_ doc Tallinna Linnavalitsuse sõnumisaatja kasutusjuhend asutuse juhatajale Sisukord 1. Süsteemi sisenemine...2 2. Parooli lisamine ja vahetamine...2 3. Ametnike lisamine ametiasutuse juurde...2 4. Saatjanimede

Rohkem

Microsoft Word - installation-guide.doc

Microsoft Word - installation-guide.doc Dokumendi ajalugu: Versioon Kuupäev Tegevus Autor 1.0 12.04.2008 Dokumendi loomine Maris Aavik 1.1 13.04.2008 Täiendamine Maris Aavik 1.2 13.04.2008 Täiendamine Andres Kalle 1.3 12.05.2008 Täiendused Kerli

Rohkem

SQL

SQL SQL Kuues loeng 3GL inside 4GL Protseduurid Funktsioonid Tavalised Funktsioonid (üks väljund) Ilma väljundita Protseduurid Viitargumentide kasutamise võimalus Tabel-väljundiga Protseduurid Create function

Rohkem

lvk04lah.dvi

lvk04lah.dvi Lahtine matemaatikaülesannete lahendamise võistlus. veebruaril 004. a. Lahendused ja vastused Noorem rühm 1. Vastus: a) jah; b) ei. Lahendus 1. a) Kuna (3m+k) 3 7m 3 +7m k+9mk +k 3 3M +k 3 ning 0 3 0,

Rohkem

Linux süsteemi administreerimine

Linux süsteemi administreerimine Protsesside, mälu jm haldamine Linuxi ehitus (struktuur) Lihtsustatult Protsess Multitasking - palju protsesse töötab paralleelselt Tuumas asub protsesside tabel igal protsessil on identifikaator PID igal

Rohkem

Tartu Kutsehariduskeskus IKT osakond Merlis Karja-Kännaste ASUTUSE DOKUMENDIREGISTRI AVALIK VAADE Analüüs Juhendaja Mirjam-Merike Sõmer Tartu 2015

Tartu Kutsehariduskeskus IKT osakond Merlis Karja-Kännaste ASUTUSE DOKUMENDIREGISTRI AVALIK VAADE Analüüs Juhendaja Mirjam-Merike Sõmer Tartu 2015 Tartu Kutsehariduskeskus IKT osakond Merlis Karja-Kännaste ASUTUSE DOKUMENDIREGISTRI AVALIK VAADE Analüüs Juhendaja Mirjam-Merike Sõmer Tartu 2015 SISUKORD SISSEJUHATUS... 3 1. VILJANDI LINNAVALITSUSE

Rohkem

Operatsioonisüsteemide ehitus

Operatsioonisüsteemide ehitus Lõimed Ülevaade Lõime mõiste Lõimede mudelid Probleemid lõimedega seoses Pthreads Solarise lõimed Windows 2000 lõimed Linuxi lõimed Java lõimed VARMO VENE & MEELIS ROOS 2 Ühe- ja mitmelõimelised protsessid

Rohkem

TARTU ÜLIKOOL Arvutiteaduse instituut Informaatika õppekava Mirjam Iher Nõrgima eeltingimuse staatiline analüüs pinukeeltele Bakalaureusetöö (9 EAP) J

TARTU ÜLIKOOL Arvutiteaduse instituut Informaatika õppekava Mirjam Iher Nõrgima eeltingimuse staatiline analüüs pinukeeltele Bakalaureusetöö (9 EAP) J TARTU ÜLIKOOL Arvutiteaduse instituut Informaatika õppekava Mirjam Iher Nõrgima eeltingimuse staatiline analüüs pinukeeltele Bakalaureusetöö (9 EAP) Juhendaja: Juhendaja: Kalmer Apinis, PhD Vesal Vojdani,

Rohkem

Tartu Kutsehariduskeskus Teksti sisestamine Suurem osa andmetest saab sisestatud klaviatuuril leiduvate sümbolite abil - tähed, numbrid, kirjavahemärg

Tartu Kutsehariduskeskus Teksti sisestamine Suurem osa andmetest saab sisestatud klaviatuuril leiduvate sümbolite abil - tähed, numbrid, kirjavahemärg Teksti sisestamine Suurem osa andmetest saab sisestatud klaviatuuril leiduvate sümbolite abil - tähed, numbrid, kirjavahemärgid jne. Suurte tähtede sisestamiseks hoia all Shift-klahvi. Kolmandate märkide

Rohkem

Word Pro - digiTUNDkaug.lwp

Word Pro - digiTUNDkaug.lwp ARVUSÜSTEEMID Kõik olulised arvusüsteemid on positsioonilised ehk arvu numbrid asuvad neile ettenähtud kindlatel asukohtadel arvujärkudes a i : a a a a a a a - a - a - a - a i Ainus üldtuntud mittepositsiooniline

Rohkem

Õppematerjalide esitamine Moodle is (alustajatele) seminar sarjas Lõunatund e-õppega 12. septembril 2017 õppedisainerid Ly Sõõrd (LT valdkond) ja Dian

Õppematerjalide esitamine Moodle is (alustajatele) seminar sarjas Lõunatund e-õppega 12. septembril 2017 õppedisainerid Ly Sõõrd (LT valdkond) ja Dian Õppematerjalide esitamine Moodle is (alustajatele) seminar sarjas Lõunatund e-õppega 12. septembril 2017 õppedisainerid Ly Sõõrd (LT valdkond) ja Diana Lõvi (SV valdkond) Järgmised e-lõunad: 10. oktoober

Rohkem

Microsoft Word - 56ylesanded1415_lõppvoor

Microsoft Word - 56ylesanded1415_lõppvoor 1. 1) Iga tärnike tuleb asendada ühe numbriga nii, et tehe oleks õige. (Kolmekohaline arv on korrutatud ühekohalise arvuga ja tulemuseks on neljakohaline arv.) * * 3 * = 2 * 1 5 Kas on õige, et nii on

Rohkem

Microsoft PowerPoint - Lisa 5 koolituse materjalid

Microsoft PowerPoint - Lisa 5 koolituse materjalid 03. detsember, 2009 Piirangutest vabaks IT-ga või IT-ta? Heiti Mering Heiti.mering@ee.fujitsu.com Eero Elenurm eero@elenurm.net Piirangud või võimalused? Millised on meie oskused? Millised on meie teadmised?

Rohkem

Andmebaasid, MTAT Andmebaasikeeled 11.loeng

Andmebaasid, MTAT Andmebaasikeeled 11.loeng Andmebaasid, MTAT.03.264 Andmebaasikeeled 11. loeng Anne Villems Eksamiaegade valimine Kas on vaja eksamiaega mai lõpus? I eksami aeg. valikud: 3., 4. või 5. juuni kell 10.00 II eksami aeg. 17. kell 12.00

Rohkem

MTAT Operatsioonisüsteemid - Turvalisus

MTAT Operatsioonisüsteemid - Turvalisus Regulaaravaldised ja skriptimine Windows ja UNIX operatsioonisüstemides WINDOWS 1. slaid Windows käsurida Käsureaks nimetan programme: cmd.exe powershell.exe command.com (tänapäevastes OS ei kasutata)

Rohkem

vv05lah.dvi

vv05lah.dvi IMO 05 Eesti võistkonna valikvõistlus 3. 4. aprill 005 Lahendused ja vastused Esimene päev 1. Vastus: π. Vaatleme esiteks juhtu, kus ringjooned c 1 ja c asuvad sirgest l samal pool (joonis 1). Olgu O 1

Rohkem

Pealkiri

Pealkiri Andmebaasid (6EAP) I praktikum Mida praktikumides tehakse? Õpitakse SQL i Tehakse andmebaas ope (igas praktikumis natuke, kuni lõpuks saab valmis) Tehakse andmebaas edu (kui ope on valmis, tehakse edu,

Rohkem

Andmeturve

Andmeturve CORBA Sissejuhatus IDL CORBA struktuur Serveri ehitus Objekti adapter Lisateenused MEELIS ROOS 1 CORBA sissejuhatus CORBA Common Object Request Broker Architecture Üldine Objektipäringute Vahendaja Arhitektuur:)

Rohkem

Scala ülevaade 1 Meetodid, muutujad ja väärtused. Süntaks 2 Lihtsad tüübid ja väärtused. 3 OOP, case-klassid ja mustrisobitus. 4 Puhta Scala väärtusta

Scala ülevaade 1 Meetodid, muutujad ja väärtused. Süntaks 2 Lihtsad tüübid ja väärtused. 3 OOP, case-klassid ja mustrisobitus. 4 Puhta Scala väärtusta Scala ülevaade 1 Meetodid, muutujad ja väärtused. Süntaks 2 Lihtsad tüübid ja väärtused. 3 OOP, case-klassid ja mustrisobitus. 4 Puhta Scala väärtustamine. 5 Keerulisemad tüübid. 6 Nähtavus, implitsiitsus.

Rohkem

Skriptid ja käsud

Skriptid ja käsud TTÜ informaatikainstituut Skriptid ja käsud Skript on Scratchi programmi suhteliselt sõltumatu üksus, mida mõnedes programmeerimiskeeltes nimetatakse protseduurideks või funktsioonideks. Skript on alati

Rohkem

Statistikatarkvara

Statistikatarkvara Sissejuhatus statistika erialasse, sissejuhatus matemaatika erialasse, 20. september 2018 Statistikatarkvara põgus ülevaade Krista Fischer Statistikatarkvara kategooriad Võib jagada mitut moodi: Tarkvara,

Rohkem

Matemaatiline analüüs IV 1 3. Mitme muutuja funktsioonide diferentseerimine 1. Mitme muutuja funktsiooni osatuletised Üleminekul ühe muutuja funktsioo

Matemaatiline analüüs IV 1 3. Mitme muutuja funktsioonide diferentseerimine 1. Mitme muutuja funktsiooni osatuletised Üleminekul ühe muutuja funktsioo Matemaatiline analüüs IV 1 3. Mitme muutuja funktsioonide diferentseerimine 1. Mitme muutuja funktsiooni osatuletised Üleminekul üe muutuja funktsioonidelt m muutuja funktsioonidele, kus m, 3,..., kerkib

Rohkem

Microsoft Word - Vx610 EMV KASUTUSJUHEND.doc

Microsoft Word - Vx610 EMV KASUTUSJUHEND.doc MAKSETERMINALI KASUTUSJUHEND VERIFONE Vx610 GSM Kliendiabi: (0) 6711 444 (kõik nädalapäevad 24 h) Makseterminalide osakond: (0) 6711 411 (tööpäeviti kell 9.00 17.00) Faks: (0) 6711 420 Email: posgrupp@estcard.ee

Rohkem

SAF 7 demo paigaldus. 1.Eeldused SAF 7 demo vajab 32- või 64-bitist Windows 7, Window 8, Windows 10, Windows Server 2008 R2, Windows Server 2012, Wind

SAF 7 demo paigaldus. 1.Eeldused SAF 7 demo vajab 32- või 64-bitist Windows 7, Window 8, Windows 10, Windows Server 2008 R2, Windows Server 2012, Wind SAF 7 demo paigaldus. 1.Eeldused SAF 7 demo vajab 32- või 64-bitist Windows 7, Window 8, Windows 10, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows Server 2016 või Windows

Rohkem

Microsoft Word - RM_ _17lisa2.rtf

Microsoft Word - RM_ _17lisa2.rtf Maksu- ja Tolliamet Maksukohustuslane Vorm KMD INF Nimi Registri- või isikukood A-osa ANDMED VÄLJASTATUD ARVETE KOHTA Esitatakse koos käibedeklaratsiooniga maksustamisperioodile järgneva kuu 20. kuupäevaks

Rohkem

Microsoft Word - HOTSEC kasutusjuhend v1.900.docx

Microsoft Word - HOTSEC kasutusjuhend v1.900.docx HOTSEC Tarkvara kasutusjuhend v. 1.9 1 Sisukord Käivitamine:... 3 Programmi kasutamine... 4 Kasutajate lisamine ja eemaldamine:... 6 Jooksev logi:... 9 Häired:... 9 2 HOTSEC põhioperatsioonide kirjeldus

Rohkem

Hoia oma arvuti turvaline ja kiire 1.Leia start nupust alustades Juhtpaneel 2.Juhtpaneeli aadressiribalt leia Kõik juhtpaneeli üksused 3.Avanenud tööa

Hoia oma arvuti turvaline ja kiire 1.Leia start nupust alustades Juhtpaneel 2.Juhtpaneeli aadressiribalt leia Kõik juhtpaneeli üksused 3.Avanenud tööa Hoia oma arvuti turvaline ja kiire 1.Leia start nupust alustades Juhtpaneel 2.Juhtpaneeli aadressiribalt leia Kõik juhtpaneeli üksused 3.Avanenud tööaknas leia Windows Update 4.Lase arvutil kontrollida

Rohkem

EBSCO täistekstiandmebaaside kasutamine Otsingu sooritamiseks: 1. Logi sisse 2. Vali EBSCOhost Web 3. Seejärel vali andmebaas, milles soovid otsingut

EBSCO täistekstiandmebaaside kasutamine Otsingu sooritamiseks: 1. Logi sisse 2. Vali EBSCOhost Web 3. Seejärel vali andmebaas, milles soovid otsingut EBSCO täistekstiandmebaaside kasutamine Otsingu sooritamiseks: 1. Logi sisse 2. Vali EBSCOhost Web 3. Seejärel vali andmebaas, milles soovid otsingut sooritada. Andmebaasid on temaatilised. Koolitööde

Rohkem

Maksu- ja Tolliamet MAKSUKOHUSTUSLANE Vorm KMD INF Nimi Registri- või isikukood A-osa ANDMED VÄLJASTATUD ARVETE KOHTA. Esitatakse koos käibedeklaratsi

Maksu- ja Tolliamet MAKSUKOHUSTUSLANE Vorm KMD INF Nimi Registri- või isikukood A-osa ANDMED VÄLJASTATUD ARVETE KOHTA. Esitatakse koos käibedeklaratsi Vorm KMD INF A-osa ANDMED VÄLJASTATUD ARVETE KOHTA. Esitatakse koos käibedeklaratsiooniga maksustamisperioodile järgneva kuu 0. kuupäevaks Kinnitan, et deklareeritavad arved puuduvad Esitan arvete andmed

Rohkem

1. Üliõpilased 1.1 Tõendid Vali menüüst: Üliõpilased tõendid tõendite trükkimine. Avaneb vorm Tõendite trükkimine, vali tõendi liik Tõend õppim

1. Üliõpilased 1.1 Tõendid Vali menüüst: Üliõpilased tõendid tõendite trükkimine. Avaneb vorm Tõendite trükkimine, vali tõendi liik Tõend õppim 1. Üliõpilased 1.1 Tõendid Vali menüüst: Üliõpilased tõendid tõendite trükkimine. Avaneb vorm Tõendite trükkimine, vali tõendi liik. 1.1.1 Tõend õppimise kohta TLÜ-s Seda tõendiliiki saab väljastada ainult

Rohkem

MOOCi „Programmeerimise alused“ ülesannete lahenduste analüüs

MOOCi „Programmeerimise alused“ ülesannete lahenduste analüüs TARTU ÜLIKOOL LOODUS- JA TÄPPISTEADUSTE VALDKOND Arvutiteaduse instituut Informaatika õppekava Helen Hendrikson MOOCi Programmeerimise alused ülesannete lahenduste analüüs Bakalaureusetöö (9 EAP) Juhendaja:

Rohkem

Microsoft Word - Keypad-controller-manual-new_1.docx

Microsoft Word - Keypad-controller-manual-new_1.docx Eraldiseisev ühe ukse juurdepääsukontroller Kasutusjuhend Enne seadme paigaldamist ja kasutamist lugege tähelepanelikult seda juhendit 1. Pakkeleht Nimi Kogus Märkused Sõrmistik 1 Kasutusjuhend 1 Kruvikeeraja

Rohkem

Pangalingi spetsifikatsioon Pocopay pangalingilt makse algatamiseks tuleb kasutada teenust Kaupmees teeb päringu Pocopayle aadressile

Pangalingi spetsifikatsioon Pocopay pangalingilt makse algatamiseks tuleb kasutada teenust Kaupmees teeb päringu Pocopayle aadressile Pangalingi spetsifikatsioon Pocopay pangalingilt makse algatamiseks tuleb kasutada teenust 1011. Kaupmees teeb päringu Pocopayle aadressile https://my.pocopay.com/banklink. Vastuspäring tehakse makse õnnestumise

Rohkem

Diskreetne matemaatika I Kevad 2019 Loengukonspekt Lektor: Valdis Laan 20. juuni a.

Diskreetne matemaatika I Kevad 2019 Loengukonspekt Lektor: Valdis Laan 20. juuni a. Diskreetne matemaatika I Kevad 2019 Loengukonspekt Lektor: Valdis Laan 20. juuni 2019. a. 2 Sisukord 1 Matemaatiline loogika 7 1.1 Lausearvutus.................................. 7 1.1.1 Põhimõistete meeldetuletamine....................

Rohkem

Automaatjuhtimise alused Automaatjuhtimissüsteemi kirjeldamine Loeng 2

Automaatjuhtimise alused Automaatjuhtimissüsteemi kirjeldamine Loeng 2 Automaatjuhtimise alused Automaatjuhtimissüsteemi kirjeldamine Loeng 2 Laplace'i teisendus Diferentsiaalvõrrandite lahendamine ilma tarkvara toeta on keeruline Üheks lahendamisvõtteks on Laplace'i teisendus

Rohkem

Ruutvormid Denitsioon 1. P n Ütleme, et avaldis i;j=1 a ijx i x j ; kus a ij = a ji ; a ij 2 K ja K on korpus, on ruutvorm üle korpuse K muutujate x 1

Ruutvormid Denitsioon 1. P n Ütleme, et avaldis i;j=1 a ijx i x j ; kus a ij = a ji ; a ij 2 K ja K on korpus, on ruutvorm üle korpuse K muutujate x 1 Ruutvormid Denitsioon. P n Ütleme, et avaldis i;j= a ijx i x j ; kus a ij = a ji ; a ij K ja K on korus, on ruutvorm üle koruse K muutujate x ;;x n suhtes. Maatriksit =(a ij ) nimetame selle ruutvormi

Rohkem

Funktsionaalne Programmeerimine

Funktsionaalne Programmeerimine Kõrvalefektid ja Haskell Kõik senised programmid on olnud ilma kõrvalefektideta; so. puhtalt funktsionaalsed. Programmi täitmise ainsaks efektiks on tema väartus. Osade ülesannete jaoks on kõrvalefektid

Rohkem

TARTU ÜLIKOOL LOODUS- JA TÄPPISTEADUSTE VALDKOND ARVUTITEADUSE INSTITUUT Lauri Kongas Turvaauk CVE Referaat aines Andmeturve MTAT Õpp

TARTU ÜLIKOOL LOODUS- JA TÄPPISTEADUSTE VALDKOND ARVUTITEADUSE INSTITUUT Lauri Kongas Turvaauk CVE Referaat aines Andmeturve MTAT Õpp TARTU ÜLIKOOL LOODUS- JA TÄPPISTEADUSTE VALDKOND ARVUTITEADUSE INSTITUUT Lauri Kongas Turvaauk CVE-2016-0778 Referaat aines Andmeturve MTAT.03.134 Õppejõud: Meelis Roos Tartu 2016 OpenSSH OpenSSH hõlmab

Rohkem

Microsoft PowerPoint - loeng2.pptx

Microsoft PowerPoint - loeng2.pptx Kirjeldavad statistikud ja graafikud pidevatele tunnustele Krista Fischer Pidevad tunnused ja nende kirjeldamine Pidevaid (tihti ka diskreetseid) tunnuseid iseloomustatakse tavaliselt kirjeldavate statistikute

Rohkem

X Window System tuntud kui: X11 X X-Windows akendussüsteem/akendesüsteem rastergraafikat toetavatele ekraanidele UNIX-maailmas väga levinud mitmesugus

X Window System tuntud kui: X11 X X-Windows akendussüsteem/akendesüsteem rastergraafikat toetavatele ekraanidele UNIX-maailmas väga levinud mitmesugus X Window System tuntud kui: X11 X X-Windows akendussüsteem/akendesüsteem rastergraafikat toetavatele ekraanidele UNIX-maailmas väga levinud mitmesugused realisatsioonid ka Windowsile erinevad realisatsioonid

Rohkem

Materjalid koostas ja kursuse viib läbi Tartu Ülikooli arvutiteaduse instituudi programmeerimise õpetamise töörühm 2.1 Muutujad SISSEJUHATUS Programmi

Materjalid koostas ja kursuse viib läbi Tartu Ülikooli arvutiteaduse instituudi programmeerimise õpetamise töörühm 2.1 Muutujad SISSEJUHATUS Programmi 2.1 Muutujad SISSEJUHATUS Programmide koostamisel on võimalik kasutada väga erinevaid komponente näiteks muutujaid, valikulauseid, tsükleid, alamprogramme jne. Selles osas vaatame lähemalt muutujaid. MUUTUJAD

Rohkem

Skriptimiskeeli, mida ei käsitletud Perl Python Visual Basic Script Edition (VBScript) MS DOS/cmd skriptid Windows PowerShell midagi eksootilisemat: G

Skriptimiskeeli, mida ei käsitletud Perl Python Visual Basic Script Edition (VBScript) MS DOS/cmd skriptid Windows PowerShell midagi eksootilisemat: G Skriptimiskeeli, mida ei käsitletud Perl Python Visual Basic Script Edition (VBScript) MS DOS/cmd skriptid Windows PowerShell midagi eksootilisemat: GIMP Script-Fu 1 Skriptimiskeeli: Perl v1.0 loodud Larry

Rohkem

Operatsioonisüsteemi ülesanded

Operatsioonisüsteemi ülesanded Praktikum 2 OPERATSIOONISÜSTEEMIDE MASSPAIGALDUS Operatsioonisüsteemide masspaigaldus Suure arvu arvutisüsteemide korral ei ole mõistlik operatsioonisüsteeme paigaldada manuaalselt. Operatsioonisüsteemide

Rohkem

Matemaatika ainekava 8.klass 4 tundi nädalas, kokku 140 tundi Kuu Õpitulemus Õppesisu Algebra (65 t.) Geomeetria (60 t.) Ajavaru kordamiseks (15 õppet

Matemaatika ainekava 8.klass 4 tundi nädalas, kokku 140 tundi Kuu Õpitulemus Õppesisu Algebra (65 t.) Geomeetria (60 t.) Ajavaru kordamiseks (15 õppet Matemaatika ainekava 8.klass 4 tundi nädalas, kokku 140 tundi Algebra (65 t.) Geomeetria (60 t.) Ajavaru kordamiseks (15 õppetundi) septembernovember korrastab hulkliikmeid Hulkliige. Tehted liidab, lahutab

Rohkem

Tartu Ülikool

Tartu Ülikool Tartu Ülikool Code coverage Referaat Koostaja: Rando Mihkelsaar Tartu 2005 Sissejuhatus Inglise keelne väljend Code coverage tähendab eesti keeles otse tõlgituna koodi kaetust. Lahti seletatuna näitab

Rohkem

HWU_AccountingAdvanced_October2006_EST

HWU_AccountingAdvanced_October2006_EST 10. Kulude periodiseerimine Simulatsioone (vt pt 5) kasutatakse ka juhul, kui soovitakse mõnd saadud ostuarvet pikemas perioodis kulusse kanda (nt rendiarve terve aasta kohta). Selleks tuleb koostada erinevad

Rohkem

Microsoft Word - EHR.docx

Microsoft Word - EHR.docx earvekeskus E-ARVE TELLIMUSTE JUHEND 1 Sisukord E-arvete tellimused... 3 Klientide tellimused... 3 E-arve tellimuse lisamine... 3 E-arve tellimuse muutmine... 9 Minu tellimused... 10 Minu tellimuse sisestamine...

Rohkem

untitled

untitled Riistvara kirjelduskeel VHDL L4, L5. Riistvara kirjelduskeel VHDL L6. Mäluga süsteemid VHDL-s L7. VHDL ja süntees 1 Atribuudid Atribuut on väärtus, funktsioon, tüüp, vahemik, signaal või konstant, mida

Rohkem

Sügis 2018 Kõrgema matemaatika 2. kontrolltöö tagasiside Üle 20 punkti kogus tervelt viis üliõpilast: Robert Johannes Sarap, Enely Ernits, August Luur

Sügis 2018 Kõrgema matemaatika 2. kontrolltöö tagasiside Üle 20 punkti kogus tervelt viis üliõpilast: Robert Johannes Sarap, Enely Ernits, August Luur Sügis 2018 Kõrgema matemaatika 2. kontrolltöö tagasiside Üle 20 punkti kogus tervelt viis üliõpilast: Robert Johannes Sarap, Enely Ernits, August Luure, Urmi Tari ja Miriam Nurm. Ka teistel oli edasiminek

Rohkem

Outlookist dokumendi registreerimine Plugina seadistamine Dokumendi registreerimine Outlookist Vastusdokumendi registreerimine Outlookist Outlooki plu

Outlookist dokumendi registreerimine Plugina seadistamine Dokumendi registreerimine Outlookist Vastusdokumendi registreerimine Outlookist Outlooki plu Outlookist dokumendi registreerimine Plugina seadistamine Dokumendi registreerimine Outlookist Vastusdokumendi registreerimine Outlookist Outlooki plugina ikoon on kadunud Outlooki kasutajad saavad dokumente

Rohkem

Pealkiri

Pealkiri TARTU ÜLIKOOL Arvutiteaduse instituut Informaatika õppekava Siiri Saar Teek predikaatarvutuse väljendamisülesannete lahenduste kontrollimiseks Bakalaureusetöö (9 EAP) Juhendaja: Reimo Palm Tartu 2017 Teek

Rohkem

Pythoni Turtle moodul ja Scratchi värvilisem pool Plaan Isikukoodi kontrollnumbri leidmine vaatame üle lahenduse kontrollnumbri leimiseks. Pythoni joo

Pythoni Turtle moodul ja Scratchi värvilisem pool Plaan Isikukoodi kontrollnumbri leidmine vaatame üle lahenduse kontrollnumbri leimiseks. Pythoni joo Pythoni Turtle moodul ja Scratchi värvilisem pool Plaan Isikukoodi kontrollnumbri leidmine vaatame üle lahenduse kontrollnumbri leimiseks. Pythoni joonistamise võimalused Turtle mooduli abil. Scratchi

Rohkem

3D mänguarenduse kursus (MTAT ) Loeng 3 Jaanus Uri 2013

3D mänguarenduse kursus (MTAT ) Loeng 3 Jaanus Uri 2013 3D mänguarenduse kursus (MTAT.03.283) Loeng 3 Jaanus Uri 2013 Teemad Tee leidmine ja navigatsioon Andmete protseduuriline genereerimine Projektijuhtimine Tee leidmine Navigatsiooni võrgustik (navigation

Rohkem

6. KLASSI MATEMAATIKA E-TASEMETÖÖ ERISTUSKIRI Alus: haridus- ja teadusministri määrus nr 54, vastu võetud 15. detsembril E-TASEMETÖÖ EESMÄRK Tas

6. KLASSI MATEMAATIKA E-TASEMETÖÖ ERISTUSKIRI Alus: haridus- ja teadusministri määrus nr 54, vastu võetud 15. detsembril E-TASEMETÖÖ EESMÄRK Tas 6. KLASSI MATEMAATIKA E-TASEMETÖÖ ERISTUSKIRI Alus: haridus- ja teadusministri määrus nr 54, vastu võetud 15. detsembril 2015. E-TASEMETÖÖ EESMÄRK Tasemetööga läbiviimise eesmärk on hinnata riiklike õppekavade

Rohkem

ITI Loogika arvutiteaduses

ITI Loogika arvutiteaduses Lauseloogika: Loomulik tuletus Loomuliku tuletuse süsteemid on liik tõestussüsteeme nagu Hilbeti süsteemidki. Neile on omane, et igal konnektiivil on oma sissetoomise (intoduction) ja väljaviimise (elimination)

Rohkem

PowerPoint Presentation

PowerPoint Presentation Maamaksu infosüsteem (MAKIS) Maksustamishind Talumistasud Andres Juss Maa-ameti kinnisvara hindamise osakonna juhataja 13.11.2018 MAKIS eesmärk Kõik omavalitsused kasutavad veebipõhist maamaksu infosüsteemi

Rohkem

KOTKAS AVE kasutajakeskne juhend Loomise Muutmise kuupäev: kuupäev: Versioon: 2.0 Klient: Keskkonnaministeeriumi Infotehno

KOTKAS AVE kasutajakeskne juhend Loomise Muutmise kuupäev: kuupäev: Versioon: 2.0 Klient: Keskkonnaministeeriumi Infotehno Loomise 22.09.2015 Muutmise 10.10.2018 kuupäev: kuupäev: Versioon: 2.0 Klient: Keskkonnaministeeriumi Infotehnoloogiakeskus Projekt: Keskkonnaotsuste terviklik autonoomne süsteem (KOTKAS) Dokument: AVE

Rohkem