summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/examples/java/bjc
diff options
context:
space:
mode:
Diffstat (limited to 'BJC-Utils2/src/examples/java/bjc')
-rw-r--r--BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceExpressionParserTest.java3
-rw-r--r--BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceLanguageState.java19
-rw-r--r--BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceLanguageTest.java78
3 files changed, 99 insertions, 1 deletions
diff --git a/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceExpressionParserTest.java b/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceExpressionParserTest.java
index 75f73c6..db26a5c 100644
--- a/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceExpressionParserTest.java
+++ b/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceExpressionParserTest.java
@@ -1,5 +1,6 @@
package bjc.utils.examples.parsing;
+import java.util.HashMap;
import java.util.Scanner;
import bjc.utils.dice.DiceExpressionParser;
@@ -43,7 +44,7 @@ public class DiceExpressionParserTest {
*/
DiceExpressionParser dep = new DiceExpressionParser();
- IDiceExpression dexp = dep.parse(exp);
+ IDiceExpression dexp = dep.parse(exp, new HashMap<>());
/*
* Roll the dice a specified amount of times
diff --git a/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceLanguageState.java b/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceLanguageState.java
new file mode 100644
index 0000000..88c7e50
--- /dev/null
+++ b/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceLanguageState.java
@@ -0,0 +1,19 @@
+package bjc.utils.examples.parsing;
+
+import java.util.Map;
+
+import bjc.utils.data.Pair;
+import bjc.utils.dice.DiceExpressionParser;
+import bjc.utils.dice.IDiceExpression;
+
+public class DiceLanguageState
+ extends Pair<DiceExpressionParser, Map<String, IDiceExpression>> {
+
+ public DiceLanguageState() {
+ }
+
+ public DiceLanguageState(DiceExpressionParser left,
+ Map<String, IDiceExpression> right) {
+ super(left, right);
+ }
+}
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
new file mode 100644
index 0000000..e8b2d40
--- /dev/null
+++ b/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceLanguageTest.java
@@ -0,0 +1,78 @@
+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;
+
+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);
+ }
+
+ 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();
+
+ 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 = dep.parse(ln, env);
+
+ System.out.println("\tParsed: " + exp.toString());
+ System.out.println("\tSample Roll: " + exp.roll());
+ }
+
+ i++;
+
+ System.out.print("dice-lang-" + i + "> ");
+ ln = scn.nextLine();
+ }
+
+ System.out.println("Bye.");
+ scn.close();
+ }
+}