TAMPEREEN TEKNILLINEN YLIOPISTO Tietotekniikan osasto. ANTTI VIRTANEN Visuaalinen tulkki ohjelmoinnin opetukseen Diplomityö
|
|
- Lotta Melasniemi
- 8 vuotta sitten
- Katselukertoja:
Transkriptio
1 TAMPEREEN TEKNILLINEN YLIOPISTO Tietotekniikan osasto ANTTI VIRTANEN Visuaalinen tulkki ohjelmoinnin opetukseen Diplomityö Aihe hyväksytty osastoneuvoston kokouksessa Tarkastajat: Prof. Hannu-Matti Järvinen (TTY) DI Essi Lahtinen (TTY) 1
2 Alkulause Haluan kiittää työn ohjaajia professori Hannu-Matti Järvistä ja tutkija Essi Lahtista, jotka pysyivät kärsivällisinä tekemisen kangerrellassa. Molemmat jaksoivat korjata kirjoitusvirheitäni ja antoivat hedelmällistä palautetta sisällöstä ahkerasti. Lämpimät kiitokset kaikille työn tekemisessä kannustaneille ja auttaneille ystäville ja kollegoille. Erityiskiitokset Mira Tammiselle, Mika Valtolalle sekä #titeplanets IRCkeskustelukanavan väelle, jotka saivat suurimman osan työhön liittyvästä tilityksestä. Tampereella Antti Virtanen Insinöörinkatu 68 B
3 Sisällysluettelo 1 Johdanto Ohjelmien visualisointi TTY:n perusohjelmoinnin opetus Tietokonepohjaisen visualisoinnin tarve Visualisoinnin hyödyt Visualisoinnin käyttöönoton ongelmat Hyvän visualisointityökalun ominaisuudet Visualisoinnin hyötyjen arviointi Olemassaolevat järjestelmät Tango, X-Tango, Polka Trakla, Trakla Blue, BlueJ Jeliot-perhe SDE (SIMPLESEM) Yhteenveto Lausekielten jäsentäminen Formaalit kielet ja kielioppi Vasemmalle rekursiivisuus Säännöllisten kielten luokittelu (LALR, LR, LL) Kurkistus Lausekielten määrittely Jäsennyspuu Yksikäsitteisyys Presedenssi ja sitovuus Jäsennystekniikat Lausekielten jäsentäminen käytännössä Selaaja Jäsentäjä Välikieli Postfix Yleisassembler Tavukoodi
4 3.4.4 Puurakenne (AST) Tulkit ja virtuaalikoneet Kääntämisen ja tulkkaamisen ero Virtuaalikone Tulkkaamisen edut Tulkkien toteuttaminen Symbolitulkin perusrakenne Käskykanta Puurakenne (AST) tulkin välikielenä Tulkkaamisen nopeus Konekielelle kääntäminen tulkissa Muistimalli Automaattinen roskienkeruu Symbolitaulu Aktivaatiopino Ajonaikaiset semanttiset tarkistukset VIP visualisaattorin toteutus Perusrakenne Käytetyt apukirjastot Ongelmat CUP:n kanssa Välikieli Suoritusaskel Kääntäjä Staattiset semanttiset tarkistukset Profiloija Testaus Loki Regressiotestaus Käyttöliittymä Muuttujien ja funktiokutsujen esittäminen Hallintapainikkeet Visualisointien tekeminen Ohjekommentit
5 5.10 Koodieditori Lausekkeiden evaluoinnin esittäminen Tulkki Tulkkialgoritmi Dynaamiset semanttiset tarkistukset Symbolitaulu Aktivaatiopino Muisti Muuttujien toteutus VIP:n ohjelmointikieli C Tyypitys ja tietotyypit Ominaisuuksia, joita ei ole toteutettu Tiedon luku ja kirjoitus Funktiot Lauseet Jatkokehitysajatuksia Räätälöinti Kielen muokkaaminen Välikielen esittäminen Muisti-ikkuna Uudet C-- ominaisuudet Askelten rajoittaminen Undo-toiminto Käyttöliittymä C++:n STL-standardikirjaston toteuttaminen Yhteenveto Lähdeluettelo...63 Liite 1 Selaajan JFlex-tiedosto Liite 2 Jäsentäjän CUP-tiedosto 5
6 TAMPEREEN TEKNILLINEN YLIOPISTO Tietotekniikan osasto Ohjelmistotekniikka VIRTANEN, ANTTI: Visuaalinen tulkki ohjelmoinnin opetukseen Diplomityö, 51 s., 21 liites. Tarkastajat: prof. Hannu-Matti Järvinen, tutkija Essi Lahtinen Rahoittajat: TTY, Codewitz/Minerva, Virtuaali-yliopisto. Toukokuu 2005 Avainsanat: tulkki, C++, visualisointi, opetus Ohjelmien visualisointia on tutkittu paljon ja visualisointiin on kehitetty erilaisia työkaluja. Opetuskäyttössä erityisesti tietorakenteiden ja algoritmien visualisointi on osoittautunut hyödylliseksi. Oppikirjoissa esitetään usein ohjelmien toimintaa kuvien ja symbolien avulla esimerkiksi piirtämällä nuolia kuvaamaan osoittimia. Tässä työssä toteutettiin visuaalinen tulkki C++-kielen osajoukolle ohjelmoinnin peruskurssin tarpeisiin. Toteutettu tulkki visualisoi ohjelman tilan ja esittää suorituksen etenemisen askel kerrallaan. Tulkki on suunniteltu ohjelmoinnin perusopetukseen, joten tehokkuuteen ei ole kiinnitetty erityistä huomiota. C++-kielen perusrakenteet toteutettiin työn puitteissa, mutta mallit, oliot ja poikkeukset jätettiin toteuttamatta. Vastaavia järjestelmiä on toteutettu muissa yliopistoissa, mutta mikään tutkituista vaihtehdoista ei soveltunut TTY:n käyttöön, joten tässä työssä toteutettiin kokonaan itse tehty visualisaattori. Erityistä huomiota kiinnitettiin helppokäyttöisyyteen sekä opiskelijan että opettajan näkökulmasta. Järjestelmän lähdekoodi on kokonaisuudessaan saatavilla ilmaiseksi ei-kaupalliseen käyttöön. Tulkki on toteutettu Java-applettina, joten sitä voi käyttää millä tahansa käyttöjärjestelmällä. WWW-palvelinta sijaan visualisointeja voidaan ajaa paikalliselta kovalevyltä selaimella. Tulkkia on käytetty TTY:llä perusohjelmoinnin opetuksessa ja uusien visualisointien luominen on osoittautunut helpoksi. Työkalun käytöstä on kerätty opiskelijapalautetta, joka on ollut melko neutraalia. Tulkin käyttö on ollut täysin vapaaehtoista, joten aineiston pohjalta on vaikea arvioida sen hyödyllisyyttä. 6
7 TAMPERE UNIVERSITY OF TECHNOLOGY Department of Computer Science, Institute of Software Systems VIRTANEN, ANTTI: Visual interpreter for learning programming Master of Science Thesis, 51 pages, 21 enclosure pages Examiner: Dr. Hannu-Matti Järvinen and Res. Essi Lahtinen May 2005 Keywords: interpreter, C++, visualization, learning Programming books often present the structure and behavior of programs using pictures and symbols. For example, arrows commonly present pointers. Consequently, there has been significant amount of research on visualizing programs and a variety of tools have been developed. A visual interpreter for a subset of C++ programming language was developed in this project. The interpreter visualizes the state of a given program and it's execution step by step. The interpreter has not been optimized for speed as the system was desigend for teaching introductory programming. The basic constructs of C++ were implemented but advanced features like templates, object oriented programming and exceptions were left out. Similar systems have been developed in other universities but all examined systems lacked some important features from our point of view. Thus, a completely new system was developed instead of tailoring an existing one. Ease of use, from both student's and teacher's point of view, was considered especially important. The full source code of the system is available on request for non-commercial use. Being a Java-applet, the interpreter is available on virtually all platforms. The system is still a stand-alone program and can be used without a WWW server. The interpreter has been used on Tampere University of Technology for introductory programming course and creating new visualizations has proven to be easy. Survey was made among the students and generally the feedback was neutral. As using the system has been voluntary it is difficult to estimate whether the visualization had any impact on the students. 7
8 Termit ja lyhenteet Työssä käytettyjen termien ja lyhenteiden selityksiä. Mikäli työssä on haluttu viitata tiettyyn versioon esimerkiksi JDK:sta, versio on mainittu erikseen. lyhenne selitys viite Java Java-ohjelmointikieli yleensä AWT Abstract Window Toolkit, Javan alkuperäinen käyttöliittymäkirjasto JDK Java Developer's Kit, Sun Microsystemsin julkaisema Javan kehitysympäristö Swing Javan nykyinen käyttöliittymäkirjasto JIT Just-In-Time, (virtuaalikoneissa) konekielelle kääntäminen juuri ennen operaation suorittamista WWW World Wide Web HTTP HyperText Transfer Protocol CGI Common Gateway Interface MVC Model-View-Controller, arkkitehtuurimalli TTY Tampereen Teknillinen Yliopisto VIP Visual InterPreter Perl Perl-ohjelmointikieli LR Left-to-right, Right-most derivation LALR Left-to-right, Right-most derivation AST Abstract Syntax Tree, ohjelmaa esittävä puurakenne BNF Backus-Naur Form 8
9 lyhenne selitys viite CFG Context-Free Grammar UML Unified Modeling Language ITiCSE Information Technology in Computer Science Education STL Standard Template Library HTML HyperText Mark-up Language ACM Association for Computing Machinery SIGCSE The ACM Special Interest Group on Computer Science VM Virtual Machine, virtuaalikone SDE Simplesem Development Environment, visualisointiympäristö ja virtuaalikone Simplesemarkkitehtuurille TRAKLA Teknillisessä Korkeakoulussa kehitetty järjestelmä tietorakententeiden ja algoritmien visualisointiin 9
10 1 Johdanto Ohjelmien, tietorakenteiden ja algoritmien koneellista visualisointia ja opettamista on tutkittu kauan. Tutkimus ja kehitystyö on eriytynyt käsittelemään ohjelmien eri piirteiden visualisointia ohjelmistokehityksessä ja ohjelmoinnin opetuksessa. Ohjelmoinnin eri osa-alueille on havaittu hedelmälliseksi käyttää erilaisia visualisointeja: erityisesti tietorakenteet ja algoritmit esitetään usein abstraktilla tasolla nuolien, laatikoiden yms. avulla. Laajasta tutkimuksesta huolimatta visualisoinnin hyödyllisyydestä oppimisen kannalta ei ole selvyyttä. Yleisesti kuitenkin oletetaan visualisoinnista olevan hyötyä oppimisen kannalta. Interaktiivisuus on nähty olennaiseksi itseopiskeluun ja opetuksen tueksi tarkoitetuissa visualisoinneissa. Mikäli opiskelija voi kokeilla eri lähestymistapoja ja ratkaisuja, ongelman eri aspektien ymmärtäminen on syvällisempää. Vapaan interaktiivisuuden saavuttaminen ohjelmien visualisoinnissa edellyttää mahdollisuutta muokata visualisoitavaa ohjelmakoodia ja siten jonkinlaisen tulkin toteuttamista. Ohjelmointikielten tulkin toteuttaminen mielivaltaiselle ohjelmointikielelle on kääntäjän toteuttamiselle läheinen ongelma. Kuten kääntäjän, tulkin täytyy jäsentää lähdekoodi, suorittaa sille syntaksin ja semantiikan tarkistuksia ja muodostaa ohjelmasta välikielinen versio. Konekielikoodin generoinnin sijaan tulkki voi toteuttaa kielen operaatiot korkean tason kielellä, jolla tulkki itse on kirjoitettu. Koska tulkkaaminen hidastaa ohjelman suoritusta, erityistä huomiota tulkkien tutkimuksessa on kiinnitetty tehokkuuteen. Tehokkaiden tulkkien toteuttaminen on kuitenkin erittäin monimutkaista. Tämän diplomityön tavoitteena oli rakentaa erityisesti ohjelmoinnin perusopetukseen soveltuva visuaalinen tulkki, jossa yksinkertaisten ohjelmien ajonaikaista toimintaa voi tarkastella yksityiskohtaisella tasolla. Tavoitteena oli, että työssä kehitetty visuaalinen tulkki (Visual InterPreter, VIP) tukisi mahdollisimman hyvin ohjelmoinnin perusopetusta TTY:n kurssilla Laaja 10
11 ohjelmointi. Koska tulkkia oli tarkoitus käyttää perusohjelmoinnin opetuksessa, tulkilla suoritettavat koodiesimerkit olivat yksinkertaisia. Näin ollen tulkin tehokkuus oli toissijaista ylläpidettävyyden ja selkeyden rinnalla. Jotta tulkin käyttö olisi mahdollisimman helppoa uusien esimerkkien tuottamisen piti vaatia mahdollisimman vähän vaivaa opettajalta, eikä työkalun asentaminen ja käyttöönotto saanut olla työlästä. VIP:n simuloima ohjelmointikieli on C++:n aito osajoukko, jolle on annettu nimi C--. C-- sisältää C++:n perusrakenteet, mutta olio-ohjelmointi, vuot ja poikkeukset on jätetty toteuttamatta. Luvussa 2 luodaan katsaus muihin ohjelmoinnin opetukseen tarkoitettuihin visualisointiympäristöihin ja määritellään perusohjelmoinnin opetuksen kannalta olennaisia ominaisuuksia sekä käsitellään työkalujen arviointikriteereitä. Lausekielten jäsentämisen teoriaa, tulkkien ja kääntäjien eroja sekä tulkkien toteutustekniikoita käsitellään luvuissa 3-5. Tulkkien ja virtuaalikoneiden tehokkuusoptimointia ja lausekielten erityiskysymyksiä ei käsitellä. Luvussa 6 esitetään varsinainen toteutettu visualisointiympäristö. Luvut 7 ja 8 käsittelevät työn onnistumista ja jatkokehitysajatuksia. 11
12 2 Ohjelmien visualisointi Ohjelmointikielten visualisointia opetustarkoituksiin on tutkittu ja kehitetty ainakin 1960-luvulta alkaen [Knowlton 1966]. Graafinen visualisointi on luonnollinen tapa opettaa algoritmeja ja ohjelmointikielten semantiikkaa. Ohjelmoinnin opetuksessa eri kursseilla on erilaiset lähtötasot, tavoitteet ja siten erilaiset tarpeet visualisoinnille. Algoritmien ja tietorakenteiden visualisoinnissa käytetään erilaista asioiden esitystapaa kuin perusohjelmoinnissa. Myös samalla kurssilla voidaan joitakin asioita esittää hyvin abstraktilla tasolla ja toisia hyvin yksityiskohtaisella. Tässä luvussa arvioidaan ja esitellään olemassa olevia visualisointijärjestelmiä, käsitellään TTY:n perusohjelmoinnin opetuksen ongelmia ja määritellään perusteet visualisointityökalujen arviointiin. 2.1 TTY:n perusohjelmoinnin opetus TTY:n perusohjelmointikursseilla on vuosittain noin tuhat opiskelijaa. Näin suuri opiskelijamäärä on itsessään merkittävä haaste kurssien järjestelyille. Opiskelijoiden tarve ohjaukselle on hyvin yksilöllistä, koska osalla opiskelijoista on jo alan työkokemusta opiskelut aloittaessaan. Osa taas ei tiedä ohjelmoinnista ja tietokoneiden toiminnasta mitään. Peruskoulu ja lukio eivät automaattisesti luo riittäviä valmiuksia ohjelmoinnissa tarvittavien abstraktien käsitteiden hahmottamiseen. Matemaattisten formalismien sijaan ohjelmoinnin peruskäsitteiden konkretisointi visualisoimalla ja esimerkeillä onkin oleellinen osa opetusta. TTY:llä on käytetty menestyksellisesti ohjelmoinnin opetuksessa harjoitustöiden automaattiseen tarkistamiseen ja arviointiin Ceilidh- ja Style++-järjestelmiä, jotka arvioivat ohjelmien toteutuksen oikeellisuutta ja ohjelmointityyliä. Automaattitarkistus antaa opiskelijalle välittömästi palautetta, minkä jälkeen kurssihenkilökunta tarkastaa manuaalisesti hyväksytysti palautetut, toimivat ohjelmat. Automaattitarkistimet eivät kuitenkaan yksin auta oppimaan ohjelmointia, eivätkä ne voi täysin korvata opettajia. 12
13 Täysin hyödyttömiä automaattiset tarkistimet eivät oppimisen kannalta kuitenkaan ole. Automaattisen tyylianalysaattorin käyttö kursseilla pakottaa opiskelijat lukemaan ja noudattamaan Ohjelmistotekniikan laitoksen C++tyyliohjetta [Rintala & Jokinen 2004], mikä on selvästi parantanut harjoitustöiden rakennetta ja luettavuutta. 2.2 Tietokonepohjaisen visualisoinnin tarve Algoritmien ja ohjelmien toimintaa voidaan simuloida paperin ja kynän avulla, mutta tämä on usein työlästä ja siinä on helppo tehdä virheitä. Hyvin tehdyssä tietokonepohjaisessa simuloinnissa ohjelman toiminnan seuraaminen on huomattavasti helpompaa. Ensisijaisesti visualisoinnit tukevat itsenäistä opiskelua ja opitun asian kertaamista. Automaattisilla visualisoinneilla on myös mahdollista esittää asioita, joiden simuloiminen manuaalisesti olisi käytännössä mahdotonta. Esimerkiksi lajittelualgoritmien toimintaa isoilla aineistoilla on hyvin näppärää esittää graafisesti simulaattorilla. 2.3 Visualisoinnin hyödyt Visualisointia on tutkittu kauan ja sitä pidetään hyödyllisenä, mutta hyödyn arviointi ja toimivan visualisoinnin suunnittelu ovat kiistanalaisia kysymyksiä, joista on monia eri näkemyksiä. ITiCSE:n vuonna 2002 teettämä tutkimus [Almstrum et al. 2002] esittää pääteesinään, että edistääkseen oppimista visualisoinnin pitää mahdollistaa kokeilu ja aktiivinen oppiminen (käännetty englannista) Visualisoinnin käyttöönoton ongelmat Opettajien mielestä viisi tärkeintä ongelmatekijää visualisoinnin käytössä ohjelmistotekniikan opetukseen olivat SIGCSE:n vuonna 2003 tehdyn kyselyn mukaan [Naps et al. 2003]: 13
14 hyvien esimerkkien etsimiseen kuluva aika uuden työkalun käytön opetteluun kuluva aika uusien visualisointien tekemiseen kuluva aika hyvien kehitystyökalujen puute visualisoinnin integroimiseen kurssin käytäntöihin kuluva aika. Opetushenkilökunnan näkökulmasta työkalun asentamiseen ja visualisointien rakentamiseen kuluva aika on selvästi kriittinen tekijä, joten hyvän työkalun tulee olla mahdollisimman helppokäyttöinen ja helposti asennettava Hyvän visualisointityökalun ominaisuudet Visualisointityökaluilla on aina kaksi käyttäjäryhmää, opettajat ja oppilaat, joilla on hieman erilaiset arviointikriteerit työkalun hyödyllisyydelle. Kuten jo aiemmin todettiin, opettajien näkökulmasta aika ja helppokäyttöisyys ovat kriittisiä tekijöitä. Oppilaan näkökulmasta visualisointien kehittämiseen ja etsimiseen kuluva työmäärä on irrelevanttia. ITiCSE:n tutkimuksessa [Almstrum et al. 2002] määritellään seuraavia ominaisuuksia hyvälle visualsointityökalulle: 1) Visualisoinnin tulkintaohjeet. Opiskelijalle on tarjottava selkeä kuvaus siitä, miten eri asiat visualisoinnissa esitetään. 2) Asioiden oikea esitystaso ja esitystapa. Opiskelijalle pitää esittää asiat riittävällä tarkkuudella ja sopivalla abstraktiotasolla, jotta olennainen ei huku yksityiskohtien sekaan. 3) Useiden eri näkymien tarjoaminen. Ohjelman suoritusta ja toimintaa on hyvä pystyä tarkkailemaan mahdollisimman monesta eri näkökulmasta. Näkökulmaa on voitava vaihtaa kesken ohjelman suorituksen. 14
15 4) Tehokkuusanalyysin esittäminen. Algoritmien tehokkuuden analysointi on usein hyödyllinen ja olennainen osa niiden ymmärtämistä. 5) Ohjelman suoritushistorian esittäminen. Algoritmien toiminnan ymmärtämistä helpottaa, jos aiemmin suoritettujen operaatioiden suoritusjärjestys voidaan nähdä. 6) Joustavien suoritusmahdollisuuksien tarjoaminen. Ohjelman tai algoritmin toimintaa pitäisi pystyä kontrolloimaan ja suoritusaskelia peruuttamaan. 7) Mahdollisuus kokeilla ja tutkia eri vaihtoehtoja interaktiivisesti. Staattisen visualisoinnin sijaan opiskelijalla tulisi olla mahdollisuus muokata algoritmia ja kokeilla eri vaihtoehtoja mahdollisimman vapaasti. 8) Mahdollisuus kokeilla eri syötteitä. Ohjelman syötettä ei tulisi kiinnittää, vaan opiskelijalle pitää antaa mahdollisuus omien mielivaltaisten syötteiden käyttämiseen. 9) Dynaamisten kysymysten esittäminen. Visualisoinnin lisäksi opiskelijalle olisi hyvä esittää kysymyksiä ohjelmasta. Erityisesti kysymykset, jotka pyytävät opiskelijaa ennustamaan ohjelman tulevaa käyttäytymistä, ovat oppimisen kannalta hyödyllisiä. 10)Automaattisen palautteen antaminen. Hyvä visualisointi antaa ajonaikaisesti automaattista palautetta opiskelijan osaamisesta. 11)Selitysten integroiminen visualisointiin. Hyvä visualisointi ei pohjaudu pelkästään asioiden esittämiseen graafisesti, vaan opettajan tulee voida liittää visualisointiin erillisiä selittäviä tekstejä. Käytännössä kaikki menestyneet visualisointityökalut ohjelmoinnin opetuksessa noudattavat näitä perusperiaatteita. Näiden periaatteiden noudattaminen käytännössä edellyttää visualisoinnin toteuttamista jonkinlaisen tulkin avulla, mikä tekee hyvän visualisointityökalun toteuttamisesta haastavaa. 15
16 2.3.3 Visualisoinnin hyötyjen arviointi Aiemmin todettiin visualisoinnin hyötyjen arvioinnin olevan hankalaa ja saatujen tulosten ristiriitaisia. Hyötyjen arviointia varten olisi hyvä kerätä ainakin seuraavia tietoja visualisointityökalun käytöstä [Naps et al. 2003]: opiskelijoiden tarkkailu työkalun käytön yhteydessä työkalun käyttöön kulunut aika opiskelijoille tehdyt kyselyt kollegoiden arviot työkalusta opiskelijoiden haastattelu. Näin kerätyn informaation analysointi ja kyselyjen suunnittelu on oma ongelmakenttänsä, eikä sen käsittely kuulu tämän diplomityön piiriin. Haastattelujen ja opiskelijoiden suoranaisen tarkkailun toteuttaminen on rahallisesti ja ajallisesti kallista ja hankalaa, joten sitä ei yleensä tehdä. Sen sijaan työkalun käyttöön kulunutta aikaa ja työkalun käyttöä voidaan tilastoida epäsuorasti minimaalisin kustannuksin, mikäli työkalu mahdollistaa käyttöä koskevien tietojen keräämisen näkymättömästi. 2.4 Olemassaolevat järjestelmät Tässä kohdassa luodaan lyhyt katsaus olemassaoleviin visualisointijärjestelmiin. Katsaus ei ole kattava, vaan esittää poikkileikkauksen erilaisista lähestymistavoista visualisointiin ohjelmoinnin opetuksessa. Järjestelmien yksityiskohtiin ei mennä Tango, X-Tango, Polka Tango on 1993-kehitetty visualisointiympäristö algoritmien visualisointiin. X- Tango on X-Window toteutus Tangosta ja Polka on myöhemmin tehty Javatoteutus. 16
17 Tango on tarkoitettu 2-ulotteisten algoritmianimaatioiden tekoon. Animaatiot rakennetaan Tangon omalla ohjelmointikielellä, jonka jälkeen niitä voidaan askeltaa ja ajaa Tangolla. Tangon ohjelmointikieli tarjoaa yksinkertaiset grafiikkaprimitiivit, kuten laatikon ja ympyrän, sekä rakenteita näiden liikuttamiseen ja manipulointiin [Hartley 1994] Trakla, Trakla2 Trakla on Teknillisessä korkeakoulussa kehitetty järjestelmä tietorakenteiden ja algoritmien opettamiseen. Jatkokehitysversiot Matrix ja Trakla2 osaavat esittää graafisesti algoritmeja ja perustietorakenteita sekä sisältävät tarvittavat työkalut erilaisten visualisointien ja testien rakentamiseen. Trakla mahdollistaa interaktiivisten visualisointien tekemisen sekä erilaisten tehtävien tarjoamisen opiskelijalle. Trakla esittää algoritmien ja tietorakenteiden toiminnan abstraktilla tasolla, eikä visualisointia sidota minkään tietyn ohjelmointikielten rakenteisiin. Trakla2 kerää taustalla hyvin yksityiskohtaista tietoa opiskelijoiden toimenpiteistä työkalua käyttäessä. Kyseisistä tiedoista on jo nyt ollut selvää etua opiskelijoiden oppimisen analysoinnissa. [Korhonen et al. 2002] Blue, BlueJ Blue on erityisesti opetuskäyttöön suunniteltu oliokieli ja sen päälle rakennettu visuaalinen kehitysympäristö. Bluen kehittäminen ja tukeminen loppui vuonna BlueJ on Bluesta saatujen kokemusten pohjalta rakennettu Javaohjelmointikielen opetukseen tarkoitettu visuaalinen kehitysympäristö. BlueJ antaa opiskelijoille mahdollisuuden editoida ohjelman lähdekoodia, katsella oliohierarkiaa graafisesti ja tarjoaa debuggausmahdollisuudet jne. BlueJ:n käyttö käytännössä vaatii perinteisestä poikkeavaa lähestymistapaa ohjelmoinnin opetukseen siten, että ohjelmoinnin perusrakenteita lähdetään opettamaan rinnan olio-ohjelmoinnin kanssa [Kolling et al. 2003]. BlueJ on osoittautunut käytännössä erittäin hyväksi [Kolling et al. 2003], mutta kaikki opettajat eivät ole yhtä mieltä opetettavien asioiden jaksottamisesta eri kurssien kesken. TTY:llä käytetään perinteistä jakoa olio-ohjelmointia käsittelevään ja ohjelmoinnin 17
18 perusrakenteita käsittelevään kurssiin Jeliot-perhe Jeliot on joukko hieman toisistaan poikkeavia visualisointiympäristöjä. Jeliotin uusin versio, Jeliot 3 on Java-pohjainen ympäristö, jossa Java-ohjelmien toimintaa voidaan visualisoida dynaamisesti ja editoida niitä. Jeliot voidaan integroida osaksi BlueJ ympäristöä ja siinä on sama lähestymistapa ohjelmoinnin opetukseen: Kielenä on Java ja olio-ohjelmoinnista aletaan puhua heti alkeita opetettaessa. Jeliotin toimivuutta on tutkittu runsaasti. Helsingin yliopistolla havaittiin 1998, että Jeliotin käyttö ja hyöty jäi vähäiseksi [Lattu, Meisalo, Tarhio 1998]. Jeliotin uudemmat versiot ovat kuitenkin osoittautuneet hyödyllisemmiksi. Tulokset ovat kuitenkin edelleen ristiriitaisia Uusimman Joensuun yliopistolla tehdyn tutkimuksen mukaan noin 15% opiskelijoista koki hyötyvänsä Jeliotista, mutta noin 30% koki Jeliotin hidastavan opiskelua [Kannusmäki et al. 2002] SDE (SIMPLESEM) Simplesem on kuvitteellinen tietokonearkkitehtuuri, joka on esitelty kirjassa Programming Language Concepts [Ghezzi & Mehdi 1997]. SDE on Javapohjainen toteutus tästä arkkitehtuurista [Hauswirth et al. 1998]. Simplesemmäärittely kuvaa yksinkertaisen suorittimen ja sen käskykannan. SDE mahdollistaa Simplesem-ohjelman suorituksen seuraamisen konekielitasolla ja esittää ohjelman käytössä olevien rekisterien ja muistin visuaalisesti. SDE:n käyttö perusohjelmoinnin opetuksessa on hankalaa, koska opiskelijan on ymmärrettävä suorittimien yleiset toimintaperiaatteet, eikä korkean tason ohjelman toiminnan hahmottaminen suoritettavasta konekielisestä koodista ole helppoa. SDE ja Simplesem soveltuvat parhaiten konekielen, suorittimien ja matalan tason ohjelmoinnin opetukseen. 18
19 2.4.6 Yhteenveto Vaikka kaikissa järjestelmissä on omat vahvuutensa, yksikään niistä ei sellaisenaan soveltunut TTY:n tarpeisiin. Jeliotin ja BlueJ:n käyttö vaatii opetuskieleksi Javan, minkä lisäksi BlueJ vaatii erilaista lähestymistapaa kuin TTY:llä on valittu. Jeliotia ei myöskään ole tarkoitus laajentaa ymmärtämään muita ohjelmointikieliä [Levy, Ben-Ari, Uronen 2003]. Sekä Jeliot että BlueJ noudattavat aiemmin esitettyjä hyvien visualisointien suunnitteluperiaatteita esimerkillisesti. Tango:n ja SDE:n abstraktiotaso sopii huonosti perusohjelmointiin. SDE:n käyttö vaatisi prosessorin ja konekielen selittämistä opiskelijoille aivan alussa. Tango taas soveltuu parhaiten algoritmien ja abstraktien asioiden visualisointiin. Trakla on on hyvä järjestelmä tietorakenteiden ja algoritmien visualisointiin abstraktilla tasolla, mutta siitä on vain vähän hyötyä ohjelmoinnin perusopetuksessa. 19
20 3 Lausekielten jäsentäminen Tässä luvussa esitetään aluksi formaalien kielten teoriaa ja joukko määritelmiä, joita tarvitaan käytännön sovellusten ymmärtämiseksi. Myöhemmin esitetään lausekielten jäsentämisen yleisiä tekniikoita. Virheenkorjausta jäsentämisessä ei käsitellä. 3.1 Formaalit kielet ja kielioppi Formaali kieli koostuu joukosta aakkosia ja määrittelee mitkä kaikista aakkosista muodostettavissa olevista aakkosten jonoista (merkkijonoista) kuuluvat kieleen. Formaalin kielen aakkoset ovat abstrakteja symboleita, eikä niillä välttämättä ole suoraa kytkentää reaalimaailman aakkosiin ja merkkeihin. Mikäli kieli on äärellinen, se voidaan määritellä luettelemalla kaikki kieleen kuuluvat merkkijonot. Kieleen kuuluvia leksikaalialkioita, jakamattomia äärellisiä merkkijonoja, kutsutaan terminaaleiksi. Terminaaleista käytetään myös termejä terminaalisymboli ja päätemerkki. Äärettömiä merkkijonoja sisältäville kielille voidaan rakentaa määritelmä neljästä elementistä: Ei-terminaalien äärellinen joukko N. Terminaalien äärellinen joukko T, T N =. Aloitussymboli S, S N. Reduktiosääntöjen joukko P. Jokainen P:n alkio on muotoa u v, missä u ( N T )+ j a v ( N T)*. Mielivaltainen merkkijono kuuluu kieleen, jos ja vain jos se voidaan sääntöjen avulla redusoida aloitussymboliksi. 20
21 3.1.1 Vasemmalle rekursiivisuus Kieliopin sääntö on vasemmalle rekursiivinen, mikäli kaikki sen säännöt ovat muotoa: A t tai A tb, missä t on terminaalisymboli ja B ja A ovat ei-terminaaleja. Oikealle rekursiiviset kieliopit ovat myös mahdollisia, mutta usein lausekielet esitetään käytännön syistä vasemmalle rekursiivisina tai muunnetaan vasemmalle rekursiivisiksi. Vasemmalle rekursiivisuudesta käytetään myös ilmausta vasemmalle lineaarinen. Mikäli kielioppi on vasemmalle rekursiivinen tai oikealle rekursiivinen, kielioppi on säännöllinen. Säännöllinen kielioppi määrittelee säännöllisen kielen Säännöllisten kielten luokittelu (LALR, LR, LL) Säännölliset kielet voidaan jakaa eri luokkiin, joista LL, LR ja LALR ovat tärkeimmät. LR-kieliopilla määritelty kieli voidaan jäsentää lukemalla symbolijonoa vasemmalta oikealle (left-to-right), käyttämällä pelkistyssäännöistä valintatilanteissa aina oikeanpuolimmaisen osan luetusta redusoivaa sääntöä (rightmost reduction). LALR on LR:n osajoukko, joka on hyödyllinen kahdesta syystä: Käytännössä kaikki mielenkiintoiset LR-kieliopit ovat LALR-kielioppeja LALR-kieliopin jäsentäminen on huomattavasti helpompaa kuin LR-kielen. LL-kieliopit ovat tärkeä luokka, koska ne voidaan jäsentää tekniikalla, josta käytetään nimeä rekursiivinen laskeutuminen (recursive descent) tai kokoava jäsentäminen. Rekursiivinen laskeutuminen on erittäin yksinkertainen toteuttaa, mikäli jäsentäjä joudutaan tekemään ilman automaattityökaluja. 21
22 3.1.3 Kurkistus Sääntöjen jäsentäminen yksikäsitteisesti vaatii useimmiten vähintään yhden symbolin mittaisen ikkunan käsittelemättömään osaan symbolijonoa. Seuraavaksi tulevaa symbolia tutkimalla voidaan ratkaista joitakin muuten hankalia ristiriitatilanteita. Jäsennettävän symbolijonon esikatselusta käytetään nimitystä kurkistus (look-ahead englanninkielisessä materiaalissa). LR(k) tarkoittaa LR-kielioppia, jossa esikatselupuskurin koko on k symbolia. Vastaavasti käytetään merkintöjä LALR(k) ja LL(k). Erityisesti LALR(1) ja LR (1) ovat tärkeitä luokkia, koska näille tunnetaan tehokkaita jäsennystekniikoita, joita ei voida kuitenkaan soveltaa yleisesti LALR(k)-kielen jäsentämiseen Lausekielten määrittely Useimmat ohjelmointikielet voidaan esittää LR(1)-kielioppina [Backhouse 1979, sivu 172]. Matemaattisen määrittelyn sijaan lausekielen kielioppi esitetään yleensä BNF-notaatiolla, joka sallii muunmuassa loogisen TAI-operaation käytön. Usein terminaalit erotetaan ei-terminaaleista kirjoittamalla terminaalit isoilla kirjaimilla ja ei-terminaalit pienillä. Kuvassa 3.1 on esimerkki yksinkertaisesta lausekkeita kuvaavasta kieliopista. lauseke ::= tekijä tekijä + lauseke tekijä ::= termi termi * tekijä termi ::= MUUTTUJA VAKIO Kuva 3.1 Yksinkertainen kielioppi Jäsennyspuu Aiemmin esitetty riittää määrittelemään yksikäsitteisesti, mitkä merkkijonot kuuluvat kieleen ja mitkä eivät. Merkkijonoa tutkittaessa voidaan rakentaa jäsennyspuu, joka esittää kuinka kieliopin sääntöjä on käytetty. Jokaista käytettyä sääntöä kuvaa solmu, ja kunkin solmun lapsina ovat rekursiivisesti jäsennyksessä käytetyt säännöt. 22
23 3.1.6 Yksikäsitteisyys Kielioppi on yksikäsitteinen, mikäli jokaista laillista (kieleen kuuluvaa) merkkijonoa kohti on vain yksi jäsennyspuu. Kuvan 3.1 kielioppi on esitetty yksinkertaisemmassa muodossa kuvassa 3.2. Kuvan 3.2 kielioppi ei kuitenkaan ole yksikäsitteinen. termi ::= MUUTTUJA VAKIO lauseke ::= termi termi + lauseke termi * lauseke Kuva 3.2 Monikäsitteinen kielioppi Lause i = 2 * kuuluu molempiin kieliin, mutta kuvan 3.2 kieliopissa se voidaan tulkita joko muodossa i = (2 * 3) + 4 tai i = 2 * (3 + 4) Presedenssi ja sitovuus Presedenssi tarkoittaa operaattoreiden (sääntöjen) keskinäistä merkitsevyysjärjestystä. Mikäli kertolaskulle määritellään yhteenlaskua korkeampi presedenssi, se suoritetaan ensin, jolloin edellisen kappaleen kieliopista saadaan yksikäsitteinen. Sitovuus määrittelee suoritusjärjestyksen vasemmalta tai oikealta aloitettavaksi. Useimmiten lausekkeet sidotaan vasemmalle, mutta muun muassa potenssilasku sidotaan oikealle. Joissakin operaatiossa sitomissuunnalla ei ole merkitystä lopputuloksen kannalta (esimerkiksi yhteenlasku). Esimerkkikielioppiin voidaan lisätä vähennyslasku esimerkiksi muuttamalla lausekkeen määrittelevää sääntöä. lauseke ::= tekijä tekijä + termi tekijä - termi 23
4. Lausekielinen ohjelmointi 4.1
4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,
Lisä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ä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ä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ä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ätiedotAlgoritmit 1. Luento 3 Ti Timo Männikkö
Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien
LisätiedotTIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit
TIE-20100 Tietorakenteet ja algoritmit 1 TIE-20100 Tietorakenteet ja algoritmit TIE-20100 Tietorakenteet ja algoritmit 2 Lähteet Luentomoniste pohjautuu vahvasti prof. Antti Valmarin vanhaan luentomonisteeseen
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ätiedotYleisiä ohjeita visualisointien käyttöönotosta ohjelmointikurssilla
Yleisiä ohjeita visualisointien käyttöönotosta ohjelmointikurssilla Tuukka Ahoniemi Ohjelmistotekniikan laitos, TTY tuukka.ahoniemi@tut.fi Yleistä Tämä teksti käsittelee yleisellä tasolla ohjelmoinnin
LisätiedotOhjelmointi 1 / syksy /20: IDE
Ohjelmointi 1 / syksy 2007 10/20: IDE Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/8 Tämän luennon rakenne
Lisätiedot11.4. Context-free kielet 1 / 17
11.4. Context-free kielet 1 / 17 Määritelmä Tyypin 2 kielioppi (lauseyhteysvapaa, context free): jos jokainenp :n sääntö on muotoa A w, missäa V \V T jaw V. Context-free kielet ja kieliopit ovat tärkeitä
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ä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ätiedotDIPLOMITYÖ ARI KORHONEN
DIPLOMITYÖ ARI KORHONEN TEKNILLINEN KORKEAKOULU Diplomityö Tietotekniikan osasto 20.5.1997 Ari Korhonen WORLD WIDE WEB (WWW) TIETORAKENTEIDEN JA ALGORITMIEN TIETOKONEAVUSTEISESSA OPETUKSESSA Työn valvoja
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ä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ä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ätiedotYhteydettömän kieliopin jäsennysongelma
Yhteydettömän kieliopin jäsennysongelma Yhteydettömän kieliopin jäsennysongelmalla tarkoitetaan laskentaongelmaa Annettu: yhteydetön kielioppi G, merkkijono w Kysymys: päteekö w L(G). Ongelma voidaan periaatteessa
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ätiedotPythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python
Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat
LisätiedotOhjelmistojen mallintaminen, mallintaminen ja UML
582104 Ohjelmistojen mallintaminen, mallintaminen ja UML 1 Mallintaminen ja UML Ohjelmistojen mallintamisesta ja kuvaamisesta Oliomallinnus ja UML Käyttötapauskaaviot Luokkakaaviot Sekvenssikaaviot 2 Yleisesti
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ätiedotRuby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages
Tampere University of Technology Department of Pervasive Computing TIE-20306 Principles of Programming Languages Ruby Ryhmä 8 Juho Rintala Sami Paukku Sisällysluettelo 1 Johdanto... 3 2 Paradigma... 3
LisätiedotDynaaminen kääntäminen ja Java HotSpot
Dynaaminen kääntäminen ja Java HotSpot Jukka Eskola Kimmo Kulovesi Tatu Säily Helsinki 11.4.2005 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Sisältö 1. Johdanto...1 1.1 JIT-kääntäjän ongelmat...2
LisätiedotL models. Tekninen määrittely. Ryhmä Rajoitteiset
Teknillinen Korkeakoulu T-76.115 Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija L models Tekninen määrittely Ryhmä Rajoitteiset Versio Päivämäärä Tekijä Muutokset
LisätiedotDart. Ryhmä 38. Ville Tahvanainen. Juha Häkli
Dart Ryhmä 38 Ville Tahvanainen Juha Häkli 1.LYHYESTI Dart on luokkapohjainen, yksiperintäinen, puhdas olio-ohjelmointikieli. Dart on dynaamisesti tyypitetty. Sovellukset on organisoitu modulaarisiksi
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ätiedotM =(K, Σ, Γ,, s, F ) Σ ={a, b} Γ ={c, d} = {( (s, a, e), (s, cd) ), ( (s, e, e), (f, e) ), (f, e, d), (f, e)
Tik-79.148 Kevät 2001 Tietojenkäsittelyteorian perusteet Laskuharjoitus 7 Demonstraatiotehtävien ratkaisut 1. Pinoautomaatti M = K Σ Γ s F missä K Σ s ja F on määritelty samalla tavalla kuin tilakoneellekin.
LisätiedotTIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 10. kesäkuuta 2013
TIEA241 Automaatit ja kieliopit, kesä 2013 etenevä Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 10. kesäkuuta 2013 Sisällys etenevä etenevä Chomskyn hierarkia (ja muutakin) kieli säännöllinen LL(k) LR(1)
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ä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ätiedot811312A Tietorakenteet ja algoritmit 2015-2016. I Johdanto
811312A Tietorakenteet ja algoritmit 2015-2016 I Johdanto Sisältö 1. Algoritmeista ja tietorakenteista 2. Algoritmien analyysistä 811312A TRA, Johdanto 2 I.1. Algoritmeista ja tietorakenteista I.1.1. Algoritmien
Lisätiedot1. Olio-ohjelmointi 1.1
1. Olio-ohjelmointi 1.1 Sisällys Olio-ohjelmointi on eräs ohjelmointiparadigma. Olio-ohjelmoinnin muotoja. Ohjelmiston analyysi ja suunnittelu. Olioparadigman etuja ja kritiikkiä. 1.2 Ohjelmointiparadigmoja
LisätiedotUudelleenkäytön jako kahteen
Uudelleenkäyttö Yleistä On pyritty pääsemään vakiokomponenttien käyttöön Kuitenkin vakiokomponentit yleistyneet vain rajallisilla osa-alueilla (esim. windows-käyttöliittymä) On arvioitu, että 60-80% ohjelmistosta
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ätiedotOsoitin ja viittaus C++:ssa
Osoitin ja viittaus C++:ssa Osoitin yksinkertaiseen tietotyyppiin Osoitin on muuttuja, joka sisältää jonkin toisen samantyyppisen muuttujan osoitteen. Ohessa on esimerkkiohjelma, jossa määritellään kokonaislukumuuttuja
LisätiedotA274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen
LisätiedotInteraktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.
Malli-näkym kymä-ohjain arkkitehtuurit (Model-View View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Lähtökohdat: Sovelluksen
LisätiedotTT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD)
TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) Ohjelmointikäytännöt 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 1 Sisältö 1) Mitä on hyvä koodi? 2) Ohjelmointikäytäntöjen merkitys? 3) Koodin asettelu
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ä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ätiedotTietorakenteet ja algoritmit - syksy 2015 1
Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä
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ä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ätiedotInteraktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.
Malli-näkym kymä-ohjain arkkitehtuurit (Model-View View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Lähtökohdat: Sovelluksen
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ätiedotIDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit
IDL - proseduurit 25. huhtikuuta 2017 Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,
LisätiedotATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014
18. syyskuuta 2014 IDL - proseduurit Viimeksi käsiteltiin IDL:n interaktiivista käyttöä, mutta tämä on hyvin kömpelöä monimutkaisempia asioita tehtäessä. IDL:llä on mahdollista tehdä ns. proseduuri-tiedostoja,
LisätiedotTähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python
Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely
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ätiedotOhjelmointi 1. Kumppanit
Ohjelmointi 1 Kumppanit November 20, 2012 2 Contents 1 Mitä ohjelmointi on 7 2 Ensimmäinen C#-ohjelma 9 2.1 Ohjelman kirjoittaminen......................... 9 A Liite 11 3 4 CONTENTS Esipuhe Esipuhe 5
LisätiedotOhjelmistojen mallintaminen
Ohjelmistojen mallintaminen - Mallit - Ohjelmiston kuvaaminen malleilla 31.10.2008 Harri Laine 1 Malli: abstraktio jostain kohteesta Abstrahointi: asian ilmaiseminen tavalla, joka tuo esiin tietystä näkökulmasta
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ätiedot4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T
SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA: REFAKTOROINTI 2 (9) SEPA: REFAKTOROINTI 3 (9) VERSIOHISTORIA Version Date Author Description 0.1 2.12.2005 Erik Hakala Ensimmäinen
LisätiedotTietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen
Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Kurssin sisältö pääpiirteittäin Tarvittavat pohjatiedot Avainsanat Abstraktio Esimerkkiohjelman tehtäväkuvaus Abstraktion käyttö tehtävässä Abstrakti tietotyyppi Hyötyjä ADT:n
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ätiedotjäsennyksestä TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho 29. syyskuuta 2016 TIETOTEKNIIKAN LAITOS Kontekstittomien kielioppien
TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 29. syyskuuta 2016 Sisällys Harjoitustehtävätilastoa Tilanne 29.9.2016 klo 8:41 (lähes kaikki kommentoitu) passed
Lisätiedot811120P Diskreetit rakenteet
811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen
Lisä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ätiedot811120P Diskreetit rakenteet
811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen
Lisä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ätiedotÄlysopimusten kehittäminen. Sopimus suuntautunut ohjelmointi
Älysopimusten kehittäminen Sopimus suuntautunut ohjelmointi There are currently 5,000 blockchain developers. By 2020, we project a global need for over 500,000 - ConsenSys Älysopimus alustat q Ethereum
LisätiedotHahmon etsiminen syotteesta (johdatteleva esimerkki)
Hahmon etsiminen syotteesta (johdatteleva esimerkki) Unix-komennolla grep hahmo [ tiedosto ] voidaan etsia hahmon esiintymia tiedostosta (tai syotevirrasta): $ grep Kisaveikot SM-tulokset.txt $ ps aux
LisätiedotOhjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista
582101 - Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista 1 Ohjelmistotuotannon työkaluuista Projektinhallintatyökalut (ei käsitellä tällä kurssilla) CASE- ja mallinnustyökalut (esim. Poseidon)
Lisätiedot15. Ohjelmoinnin tekniikkaa 15.1
15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien
LisätiedotTIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho. 31. maaliskuuta 2011
TIEA241 Automaatit ja kieliopit, kevät 2011 (IV) Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 31. maaliskuuta 2011 Sisällys Sisällys Chomskyn hierarkia kieli säännöllinen kontekstiton kontekstinen rekursiivisesti
Lisä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ätiedotVasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:
Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: S A S B Samaan jäsennyspuuhun päästään myös johdolla S AB Ab ab: S A S B Yhteen jäsennyspuuhun liittyy aina tasan yksi vasen
LisätiedotOhjelmoinnin peruskurssien laaja oppimäärä
Ohjelmoinnin peruskurssien laaja oppimäärä Luento 2: SICP kohdat 22.2.3 Riku Saikkonen 2. 11. 2010 Sisältö 1 Linkitetyt listat 2 Listaoperaatioita 3 Listarakenteet 4 Gambit-C:n Scheme-debuggeri Linkitetyt
Lisätiedot2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)
2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi
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ätiedotYhteydettömät kieliopit [Sipser luku 2.1]
Yhteydettömät kieliopit [ipser luku 2.1] Johdantoesimerkkinä tarkastelemme kieltä L = { a n b m a n n > 0, m > 0 }, joka on yhteydetön (mutta ei säännöllinen). Vastaavan kieliopin ytimenä on säännöt eli
LisätiedotSoveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen
Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen ohjelmointiin Jukka Talvitie Valvoja: Professori Jorma Jormakka Paikka: TietoEnator oyj Ongelma Ideologia Lifebelt
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ätiedotTIEA341 Funktio-ohjelmointi 1, kevät 2008
TIEA34 Funktio-ohjelmointi, kevät 2008 Luento 3 Antti-Juhani Kaijanaho Jyväskylän yliopisto Tietotekniikan laitos 2. tammikuuta 2008 Ydin-Haskell: Syntaksi Lausekkeita (e) ovat: nimettömät funktiot: \x
LisätiedotP e d a c o d e ohjelmointikoulutus verkossa
P e d a c o d e ohjelmointikoulutus verkossa Java-kielen perusteet Teoria ja ohjelmointitehtävät Java-kielen perusteet 3 YLEISKATSAUS KURSSIN SISÄLTÖIHIN 10 JAVA-KIELEN PERUSTEET 10 OPISKELUN ALOITTAMINEN
LisätiedotTIEA241 Automaatit ja kieliopit, kesä Antti-Juhani Kaijanaho. 29. toukokuuta 2013
TIEA241 Automaatit ja kieliopit, kesä 2013 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 29. toukokuuta 2013 Sisällys Chomskyn hierarkia (ja muutakin) kieli LL(k) LR(1) kontekstiton kontekstinen rekursiivisesti
LisätiedotTIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat. Antti-Juhani Kaijanaho. 16. helmikuuta 2011
TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 16. helmikuuta 2011 Sisällys Sisällys Ohjelmointikieli? programming language n. a
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 28.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 28.2.2011 1 / 46 Ohjelmointiprojektin vaiheet 1. Määrittely 2. Ohjelman suunnittelu (ohjelman rakenne ja ohjelman
LisätiedotUML-kielen formalisointi Object-Z:lla
UML-kielen formalisointi Object-Z:lla Kalvot ja seminaarityö WWW:ssä: http://users.jyu.fi/~minurmin/opiskelu/form/ UML UML == Unified Modelling Language. OMG:n standardoima kieli ohjelmistojärjestelmien,
Lisätiedot1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä
OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 811122P (5 op.) 12.12.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan
LisätiedotJohnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.
Kokeellinen algoritmiikka (3 ov) syventäviä opintoja edeltävät opinnot: ainakin Tietorakenteet hyödyllisiä opintoja: ASA, Algoritmiohjelmointi suoritus harjoitustyöllä (ei tenttiä) Kirjallisuutta: Johnson,
Lisätiedotuv n, v 1, ja uv i w A kaikilla
2.8 Säännöllisten kielten rajoituksista Kardinaliteettisyistä on oltava olemassa (paljon) ei-säännöllisiä kieliä: kieliä on ylinumeroituva määrä, säännöllisiä lausekkeita vain numeroituvasti. Voidaanko
LisätiedotPERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki
PERL TIE-20306 Principles of Programming Languages Ryhmä 4: Joonas Lång & Jasmin Laitamäki 1. Johdanto Perl on ohjelmointikielten perhe, johon kuuluu Perl 5 ja Perl 6. Kielet ovat kuitenkin erilliset ohjelmointikielet
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ätiedotSulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä.
Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä. On arvioitu, että maailmassa on tällä hetkellä enemmän sulautettuja
LisätiedotPedacode Pikaopas. Java-kehitysympäristön pystyttäminen
Pedacode Pikaopas Java-kehitysympäristön pystyttäminen Pikaoppaan sisältö Pikaoppaassa kuvataan, miten Windowstyöasemalle asennetaan Java-ohjelmoinnissa tarvittavat työkalut, minkälaisia konfigurointeja
LisätiedotTietorakenteet ja algoritmit
Tietorakenteet ja algoritmit Rekursio Rekursion käyttötapauksia Rekursio määritelmissä Rekursio ongelmanratkaisussa ja ohjelmointitekniikkana Esimerkkejä taulukolla Esimerkkejä linkatulla listalla Hanoin
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ätiedotOhjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1
3. Komponentit ja rajapinnat 3.1 Komponenttien idea: ohjelmistotuotannon rationalisointi 3.2 Mikä on ohjelmistokomponentti? 3.3 Komponentit ohjelmistoyksikköinä 3.4 Rajapinnat 3.6 Komponenttien räätälöinti
LisätiedotOHJELMOINTIA MONIPUOLISESTI MATEMATIIKAN OPETUKSESSA LUMA-PÄIVÄT, TAMPERE
OHJELMOINTIA MONIPUOLISESTI MATEMATIIKAN OPETUKSESSA LUMA-PÄIVÄT, TAMPERE Tuomo Riekkinen Pyhäselän koulu, Joensuu MIKSI OHJELMOINTIA MATEMATIIKKAAN? Joensuun kaupunki päätti hankkia kaikille 7. luokkalaisille
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ätiedotKieliversiointityökalu Java-ohjelmistoon. Ohje
Kieliversiointityökalu Java-ohjelmistoon Ohje 2/6 SISÄLLYSLUETTELO 1 YLEISTÄ OHJELMASTA... 3 2 PÄÄ-IKKUNA...4 3 YLÄVALIKKO... 4 3.1 TIEDOSTO... 4 3.2 TOIMINTO... 4 3.3 ASETUKSET... 5 3.4 OHJE... 5 4 VÄLILEHDET...5
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ätiedotTietueet. Tietueiden määrittely
Tietueet Tietueiden määrittely Tietue on tietorakenne, joka kokoaa yhteen eri tyyppistä tietoa yhdeksi asiakokonaisuudeksi. Tähän kokonaisuuteen voidaan viitata yhteisellä nimellä. Auttaa ohjelmoijaa järjestelemään
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ätiedotAlgoritmit 1. Luento 1 Ti Timo Männikkö
Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017
LisätiedotTIEA241 Automaatit ja kieliopit, kevät Antti-Juhani Kaijanaho. 12. kesäkuuta 2013
TIEA241 Automaatit ja kieliopit, kevät 2012 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 12. kesäkuuta 2013 Sisällys t Chomskyn hierarkia (ja vähän muutakin) kieli säännöllinen LL(k) LR(1) kontekstiton
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ätiedot