Eesti loogikute keel Estolog
x := 0; y := 1; a := (x JA y); b := (x VOI y); (KUI (x = y) SIIS a MUIDU b)
Estolog on tõeväärtustega arvutamise keel, kus saab lisaks kontrollida võrdust, moodustada tingimusavaldisi ning defineerida muutujaid. Seda kõike saab teha imeilusas eesti keeles! Keele abstraktne süntaks on rahvusvaheline (ehk suhteliselt igav), aga küll saame eesti keele omapäraga tegeleda põhiosa ülesandes...
Paremal on üks programm estologi (konkreetses) süntaksis. Selle näidisprogrammi käivitamise tulemus on true. Estolog oleks muidugi vastanud eesti keeles, aga kuna implementeerime Javas, siis saame tulemuseks Java tõeväärtustüüpi väärtuse.
AST
Estologi AST klassid paiknevad proovieksam.ast paketis. Keele konstruktsioone esitavad järgmised EstologNode alamklassid:
- EstologLiteraal, EstologMuutuja — tõeväärtusliteraal ja muutuja;
- EstologJa, EstologVoi — konjunktsiooni ja disjunktsiooni operaator;
- EstologVordus — kahe avaldise võrdsuse kontrollimise operaator;
- EstologKui — tingimusavaldis (ternaarne operaator);
- EstologDef — muutuja definitsioon;
- EstologProg — terviklik programm, mis koosneb definitsioonidest ja kehast ehk täpselt ühest avaldisest (mis pole definitsioon).
Klassis EstologNode on staatilised abimeetodid, millega saab mugavamalt abstraktse süntaksipuu luua. Nende abil saab ülaloleva näidisprogrammile vastava süntaksipuu ise ehitada:
prog( kui(vordus(var("x"), var("y")), var("a"), var("b")), def("x", lit(false)), def("y", lit(true)), def("a", ja(var("x"), var("y"))), def("b", voi(var("x"), var("y"))) )
Alusosa: EstologEvaluator
Väärtustamisele kehtivad järgmised nõuded:
- Binaarsed operaatorid jälgivad standardseid loogikareegleid.
- Tingimusavaldis on samuti standardne: sõltuvalt tingimuse väärtusest tuleb kasutada ühe või teise haru avaldise väärtust.
- Tingimusavaldise muidu-haru võib puududa (st on
null
). Kui sellise tingimusavaldise tingimus on väär, siis on tingimusavaldis tervikuna tõene. - Programmi väärtuseks on selle keha (mitte-definitsioonist avaldise) väärtus.
- Programmi definitsioonid tuleb väärtustada enne programmi avaldise väärtustamist, mis võib sisaldada viiteid defineeritud muutujatele.
- Programmi definitsioonid tuleb teostada selles järjekorras nagu nad listis on, kusjuures iga definitsiooni avaldis võib sisaldada viiteid eelnevalt defineeritud muutujatele.
- Esialgu pole defineeritud ühtegi muutujat. Defineerimata muutujate kasutamine peab viskama NoSuchElementException-i.
- Programmis on lubatud üht muutujat defineerida mitu korda, kusjuures muutuja väärtuseks on tema viimati defineeritud avaldise väärtus.
- Võib eeldada, et väärtustatav programm sisaldab ainult ühte EstologProg tippu, mis on kõige välimine, st ükski sisemine avaldis pole omakorda programm, millel on oma sisemised definitsioonid.
Lahendus esitada Moodle'isse.
Põhiosa: EstologAst
Selle avalikustame eksami põhiosa harjutamise ajal.
Lõviosa: EstologCompiler
Selle avalikustame eksami lõviosa harjutamise ajal.