Lisatöö: Lausearvutuse valemid
Ülesanne lahendamise video: Teeme ise AST klasse ja käsitsi parsimine. See võib olla kasulik vaatamine kõigile, kes tahaksid näha, kuidas AST klassid ja visitorid nullist ehitada.
Järgnevad lõigud on võetud Rein Pranki raamatust "Sissejuhatus matemaatilisse loogikasse".
[...]
Pane tähele, et toodud definitsioon ei luba näiteks valemeid (¬A)
, (A)
ja (((A&B)))
). Meie oleme antud ülesandes sulgude osas paindlikumad ja lisame Pranki definitsioonile juurde,
et
Selgituseks teise lõigu teisele punktile: siin on mõeldud seda, et konjunktsiooni ja disjunktsiooni operaatoreid võib kasutada vasakassotsiatiivselt (st. A&B&C
on lubatud ja see tähendab (A&B)&C
), aga implikatsiooni ja ekvivalentsi operaatoreid ei või (st. A→B→C
ei ole lubatud, selle asemel tuleb tehete järjekord eksplitsiitselt välja kirjutada: (A→B)→C
või A→(B→C)
).
Selleks, et mitte kulutada liiga palju auru leksilise analüüsi peale, lepime kokku, et lausemuutujad on alati ühetähelised ja tühikuid valemis esineda ei või.
Ülesanne
Ülesande lahendamiseks on avalikus repositooriumis, paketis week6.lausearvutus
kaks faili juba ette antud. Vaja on implementeerida klassi FormulaUtils
staatilised meetodid parseFormula
ja moveNegations
, aga selleks tuleb disainida mõistlikud klassi Formula
alamaklassid. Täpsem info on antud meetodite kommentaaridena.
NB! Selleks, et näidatud operaatoreid (¬, &, ∨, →, ↔) java koodis kasutada saaks tuleb enda java failide kodeeringuks määrata mõni Unicode'i toetav kodeering nt. UTF-8 (Eclipse'i puhul paremklõps projektil -> Properties -> Resource). Kuna aga testimissüsteem peab antud ülesande puhul kindlalt teadma, millises kodeeringus esitatud java fail on, siis teeme nii, et kodeering peab olema justnimelt UTF-8, mitte mingi muu Unicode'i kodeering.
Võib juhtuda, et sinu editor ei suuda disjunktsiooni sümbolit õigel kujul näidata (näiteks Consolas fondis see sümbol puudub), sel juhul tuleb lihtsalt arvestada, et see imelik krõnks, mida editor selle asemel näitab, tähendab tegelikult disjunktsiooni. Alternatiiv oleks editori font selle ülesande tarvis ära muuta (Windowsis peaks olema font DejaVu Sans Mono, kus antud sümbol on esindatud).
Tingimused
- Lahendus tuleb laadida Moodle'isse.
- Esitada tuleb FormulaUtils.java ning Formula.java ja vajadusel ka abiklasse sisaldavad failid.
- Esitamise mugavuse mõttes soovitame kõik abiklassid defineerida
FormulaUtils
jaFormula
-ga samas java failis, aga testimissüsteem on nõus vastu võtma ka rohkem (kuni 11) java faili.
- Esitamise mugavuse mõttes soovitame kõik abiklassid defineerida
- Kõik esitatud java-failid peavad olema UTF-8 kodeeringus (Eclipse'is saab seda määrata, kui teha paremklõps projektil -> Properties -> Resource).