summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/examples
diff options
context:
space:
mode:
Diffstat (limited to 'BJC-Utils2/src/examples')
-rw-r--r--BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceASTLanguageTest.java86
-rw-r--r--BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceLanguageTest.java2
2 files changed, 88 insertions, 0 deletions
diff --git a/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceASTLanguageTest.java b/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceASTLanguageTest.java
new file mode 100644
index 0000000..1a93da9
--- /dev/null
+++ b/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceASTLanguageTest.java
@@ -0,0 +1,86 @@
+package bjc.utils.examples.parsing;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Scanner;
+import java.util.function.BiConsumer;
+
+import bjc.utils.dice.DiceExpressionParser;
+import bjc.utils.dice.IDiceExpression;
+import bjc.utils.dice.ast.DiceASTFlattener;
+import bjc.utils.dice.ast.DiceASTParser;
+
+public class DiceASTLanguageTest {
+ private static Map<String, BiConsumer<String, DiceLanguageState>> acts;
+
+ static {
+ acts = new HashMap<>();
+
+ acts.put("roll", DiceASTLanguageTest::rollReference);
+ acts.put("env", DiceASTLanguageTest::printEnv);
+ }
+
+ public 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())));
+ }
+
+ public 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);
+ }
+ }
+
+ 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();
+
+ DiceASTParser dap = new DiceASTParser();
+
+ 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 = DiceASTFlattener
+ .flatten(dap.buildAST(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();
+ }
+}
diff --git a/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceLanguageTest.java b/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceLanguageTest.java
index e8b2d40..6312201 100644
--- a/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceLanguageTest.java
+++ b/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceLanguageTest.java
@@ -64,6 +64,8 @@ public class DiceLanguageTest {
System.out.println("\tParsed: " + exp.toString());
System.out.println("\tSample Roll: " + exp.roll());
+
+ env.put("last", exp);
}
i++;