Skip to content

Commit 84df91b

Browse files
committed
Eksami alusosa harjutus
1 parent 7f1d99a commit 84df91b

13 files changed

Lines changed: 302 additions & 0 deletions
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package proovieksam;
2+
3+
import proovieksam.ast.*;
4+
5+
import static proovieksam.ast.EstologNode.*;
6+
7+
public class EstologEvaluator {
8+
9+
public static boolean eval(EstologProg prog) {
10+
EstologEvaluator estologEvaluator = new EstologEvaluator();
11+
return estologEvaluator.evalNode(prog);
12+
}
13+
14+
private boolean evalNode(EstologNode node) {
15+
throw new UnsupportedOperationException();
16+
}
17+
18+
static void main() {
19+
EstologProg prog = prog(
20+
kui(vordus(var("x"), var("y")), var("a"), var("b")),
21+
22+
def("x", lit(false)),
23+
def("y", lit(true)),
24+
def("a", ja(var("x"), var("y"))),
25+
def("b", voi(var("x"), var("y")))
26+
);
27+
28+
System.out.println(prog);
29+
System.out.println(eval(prog));
30+
}
31+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Eesti loogikute keel Estolog
2+
3+
[Keele kirjeldus](https://courses.cs.ut.ee/t/akt/Main/ToyLangsEstolog).
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package proovieksam.ast;
2+
3+
public sealed interface EstologBinOp extends EstologNode permits EstologJa, EstologVoi, EstologVordus {
4+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package proovieksam.ast;
2+
3+
public record EstologDef(String nimi, EstologNode avaldis) implements EstologNode {
4+
@Override
5+
public String toString() {
6+
return "def(" +
7+
"\"" + nimi + "\"" +
8+
", " + avaldis +
9+
")";
10+
}
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package proovieksam.ast;
2+
3+
public record EstologJa(EstologNode left, EstologNode right) implements EstologBinOp {
4+
@Override
5+
public String toString() {
6+
return "ja(" +
7+
"" + left +
8+
", " + right +
9+
")";
10+
}
11+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package proovieksam.ast;
2+
3+
public record EstologKui(EstologNode kui, EstologNode siis, EstologNode muidu) implements EstologNode {
4+
public EstologKui(EstologNode kui, EstologNode siis) {
5+
this(kui, siis, null);
6+
}
7+
8+
@Override
9+
public String toString() {
10+
return "kui(" +
11+
"" + kui +
12+
", " + siis +
13+
", " + muidu +
14+
")";
15+
}
16+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package proovieksam.ast;
2+
3+
public record EstologLiteraal(boolean value) implements EstologNode {
4+
@Override
5+
public String getNodeLabel() {
6+
return "lit";
7+
}
8+
9+
@Override
10+
public String toString() {
11+
return "lit(" +
12+
"" + value +
13+
")";
14+
}
15+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package proovieksam.ast;
2+
3+
public record EstologMuutuja(String nimi) implements EstologNode {
4+
@Override
5+
public String getNodeLabel() {
6+
return "var";
7+
}
8+
9+
@Override
10+
public String toString() {
11+
return "var(" +
12+
"\"" + nimi + "\"" +
13+
")";
14+
}
15+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package proovieksam.ast;
2+
3+
import toylangs.AbstractNode;
4+
5+
import java.util.Arrays;
6+
import java.util.List;
7+
8+
public sealed interface EstologNode extends AbstractNode permits EstologBinOp, EstologDef, EstologKui, EstologLiteraal, EstologMuutuja, EstologProg {
9+
10+
static EstologMuutuja var(String nimi) {
11+
return new EstologMuutuja(nimi);
12+
}
13+
14+
static EstologLiteraal lit(boolean value) {
15+
return new EstologLiteraal(value);
16+
}
17+
18+
static EstologJa ja(EstologNode left, EstologNode right) {
19+
return new EstologJa(left, right);
20+
}
21+
22+
static EstologVoi voi(EstologNode left, EstologNode right) {
23+
return new EstologVoi(left, right);
24+
}
25+
26+
static EstologVordus vordus(EstologNode left, EstologNode right) {
27+
return new EstologVordus(left, right);
28+
}
29+
30+
static EstologKui kui(EstologNode kui, EstologNode siis, EstologNode muidu) {
31+
return new EstologKui(kui, siis, muidu);
32+
}
33+
34+
static EstologKui kui(EstologNode kui, EstologNode siis) {
35+
return new EstologKui(kui, siis);
36+
}
37+
38+
static EstologDef def(String nimi, EstologNode avaldis) {
39+
return new EstologDef(nimi, avaldis);
40+
}
41+
42+
static EstologProg prog(EstologNode avaldis, List<EstologDef> defs) {
43+
return new EstologProg(avaldis, defs);
44+
}
45+
46+
static EstologProg prog(EstologNode avaldis, EstologDef... defs) {
47+
return new EstologProg(avaldis, Arrays.asList(defs));
48+
}
49+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package proovieksam.ast;
2+
3+
import java.util.List;
4+
5+
public record EstologProg(EstologNode avaldis, List<EstologDef> defs) implements EstologNode {
6+
@Override
7+
public String toString() {
8+
return "prog(" +
9+
"" + avaldis +
10+
", " + defs.toString().replaceAll("[\\[\\]{}]", "") +
11+
")";
12+
}
13+
}

0 commit comments

Comments
 (0)