summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/examples/java/bjc/utils
diff options
context:
space:
mode:
Diffstat (limited to 'BJC-Utils2/src/examples/java/bjc/utils')
-rw-r--r--BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceASTLanguageState.java19
-rw-r--r--BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceASTLanguageTest.java38
2 files changed, 47 insertions, 10 deletions
diff --git a/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceASTLanguageState.java b/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceASTLanguageState.java
new file mode 100644
index 0000000..82dccf5
--- /dev/null
+++ b/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceASTLanguageState.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.ast.DiceASTExpression;
+
+public class DiceASTLanguageState
+ extends Pair<DiceExpressionParser, Map<String, DiceASTExpression>> {
+
+ public DiceASTLanguageState() {
+ }
+
+ public DiceASTLanguageState(DiceExpressionParser left,
+ Map<String, DiceASTExpression> right) {
+ super(left, right);
+ }
+}
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
index 1a93da9..f8034c8 100644
--- a/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceASTLanguageTest.java
+++ b/BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceASTLanguageTest.java
@@ -7,27 +7,44 @@ 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.DiceASTExpression;
+import bjc.utils.dice.ast.DiceASTFreezer;
import bjc.utils.dice.ast.DiceASTParser;
+import bjc.utils.dice.ast.IDiceASTNode;
+import bjc.utils.parserutils.AST;
public class DiceASTLanguageTest {
- private static Map<String, BiConsumer<String, DiceLanguageState>> acts;
+ private static Map<String, BiConsumer<String, DiceASTLanguageState>> acts;
static {
acts = new HashMap<>();
acts.put("roll", DiceASTLanguageTest::rollReference);
acts.put("env", DiceASTLanguageTest::printEnv);
+ acts.put("freeze", DiceASTLanguageTest::freezeVar);
}
- public static void printEnv(String ln, DiceLanguageState stat) {
+ private static void freezeVar(String ln, DiceASTLanguageState stat) {
+ String[] strangs = ln.split(" ");
+
+ System.out.println("Freezing references in " + strangs[1]);
+
+ stat.doWith((dep, env) -> {
+ env.put(strangs[1], new DiceASTExpression(
+ DiceASTFreezer.freezeAST(env.get(strangs[1]), env),
+ env));
+ });
+ }
+
+ public static void printEnv(String ln, DiceASTLanguageState 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) {
+ public static void rollReference(String ln,
+ DiceASTLanguageState stat) {
String[] strangs = ln.split(" ");
System.out.println("\tRolling dice expression " + strangs[1] + " "
@@ -35,8 +52,8 @@ public class DiceASTLanguageTest {
int nRolls = Integer.parseInt(strangs[2]);
- IDiceExpression dexp = stat
- .merge((dep, env) -> env.get(strangs[1]));
+ IDiceExpression dexp =
+ stat.merge((dep, env) -> env.get(strangs[1]));
for (int i = 1; i <= nRolls; i++) {
int roll = dexp.roll();
@@ -55,8 +72,8 @@ public class DiceASTLanguageTest {
DiceASTParser dap = new DiceASTParser();
DiceExpressionParser dep = new DiceExpressionParser();
- Map<String, IDiceExpression> env = new HashMap<>();
- DiceLanguageState state = new DiceLanguageState(dep, env);
+ Map<String, DiceASTExpression> env = new HashMap<>();
+ DiceASTLanguageState state = new DiceASTLanguageState(dep, env);
while (!ln.equalsIgnoreCase("quit")) {
String header = ln.split(" ")[0];
@@ -65,8 +82,9 @@ public class DiceASTLanguageTest {
acts.get(header).accept(ln, state);
} else {
- IDiceExpression exp = DiceASTFlattener
- .flatten(dap.buildAST(ln), env);
+ AST<IDiceASTNode> builtAST = dap.buildAST(ln);
+ DiceASTExpression exp =
+ new DiceASTExpression(builtAST, env);
System.out.println("\tParsed: " + exp.toString());
System.out.println("\tSample Roll: " + exp.roll());