1. kodutöö: AKTK 0.1
Selles kursuses hakkame arendama programmeerimiskeelt nimega AKTK (AKT keel). Üldiselt on programmeerimiskeelte arendamisel kasulik teada igasugu erinevaid tehnikaid ja teooriat, aga selles kodutöös võtame ette AKTK lihtsustatud variandi (AKTK 0.1), mille käsitlemine on jõukohane igaühele, kes Java põhiasju tunneb.
Alustame AKTK 0.1 näitest:
print 5 x = 4 y =35 + 78- x print x+ 78 -23 # See on kommentaar print y y = y + 1 # kirjutame muutujasse uue väärtuse print y
AKTK 0.1 süntaks
- AKTK 0.1 programmid koosnevad ridadest.
- Rida võib olla kas omistuslause, print-lause, kommentaar või tühi rida.
- Omistuslause koosneb muutuja nimest, võrdusmärgist ja avaldisest.
- Muutuja nimi on üksik ladina suur- või väiketäht.
- Print-lause koosneb võtmesõnast
print
ja sellele järgnevast avaldisest. - Avaldis koosneb märgita täisarvulistest konstantidest, muutuja nimedest ja nende vahel olevatest märkidest
+
ning-
. Ka üksik konstant või muutuja on avaldis. Sulge avaldises ei esine. - Kommentaar võib olla omaette real või lause lõpus.
- Kommentaarid ja tühjad read ei mängi programmi tähendust silmas pidades mingit rolli.
- Lauses ja avaldises võib elementide vahel ja järel olla suvaline arv tühikuid. Lause alguses ei või tühikuid olla. Kommentaari ees võib olla suvaline arv tühikuid.
AKTK 0.1 programmide interpreteerimine
AKTK 0.1 programmi tähendus on sama, nagu samasugusel Python 2 programmil (erinevalt Python 3-st, lubab Python 2 print-käsu argumendi ümbert sulud ära jätta).
Klass kodu1.AKTKi
Koduülesanne seisneb AKTK 0.1 interpretaatori kirjutamises. Tulemuseks peab olema klass kodu1.AKTKi
, mille main
-meetod võtab käsurealt failinime ning käivitab seal oleva AKTK 0.1 programmi. Kui failis olev programm ei vasta AKTK 0.1 reeglitele või kui programmi käivitamine ebaõnnestub (nt. avaldises kasutakse muutujat, mida pole eelnevalt defineeritud), tuleb visata erind.
Näide. Kui tekstifail nimega "demo1.aktk" sisaldab ülaltoodud näiteprogrammi, siis interpretaatori kasutamine näeks välja midagi sellist:
C:\AKT>java kodu1.AKTKi demo1.aktk 5 59 109 110
Soovitused ülesande lahendamiseks
Ülesanne võib esmapilgul tunduda keerulisem, kui see tegelikult on. Tähtis on kusagilt pihta hakata! Kui sa ei oska kusagilt pihta hakata, siis lihtsusta ülesannet või lahenda algatuseks mingi ülesande osa. Kui muidu ei saa, siis loe vihjeid (aga arvesta, et see võtab 10 karmapunkti maha).
Igal juhul tee kodutöö ise! Vajadusel küsi abi Fleepis. Loe täpsemalt kursuse reeglite alt.
Soovitused testimiseks
Siin on kõik testid meil repositooriumis ette antud, aga praktikumijuhendaja võib ikkagi leida vigu Sinu koodis. Kui lahendad piisavalt üldiselt (ehk ei tee iga ebaõnnestunud sisendi korral eraldi if-lause), siis võid aga testidele toetuda.
Selle ülesanne puhul testime main meetodi sisend-väljund käitumist täiesti musta kastina. Meie testid käivitavad Sinu programmi eraldi protsessina. Oluline on seda teada, kui peaksid üritama IDE debuugerit kasutama, sest testide käivitamisel ei liigu debuuger üldsegi Sinu koodi! Kui Sul on vaja sammhaaval oma koodis läbi vaadata, pead ebaõnnestunud sisendi tõsta sisendfaili ja ikkagi oma programmi normaalselt viisil käivitada!
Lahenduse esitamine
Kursuse Moodle'i lehel on koht AKTKi.java üleslaadimiseks ja automaatseks testimiseks. Kodutöö tähtaeg on 20. veebruaril kell 14:00.
- Automaatse testimissüsteemi tõttu on oluline, et lahenduse klass oleks täpselt sama nimega ja samas paketis nagu ülesande püstituses näidatud.
- Üleslaaditud kood ei tohi sõltuda kolmandate osapoolte teekidest.
- Kui esitatavad java failid sisaldavad täpitähti (või muid ASCII'sse mittekuuluvaid sümboleid), siis peaks need olema UTF-8 kodeeringus.
- Eclipse'is on soovitatav määrata failide kodeering korraga tervele projektile (paremklõps projektil -> Properties -> Resource : Text file encoding) või lausa tervele workspace-ile (Window -> Preferences -> General -> Workspace : Text file encoding).
- Oma koodi testides ei ole Eclipse'is vaja kodeeringu pärast muretseda. Käsureal kompileerides võib olla vajalik kodeering ette anda, nt:
javac -encoding UTF-8 MinuKlass.java
. Juba kompileeritud *.class failide käivitamisel võib jälle kodeeringu teema unustada, sest *.class failid ei ole tekstifailid.