summaryrefslogtreecommitdiff
path: root/dice-lang/src/bjc/dicelang/v1/examples/DiceLanguageTest.java
diff options
context:
space:
mode:
authorbjculkin <bjculkin@WIT-136XG42.wvu-ad.wvu.edu>2017-02-27 10:08:50 -0500
committerbjculkin <bjculkin@WIT-136XG42.wvu-ad.wvu.edu>2017-02-27 10:08:50 -0500
commit79ee129fc0d36ad10bceb942262f2842419c030c (patch)
treed1298fdb8b81726f4b9012d7a29c3029a55a3aa7 /dice-lang/src/bjc/dicelang/v1/examples/DiceLanguageTest.java
parentc50a0744269ce22604c0604cc69e6d5e5ce8a3fc (diff)
Pacakge reorganization
Diffstat (limited to 'dice-lang/src/bjc/dicelang/v1/examples/DiceLanguageTest.java')
-rw-r--r--dice-lang/src/bjc/dicelang/v1/examples/DiceLanguageTest.java96
1 files changed, 96 insertions, 0 deletions
diff --git a/dice-lang/src/bjc/dicelang/v1/examples/DiceLanguageTest.java b/dice-lang/src/bjc/dicelang/v1/examples/DiceLanguageTest.java
new file mode 100644
index 0000000..257e646
--- /dev/null
+++ b/dice-lang/src/bjc/dicelang/v1/examples/DiceLanguageTest.java
@@ -0,0 +1,96 @@
+package bjc.dicelang.v1.examples;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Scanner;
+import java.util.function.BiConsumer;
+
+import bjc.dicelang.v1.DiceExpressionParser;
+import bjc.dicelang.v1.IDiceExpression;
+
+/**
+ * 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);
+ }
+ }
+}