-
Notifications
You must be signed in to change notification settings - Fork 0
/
arith_main.flow
50 lines (45 loc) · 1.31 KB
/
arith_main.flow
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// import lingo/pegcode/driver;
// import string;
// ArExpr ::= ArSum, ArMult, ArInt;
// ArSum(lhs : ArExpr, rhs : ArExpr);
// ArMult(lhs : ArExpr, rhs : ArExpr);
// ArInt(val: int);
// treeToInt(exp : ArExpr) -> int {
// switch (exp) {
// ArInt(val): {
// val;
// };
// ArSum(lhs, rhs): {
// treeToInt(lhs) + treeToInt(rhs);
// }
// ArMult(lhs, rhs): {
// treeToInt(lhs) * treeToInt(rhs);
// }
// }
// }
// treeToBackwardsPolish(exp : ArExpr) -> string {
// switch (exp) {
// ArInt(val): {
// i2s(val);
// };
// ArSum(lhs, rhs): {
// strGlue(["(", treeToBackwardsPolish(lhs), treeToBackwardsPolish(rhs), "+)"], " ");
// }
// ArMult(lhs, rhs): {
// strGlue(["(", treeToBackwardsPolish(lhs), treeToBackwardsPolish(rhs), "*)"], " ");
// }
// }
// }
// s2ar(str : string) -> ArExpr {
// e_gr = "#include arith.lingo";
// parsic(
// compilePegGrammar(e_gr),
// str,
// SemanticActions(setTree(defaultPegActions.t, "createArInt", \s -> ArInt(s2i(s[0]))))
// )
// }
// main() {
// expr1 = s2ar("(1 + (3 * 2))");
// println(i2s(treeToInt(expr1)));
// println(treeToBackwardsPolish(expr1));
// }