Skip to content

Commit 041b7e6

Browse files
committed
week9 meistriosa materjalid (lisaülesanded)
1 parent ecd4330 commit 041b7e6

13 files changed

Lines changed: 874 additions & 0 deletions

File tree

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package toylangs.bolog;
2+
3+
import toylangs.bolog.ast.BologImp;
4+
5+
import java.util.Set;
6+
7+
public class BologMaster {
8+
9+
// Leia muutujate hulk, mis peavad olema tõesed selleks, et kõik etteantud atomaarsed implikatsioonid oleksid tõesed.
10+
// Selles ülesandes võib olla valemis väga suur arv muutujad, et kõikide väärtuste läbivaatamine ei toimi.
11+
public static Set<String> leastModel(Set<BologImp> imps) {
12+
throw new UnsupportedOperationException();
13+
}
14+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package toylangs.dialoog;
2+
3+
import toylangs.dialoog.ast.*;
4+
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
8+
import static toylangs.dialoog.ast.DialoogNode.*;
9+
10+
public class DialoogMaster {
11+
public enum Type {TInt, TBool}
12+
13+
private final Map<String, Type> typeEnv = new HashMap<>();
14+
15+
public static Type typecheck(DialoogProg prog) {
16+
DialoogMaster dialoogMaster = new DialoogMaster();
17+
return dialoogMaster.typecheckNode(prog);
18+
}
19+
20+
private Type typecheckNode(DialoogNode node) {
21+
throw new UnsupportedOperationException();
22+
}
23+
24+
public static DialoogNode symbex(DialoogNode node) {
25+
throw new UnsupportedOperationException();
26+
}
27+
28+
static void main() {
29+
DialoogNode expr = ifte(eq(var("x"), il(10)), var("error"), var("good"));
30+
System.out.println(symbex(expr));
31+
}
32+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package toylangs.hulk;
2+
3+
import toylangs.hulk.ast.*;
4+
5+
import java.util.HashSet;
6+
import java.util.Set;
7+
8+
public class HulkMaster {
9+
private final Set<Character> definedVars = new HashSet<>();
10+
11+
public static boolean isValidHulkNode(HulkNode node) {
12+
HulkMaster hulkMaster = new HulkMaster();
13+
return hulkMaster.validHulkNode(node);
14+
}
15+
16+
private boolean validHulkNode(HulkNode node) {
17+
throw new UnsupportedOperationException();
18+
}
19+
20+
public static HulkNode processEmptyLiterals(HulkNode node) {
21+
throw new UnsupportedOperationException();
22+
}
23+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package toylangs.modul;
2+
3+
import cma.CMaProgram;
4+
import toylangs.modul.ast.*;
5+
6+
import java.util.List;
7+
import java.util.Map;
8+
9+
10+
public class ModulMaster {
11+
12+
public static int eval(ModulProg prog, Map<String, Integer> env) {
13+
throw new UnsupportedOperationException();
14+
}
15+
16+
17+
public static CMaProgram compile(ModulProg prog, List<String> variables) {
18+
throw new UnsupportedOperationException();
19+
}
20+
}

src/main/java/toylangs/modul/README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,9 @@ Kompileerimisele kehtivad järgmised nõuded:
5959
4. Defineerimata muutuja kasutamisel visatakse *ModulException* **kompileerimise ajal**.
6060

6161
> **PS.** Kuna astendajad on konstantsed, siis astendamise saab kompileerida `DUP` ja `MUL` instruktsioonide jadaks.
62+
63+
## Meistriosa: ModulMaster
64+
65+
Klassis *ModulMaster* tuleb implementeerida meetodid *eval* ja *compile*, mis on täpselt nagu alusosa ja lõviosa, kuid lisaks saavad efektiivselt hakkama väga suurte astendajatega.
66+
67+
> **PS.** Kasuta kiire astendamise algoritmi (<http://kodu.ut.ee/~ahto/eio/2012.03.24/matem.pdf>).
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package toylangs.parm;
2+
3+
import cma.CMaProgram;
4+
import cma.CMaProgramWriter;
5+
import toylangs.parm.ast.*;
6+
7+
import static toylangs.parm.ast.ParmNode.lit;
8+
import static toylangs.parm.ast.ParmNode.plus;
9+
10+
public class ParmMaster {
11+
private final CMaProgramWriter pw = new CMaProgramWriter();
12+
13+
public static CMaProgram compile(ParmNode node) {
14+
ParmMaster parmMaster = new ParmMaster();
15+
parmMaster.compileNode(node);
16+
return parmMaster.pw.toProgram();
17+
}
18+
19+
private void compileNode(ParmNode node) {
20+
throw new UnsupportedOperationException();
21+
}
22+
23+
static void main() {
24+
CMaProgram cMaProgram = compile(plus(lit(10), lit(12)));
25+
System.out.println(cMaProgram.toString());
26+
}
27+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package toylangs.pullet;
2+
3+
import toylangs.pullet.ast.*;
4+
5+
import static toylangs.pullet.ast.PulletNode.*;
6+
7+
public class PulletMaster {
8+
public static boolean isLive(String name, PulletNode node) {
9+
throw new UnsupportedOperationException();
10+
}
11+
12+
public static PulletNode optimize(PulletNode node) {
13+
throw new UnsupportedOperationException();
14+
}
15+
16+
static void main() {
17+
PulletNode avaldis = let("a",num(666),let("b", diff(var("a"),num(1)),var("a")));
18+
System.out.println(avaldis);
19+
System.out.println(PulletMaster.optimize(avaldis));
20+
}
21+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package toylangs.bolog;
2+
3+
import org.junit.FixMethodOrder;
4+
import org.junit.Test;
5+
import org.junit.runners.MethodSorters;
6+
import toylangs.bolog.ast.BologImp;
7+
import toylangs.bolog.ast.BologNode;
8+
9+
import java.util.Arrays;
10+
import java.util.HashSet;
11+
import java.util.Set;
12+
13+
import static org.junit.Assert.assertEquals;
14+
import static toylangs.bolog.ast.BologNode.*;
15+
16+
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
17+
public class BologMasterTest {
18+
19+
@Test
20+
public void test01_basic() {
21+
checkModel(setOf("X"), imp(var("X")));
22+
checkModel(setOf("X", "X"), imp(var("X")), imp(var("X"), var("Y")));
23+
checkModel(setOf("X", "Y"), imp(var("X")), imp(var("Y"), var("X")));
24+
}
25+
26+
@Test
27+
public void test02_more() {
28+
checkModel(setOf("X"), imp(var("X"), tv(true)));
29+
checkModel(setOf(), imp(var("X"), var("X")));
30+
checkModel(setOf("X", "Y", "Z"),
31+
imp(var("X"), var("Y")),
32+
imp(var("Y")), imp(var("Z"), var("X"), var("Y")),
33+
imp(var("Z"), var("P")));
34+
checkModel(setOf("Z"),
35+
imp(var("X"), var("Y")),
36+
imp(var("Y"), var("X")),
37+
imp(var("Z"), var("X"), var("Y")),
38+
imp(var("Z")));
39+
}
40+
41+
@Test
42+
public void test03_sanity() {
43+
Set<BologImp> imps = new HashSet<>();
44+
for (char i = 'A'; i < 'Y'; i++) {
45+
imps.add(imp(var(Character.toString(i)), var(Character.toString(i))));
46+
}
47+
assertEquals(setOf(), BologMaster.leastModel(imps));
48+
49+
Set<String> chars = new HashSet<>();
50+
for (char i = 'A'; i < 'Y'; i++) {
51+
imps.add(imp(var(Character.toString(i))));
52+
chars.add(Character.toString(i));
53+
}
54+
assertEquals(chars, BologMaster.leastModel(imps));
55+
}
56+
57+
58+
private static void checkModel(Set<String> model, BologNode... imp) {
59+
Set<BologNode> nodes = new HashSet<>(Arrays.asList(imp));
60+
Set<BologImp> nodecast = new HashSet<>();
61+
for (BologNode node : nodes) nodecast.add((BologImp) node);
62+
assertEquals(model, BologMaster.leastModel(nodecast));
63+
}
64+
65+
@SafeVarargs
66+
private static <T> Set<T> setOf(T... elems) {
67+
return new HashSet<>(Arrays.asList(elems));
68+
}
69+
}

0 commit comments

Comments
 (0)