From 523eea5fdbecaea141f3aafe89b307f1e9e75b25 Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Mon, 21 Mar 2016 21:42:27 -0400 Subject: Polished up work on AST-based dice --- .../java/bjc/utils/dice/ast/DiceASTFreezer.java | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 BJC-Utils2/src/main/java/bjc/utils/dice/ast/DiceASTFreezer.java (limited to 'BJC-Utils2/src/main/java/bjc/utils/dice/ast/DiceASTFreezer.java') diff --git a/BJC-Utils2/src/main/java/bjc/utils/dice/ast/DiceASTFreezer.java b/BJC-Utils2/src/main/java/bjc/utils/dice/ast/DiceASTFreezer.java new file mode 100644 index 0000000..04cc99b --- /dev/null +++ b/BJC-Utils2/src/main/java/bjc/utils/dice/ast/DiceASTFreezer.java @@ -0,0 +1,47 @@ +package bjc.utils.dice.ast; + +import java.util.Map; + +import bjc.utils.parserutils.AST; + +public class DiceASTFreezer { + public static AST freezeAST(AST tree, + Map> env) { + return tree.collapse((nod) -> { + if (nod instanceof VariableDiceNode) { + return expandNode((VariableDiceNode) nod, env); + } else { + // Type is specified here so compiler can know the type + // we're using + return new AST(nod); + } + } , (op) -> (left, right) -> { + return new AST(op, left, right); + } , (r) -> r); + } + + public static AST freezeAST(DiceASTExpression tree, + Map env) { + return tree.getAst().collapse((nod) -> { + if (nod instanceof VariableDiceNode) { + return expandNode2((VariableDiceNode) nod, env); + } else { + // Type is specified here so compiler can know the type + // we're using + return new AST(nod); + } + } , (op) -> (left, right) -> { + return new AST(op, left, right); + } , (r) -> r); + } + + private static AST expandNode(VariableDiceNode vnode, + Map> env) { + return env.get(vnode.getVariable()); + } + + private static AST expandNode2(VariableDiceNode vnode, + Map env) { + return env.get(vnode.getVariable()).getAst(); + } +} -- cgit v1.2.3