summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils/parserutils/TreeConstructor.java
diff options
context:
space:
mode:
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils/parserutils/TreeConstructor.java')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/parserutils/TreeConstructor.java22
1 files changed, 15 insertions, 7 deletions
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);
+ });
}
});