diff options
| author | bculkin2442 <bjculkin@mix.wvu.edu> | 2016-03-21 17:59:11 -0400 |
|---|---|---|
| committer | bculkin2442 <bjculkin@mix.wvu.edu> | 2016-03-21 17:59:11 -0400 |
| commit | 6d1c64021b9887f943b24732adae364d16bb0eb3 (patch) | |
| tree | ddf839115f646c419259d93f93c52471f0fc7d9a /BJC-Utils2/src/examples/java/bjc | |
| parent | 4c493c252621a8039145c74272c1843917ae3d5c (diff) | |
New example for AST-based dice things
Diffstat (limited to 'BJC-Utils2/src/examples/java/bjc')
| -rw-r--r-- | BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceASTLanguageTest.java | 86 | ||||
| -rw-r--r-- | BJC-Utils2/src/examples/java/bjc/utils/examples/parsing/DiceLanguageTest.java | 2 |
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++; |
