diff options
Diffstat (limited to 'BJC-Utils2/src/examples/java')
| -rw-r--r-- | BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceASTLanguageState.java | 19 | ||||
| -rw-r--r-- | BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceASTLanguageTest.java | 38 |
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()); |
