summaryrefslogtreecommitdiff
path: root/BJC-Utils2/src/main/java/bjc/utils
diff options
context:
space:
mode:
authorbculkin2442 <bjculkin@mix.wvu.edu>2016-03-22 10:09:55 -0400
committerbculkin2442 <bjculkin@mix.wvu.edu>2016-03-22 10:09:55 -0400
commit6026fd73eae00849247240145e7f48f897795579 (patch)
treee3dc6431dee048bcd012f14e454e43f88b1f1daf /BJC-Utils2/src/main/java/bjc/utils
parentfcf3b6695566ff7b6163a5573137d3ac28e3e32e (diff)
Fixed bug in AST traversal
Diffstat (limited to 'BJC-Utils2/src/main/java/bjc/utils')
-rw-r--r--BJC-Utils2/src/main/java/bjc/utils/parserutils/AST.java51
1 files changed, 28 insertions, 23 deletions
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 153fc41..f390155 100644
--- a/BJC-Utils2/src/main/java/bjc/utils/parserutils/AST.java
+++ b/BJC-Utils2/src/main/java/bjc/utils/parserutils/AST.java
@@ -54,25 +54,30 @@ public class AST<T> {
}
public void traverse(TreeLinearizationMethod tlm, Consumer<T> con) {
- switch (tlm) {
- case INORDER:
- left.traverse(tlm, con);
- con.accept(token);
- right.traverse(tlm, con);
- break;
- case POSTORDER:
- left.traverse(tlm, con);
- right.traverse(tlm, con);
- con.accept(token);
- break;
- case PREORDER:
- con.accept(token);
- left.traverse(tlm, con);
- right.traverse(tlm, con);
- break;
- default:
- throw new IllegalArgumentException(
- "Got a invalid tree linearizer " + tlm + ". WAT");
+ if (left != null && right != null) {
+ switch (tlm) {
+ case INORDER:
+ left.traverse(tlm, con);
+ con.accept(token);
+ right.traverse(tlm, con);
+ break;
+ case POSTORDER:
+ left.traverse(tlm, con);
+ right.traverse(tlm, con);
+ con.accept(token);
+ break;
+ case PREORDER:
+ con.accept(token);
+ left.traverse(tlm, con);
+ right.traverse(tlm, con);
+ break;
+ default:
+ throw new IllegalArgumentException(
+ "Got a invalid tree linearizer " + tlm
+ + ". WAT");
+ }
+ } else {
+ con.accept(token);
}
}
@@ -102,10 +107,10 @@ public class AST<T> {
if (left == null && right == null) {
return tokenTransform.apply(token);
} else {
- T2 leftCollapsed = left.internalCollapse(tokenTransform,
- nodeTransform);
- T2 rightCollapsed = right.internalCollapse(tokenTransform,
- nodeTransform);
+ T2 leftCollapsed =
+ left.internalCollapse(tokenTransform, nodeTransform);
+ T2 rightCollapsed =
+ right.internalCollapse(tokenTransform, nodeTransform);
return nodeTransform.apply(token).apply(leftCollapsed,
rightCollapsed);