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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
package bjc.dicelang.v1.examples;
import bjc.dicelang.v1.DiceExpressionParser;
import bjc.dicelang.v1.IDiceExpression;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.function.BiConsumer;
/**
* Test of dice language
*
* @author ben
*
*/
public class DiceLanguageTest {
private static Map<String, BiConsumer<String, DiceLanguageState>> acts;
static {
acts = new HashMap<>();
acts.put("roll", DiceLanguageTest::rollReference);
acts.put("env", DiceLanguageTest::printEnv);
}
/**
* Main method
*
* @param args
* Unused CLI args
*/
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
int i = 0;
System.out.print("dice-lang-" + i + "> ");
String ln = scn.nextLine();
DiceExpressionParser dep = new DiceExpressionParser();
Map<String, IDiceExpression> env = new HashMap<>();
DiceLanguageState state = new DiceLanguageState(dep, env);
while(!ln.equalsIgnoreCase("quit")) {
String header = ln.split(" ")[0];
if(acts.containsKey(header)) {
acts.get(header).accept(ln, state);
} else {
IDiceExpression exp = DiceExpressionParser.parse(ln, env);
System.out.println("\tParsed: " + exp.toString());
System.out.println("\tSample Roll: " + exp.roll());
env.put("last", exp);
}
i++;
System.out.print("dice-lang-" + i + "> ");
ln = scn.nextLine();
}
System.out.println("Bye.");
scn.close();
}
/**
* @param ln
* Unused parameter, kept to comply with expected type
* sig
*/
private static void printEnv(String ln, DiceLanguageState stat) {
System.out.println("Printing enviroment for debugging purposes.");
stat.doWith((dep, env) -> env.forEach(
(key, exp) -> System.out.println("\tKey: " + key + "\tExp: " + exp.toString())));
}
private static void rollReference(String ln, DiceLanguageState stat) {
String[] strangs = ln.split(" ");
System.out.println("\tRolling dice expression " + strangs[1] + " " + strangs[2] + " times.");
int nRolls = Integer.parseInt(strangs[2]);
IDiceExpression dexp = stat.merge((dep, env) -> env.get(strangs[1]));
for(int i = 1; i <= nRolls; i++) {
int roll = dexp.roll();
System.out.println("\tRolled " + roll);
}
}
}
|