1. kodutöö: Mini AKTK
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 (Mini AKTK), mille realiseerimine on jõukohane igaühele, kes Java põhiasju tunneb.
Selle kodutöö peamine eesmärk on tutvuda probleemidega, mida me pärast õppime lahendama "õigesti". Väga suurt mõtet ei ole siin jõuga seda lõpuni teha, kui see väljakutse Sulle just rõõmu ei paku. Tähtis on siin pigem:
- Aru saada probleemidest, mida üks avaldise interpretaator peab lahendama.
- Meelde tuletada Java programmeerimist (näiteks failist lugemine).
Neid eesmärke täidad paremini, mida vähem Java standardteekide võimalusi kasutad avaldiste töötlemisel. Liiga fanaatiline aga ei pea olema: me alles paari nädala pärast jõuame päris puhta lahenduseni.
Alustame Mini AKTK 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
Mini AKTK süntaks
- Mini AKTK 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 tä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 algab trellidega ja 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, kuid print-lauses peab võtmesõna
print
ja avaldise vahel olema vähemalt üks tühik. Lause alguses ei või tühikuid olla. Kommentaari ees võib olla suvaline arv tühikuid.
Mini AKTK programmide interpreteerimine
Mini AKTK programmi tähendus on sama, nagu samasugusel Python 2 programmil (erinevalt Python 3-st, pole Python 2-s print-lausete puhul sulugude kasutamine tarvilik).
Klass week1.MiniAktk
Koduülesanne seisneb Mini AKTK interpretaatori kirjutamises. Tulemuseks peab olema klass MiniAktk
(paketis week1
), mille main
-meetod võtab käsurea argumendina failinime ning käivitab selles failis oleva Mini AKTK programmi. Kui failis olev programm ei vasta Mini AKTK 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 inputs/mini.aktk
(olemas repos) sisaldab ülaltoodud näiteprogrammi, siis interpretaatori kasutamine näeks välja midagi sellist:
C:\AKT>java week1.MiniAktk inputs/mini.aktk 5 59 109 110
Kõige lihtsam on käsurea argumente määrata IntelliJ-s endas: kliki rohelisel Run kolmnurgal, vali Modify Run Configuration… ja lahtrisse Program Arguments kirjuta "inputs/mini.aktk".
Soovitused ülesande lahendamiseks
Ülesanne võib esmapilgul tunduda keerulisem, kui see tegelikult on. Tähtis on kuskilt pihta hakata! Kui sa ei oska kuskilt 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 praktikumis või Zulipis. Loe täpsemalt kursuse reeglite alt.
Lahenduse esitamine
Kursuse Moodle'i lehel on koht MiniAktk üleslaadimiseks. 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.
- 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.
Video juhuks, kui jääd alustamisega hätta: MiniAktk tutvustus ja Exercise3.eval (spoiler!).