diff options
4 files changed, 24 insertions, 15 deletions
diff --git a/BJC-Utils2/src/main/java/bjc/utils/dice/CompoundDice.java b/BJC-Utils2/src/main/java/bjc/utils/dice/CompoundDice.java index 3dd70ff..4e2e9f3 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/dice/CompoundDice.java +++ b/BJC-Utils2/src/main/java/bjc/utils/dice/CompoundDice.java @@ -33,8 +33,11 @@ public class CompoundDice implements IDiceExpression { } public CompoundDice(String l, String r) { - this.l = ComplexDice.fromString(l); - this.r = ComplexDice.fromString(r); + this(ComplexDice.fromString(l), ComplexDice.fromString(r)); + } + + public CompoundDice(String[] exps) { + this(exps[0], exps[1]); } @Override diff --git a/BJC-Utils2/src/main/java/bjc/utils/dice/DiceExpressionParser.java b/BJC-Utils2/src/main/java/bjc/utils/dice/DiceExpressionParser.java index 12b85f7..a7d1f8c 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/dice/DiceExpressionParser.java +++ b/BJC-Utils2/src/main/java/bjc/utils/dice/DiceExpressionParser.java @@ -67,9 +67,7 @@ public class DiceExpressionParser { && !tok.equalsIgnoreCase("c")) { String[] strangs = tok.split("c"); - dexps.push(new CompoundDice( - ComplexDice.fromString(strangs[0]), - ComplexDice.fromString(strangs[1]))); + dexps.push(new CompoundDice(strangs)); } else if (StringUtils.countMatches(tok, 'd') == 1 && !tok.equalsIgnoreCase("d")) { /* diff --git a/BJC-Utils2/src/main/java/bjc/utils/parserutils/AST.java b/BJC-Utils2/src/main/java/bjc/utils/parserutils/AST.java index 7b93cc9..153fc41 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/parserutils/AST.java +++ b/BJC-Utils2/src/main/java/bjc/utils/parserutils/AST.java @@ -88,7 +88,7 @@ public class AST<T> { * @return The collapsed value of the tree */ public <E, T2> E collapse(Function<T, T2> tokenTransform, - Map<T, BinaryOperator<T2>> nodeTransform, + Function<T, BinaryOperator<T2>> nodeTransform, Function<T2, E> resultTransform) { return resultTransform .apply(internalCollapse(tokenTransform, nodeTransform)); @@ -98,7 +98,7 @@ public class AST<T> { * Internal recursive collapser */ private <T2> T2 internalCollapse(Function<T, T2> tokenTransform, - Map<T, BinaryOperator<T2>> nodeTransform) { + Function<T, BinaryOperator<T2>> nodeTransform) { if (left == null && right == null) { return tokenTransform.apply(token); } else { @@ -107,7 +107,7 @@ public class AST<T> { T2 rightCollapsed = right.internalCollapse(tokenTransform, nodeTransform); - return nodeTransform.get(token).apply(leftCollapsed, + return nodeTransform.apply(token).apply(leftCollapsed, rightCollapsed); } } diff --git a/BJC-Utils2/src/main/java/bjc/utils/parserutils/TreeConstructor.java b/BJC-Utils2/src/main/java/bjc/utils/parserutils/TreeConstructor.java index 9c920d2..e1a03f1 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/parserutils/TreeConstructor.java +++ b/BJC-Utils2/src/main/java/bjc/utils/parserutils/TreeConstructor.java @@ -31,8 +31,8 @@ public class TreeConstructor { */ public static <T> AST<T> constructTree(FunctionalList<T> toks, Predicate<T> opPredicate) { - GenHolder<Pair<Deque<AST<T>>, AST<T>>> initState = new GenHolder<>( - new Pair<>(new LinkedList<>(), null)); + GenHolder<Pair<Deque<AST<T>>, AST<T>>> initState = + new GenHolder<>(new Pair<>(new LinkedList<>(), null)); toks.forEach((ele) -> { if (opPredicate.test(ele)) { @@ -46,18 +46,26 @@ public class TreeConstructor { AST<T> newAST = new AST<T>(ele, left, right); deq.push(newAST); - + return newAST; }); - Pair<Deque<AST<T>>, AST<T>> newPair = new Pair<>(lft, - mergedAST); + Pair<Deque<AST<T>>, AST<T>> newPair = + new Pair<>(lft, mergedAST); return newPair; }); } else { - initState.doWith((par) -> par - .doWith((deq, ast) -> deq.push(new AST<>(ele)))); + AST<T> newAST = new AST<>(ele); + + initState.doWith((par) -> par.doWith((deq, ast) -> { + deq.push(newAST); + })); + + initState.transform((par) -> { + return (Pair<Deque<AST<T>>, AST<T>>) par + .apply((d) -> d, (a) -> newAST); + }); } }); |
