From a5850915df72f5968fd1b281eb9e455d50c580ee Mon Sep 17 00:00:00 2001 From: bculkin2442 Date: Wed, 13 Apr 2016 23:15:28 -0400 Subject: Fixed examples using trees --- .../bjc/utils/parserutils/TreeConstructor.java | 44 +++++++++++----------- 1 file changed, 23 insertions(+), 21 deletions(-) (limited to 'BJC-Utils2/src/main/java/bjc/utils/parserutils/TreeConstructor.java') 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 088430b..52299bb 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/parserutils/TreeConstructor.java +++ b/BJC-Utils2/src/main/java/bjc/utils/parserutils/TreeConstructor.java @@ -12,6 +12,8 @@ import bjc.utils.data.experimental.IPair; import bjc.utils.data.experimental.Identity; import bjc.utils.data.experimental.Pair; import bjc.utils.funcdata.IFunctionalList; +import bjc.utils.funcdata.ITree; +import bjc.utils.funcdata.Tree; /** * Creates a parse tree from a postfix expression @@ -21,8 +23,8 @@ import bjc.utils.funcdata.IFunctionalList; */ public class TreeConstructor { private static final class TokenTransformer implements Consumer { - private final class OperatorHandler - implements UnaryOperator>, AST>> { + private final class OperatorHandler implements + UnaryOperator>, ITree>> { private T element; public OperatorHandler(T element) { @@ -30,16 +32,16 @@ public class TreeConstructor { } @Override - public IPair>, AST> apply( - IPair>, AST> pair) { + public IPair>, ITree> apply( + IPair>, ITree> pair) { return pair.bind((queuedASTs, currentAST) -> { return handleOperator(queuedASTs); }); } - private IPair>, AST> handleOperator( - Deque> queuedASTs) { - AST newAST; + private IPair>, ITree> handleOperator( + Deque> queuedASTs) { + ITree newAST; if (isSpecialOperator.test(element)) { newAST = handleSpecialOperator.apply(queuedASTs); @@ -52,10 +54,10 @@ public class TreeConstructor { + queuedASTs.peek()); } - AST rightAST = queuedASTs.pop(); - AST leftAST = queuedASTs.pop(); + ITree rightAST = queuedASTs.pop(); + ITree leftAST = queuedASTs.pop(); - newAST = new AST<>(element, leftAST, rightAST); + newAST = new Tree<>(element, leftAST, rightAST); } queuedASTs.push(newAST); @@ -64,16 +66,16 @@ public class TreeConstructor { } } - private IHolder>, AST>> initialState; - private Predicate operatorPredicate; - private Predicate isSpecialOperator; - private Function>, AST> handleSpecialOperator; + private IHolder>, ITree>> initialState; + private Predicate operatorPredicate; + private Predicate isSpecialOperator; + private Function>, ITree> handleSpecialOperator; public TokenTransformer( - IHolder>, AST>> initialState, + IHolder>, ITree>> initialState, Predicate operatorPredicate, Predicate isSpecialOperator, - Function>, AST> handleSpecialOperator) { + Function>, ITree> handleSpecialOperator) { this.initialState = initialState; this.operatorPredicate = operatorPredicate; this.isSpecialOperator = isSpecialOperator; @@ -85,7 +87,7 @@ public class TreeConstructor { if (operatorPredicate.test(element)) { initialState.transform(new OperatorHandler(element)); } else { - AST newAST = new AST<>(element); + ITree newAST = new Tree<>(element); initialState.doWith((pair) -> { pair.doWith((queue, currentAST) -> { @@ -116,7 +118,7 @@ public class TreeConstructor { * operator * @return A AST from the expression */ - public static AST constructTree(IFunctionalList tokens, + public static ITree constructTree(IFunctionalList tokens, Predicate operatorPredicate) { return constructTree(tokens, operatorPredicate, (op) -> false, null); @@ -146,9 +148,9 @@ public class TreeConstructor { * interface. Maybe there's a better way to express how that * works */ - public static AST constructTree(IFunctionalList tokens, + public static ITree constructTree(IFunctionalList tokens, Predicate operatorPredicate, Predicate isSpecialOperator, - Function>, AST> handleSpecialOperator) { + Function>, ITree> handleSpecialOperator) { if (tokens == null) { throw new NullPointerException("Tokens must not be null"); } else if (operatorPredicate == null) { @@ -159,7 +161,7 @@ public class TreeConstructor { "Special operator determiner must not be null"); } - IHolder>, AST>> initialState = new Identity<>( + IHolder>, ITree>> initialState = new Identity<>( new Pair<>(new LinkedList<>(), null)); tokens.forEach( -- cgit v1.2.3