| skripte | ||
| src | ||
| .gitignore | ||
| README.md | ||
| run.sh | ||
Skladkulator – predloga
Programabilni skladovni kalkulator v Javi (izrazi v obratnem poljskem zapisu). Ta paket je ogrodje projekta: vmesniki, osnutki razredov in orodja za delo. Mesta, ki jih je treba dopolniti, so označena s TODO.
Zgradba
Izvorna koda je v mapi src/ in njenih podmapah:
zbirke/– vmesniki zbirk (ni jih treba spreminjati)- vmesniki
Collection,Indexed,Stack,Queue,Deque,Map,Set,Bag - izjema
CollectionExceptionpri delu z zbirkami
- vmesniki
izvedbe/– izvedbe zbirk (te boste implementirali)- izvedbi sklada
ArrayStack,LinkedStack - izvedbi vrste
ArrayQueue,LinkedQueue - izvedbi dvostrane vrste
ArrayDeque,LinkedDeque - izvedbi slovarja
ArrayMapin množiceArraySet
- izvedbi sklada
stroj/– skladovni izvajalni stroj- razredi
Engine0…Engine5(vsak ustreza eni nalogi) - razred
Directory(nabor poimenovanih zbirk)
- razredi
Skladkulator.java– glavni program- številko naloge (0–5) podate kot argument in sam izbere ustrezen
EngineN
- številko naloge (0–5) podate kot argument in sam izbere ustrezen
testi/TestZbirke.java– samopreverjanje izvedb zbirk
Dokumentacija paketov, vmesnikov zbirk in njihovih izvedb je v javadocu (package-info.java in komentarji pri razredih in metodah v mapi src/), navodila za testiranje izvedb pa v javadocu razreda testi.TestZbirke.
Javadoc si lahko ogledate v ustreznem urejevalniku (ob premiku miške nad razred ali metodo) ali pa ga ustvarite kot spletne strani z ukazom ./run.sh doc in odprete out/doc/index.html.
Datoteke za dopolnitev
Izvorne javanske datoteke, ki jih je treba dopolniti pri posamezni nalogi, so podane v naslednji tabeli:
| naloga | datoteke |
|---|---|
| Naloga0 | ArrayStack, LinkedStack, Engine0 |
| Naloga1 | ArrayQueue, LinkedQueue, ArrayDeque, LinkedDeque, ArrayMap, Directory, Engine1 |
| Naloga2 | Engine2 |
| Naloga3 | Engine3 |
| Naloga4 | Engine4 |
| Naloga5 | ArraySet, Engine5 |
Delo (./run.sh)
./run.sh build prevede kodo v mapo out
./run.sh run [stopnja] požene Skladkulator (vhod s standardnega vhoda)
./run.sh doc ustvari javadoc (out/doc/index.html)
./run.sh test-zbirke [Izvedba ...] požene TestZbirke (vse izvedbe zbirk ali samo navedene)
./run.sh test-primeri [N ...] preveri primere iz navodil (komentarji »…« in /* -> … */ v blokih kode)
./run.sh pripravi-oddajo združi kodo v eno datoteko (out/Skladkulator.java) in preveri, da se prevede
./run.sh clean izbriše mapo out
test-zbirke preveri izvedbe zbirk (paket izvedbe, Naloga0 in Naloga1), test-primeri pa stroj (razredi EngineN) s primeri iz navodil.
Primer: ./run.sh run 0 <<< "1 2 swap dump"
Namigi
Razredi EngineX
Razredi EngineX, kjer je X=0,...,5, so namenjeni implementaciji skladovnega izvajalnega stroja. Vsak Engine razširja predhodnika. Pri tem povozi vsaj eval (po potrebi pa še intercept ali fallback) in doda nove zmožnosti. Tako se zmožnosti kopičijo in višja stopnja ohrani vse ukaze nižjih.
Obdelava izrazov
Branje in obdelava simbolov sta v razredu Engine0 (metode run(), process(), intercept(), eval() in fallback()); njihovo delovanje je opisano v javadocu metod.
Izvajanje ukazov
- Argumenti ukaza so na glavnem skladu v istem vrstnem redu, kot so zapisani pri specifikaciji ukaza, zato jih s sklada vzemite v obratnem vrstnem redu: pri x y
+najprej odstranite y, nato x. - Števila so na skladu nizi. Pomožna metoda
popInt()iz ogrodja odstrani vrh in ga pretvori vint, kar vam bo prihranilo veliko ponavljanja. String.compareTovrne poljubno število (ne nujno -1, 0 ali 1) – zastrcmpga ustrezno preslikajte (poiščite metodo razredaInteger, ki naredi natanko to).dumpizpiše sklad od dna proti vrhu in elemente sklada pusti nedotaknjene.
Nedefinirana obnašanja
Včasih bomo pri nekaterih ukazih zapisali, da je določen del obnašanja nedefiniran. Ali še pogosteje, določenega dela obnašanja niti ne bomo opisali. Torej v navodilih ni podano, kako naj se ukaz v nekem (običajno robnem) primeru obnaša. Posledično se sami odločite, kako boste tak primer implementirali. Seveda primerov nedefiniranega obnašanja ne bomo avtomatsko testirali.