X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FForest.java;h=34982bd11d935d2e238e059e29c1eb305af18ae4;hp=cf64ed272a57322dd12473acf5c44049a07bf920;hb=2afdfe14e78fa0597186614937c679a09d74ecdf;hpb=c78e4efbba69fc058bbe487319b3abf5d94df3cb diff --git a/src/edu/berkeley/sbp/Forest.java b/src/edu/berkeley/sbp/Forest.java index cf64ed2..34982bd 100644 --- a/src/edu/berkeley/sbp/Forest.java +++ b/src/edu/berkeley/sbp/Forest.java @@ -28,11 +28,18 @@ public abstract class Forest implements GraphViz.ToGraphViz { // Package-Private ////////////////////////////////////////////////////////////////////////////// - static Forest create(Input.Region region, NodeType head, Forest[] children, boolean lift) { + static Forest create(Input.Region region, NodeType head, Forest[] children, + boolean lift) { if (region == null) throw new RuntimeException("invoked Forest.create(region=null) -- this should never happen"); return new One(region, head, children, lift); } + static Forest create(Input.Region region, NodeType head, Forest[] children, + boolean lift, boolean liftLeft) { + if (region == null) throw new RuntimeException("invoked Forest.create(region=null) -- this should never happen"); + return new One(region, head, children, lift, liftLeft); + } + /** create a new forest */ public static Forest create(Input.Region region, NodeType head, Forest[] children) { return Forest.create(region, head, children, false); } @@ -53,10 +60,14 @@ public abstract class Forest implements GraphViz.ToGraphViz { /** if true, the last child's children are considered children of this node */ private final boolean lift; + private final boolean liftLeft; public Input.Region getRegion() { return location; } private One(Input.Region loc, NodeType head, Forest[] children, boolean lift) { + this(loc, head, children, lift, false); + } + private One(Input.Region loc, NodeType head, Forest[] children, boolean lift, boolean liftLeft) { this.location = loc; this.head = head; if (head==null) throw new RuntimeException("invoked Forest.create(,null,,,) -- this should never happen"); @@ -64,12 +75,13 @@ public abstract class Forest implements GraphViz.ToGraphViz { if (children != null) System.arraycopy(children, 0, this.children, 0, children.length); if (children != null) for(int i=0; i expand1() throws Ambiguous { Tree[] ret = new Tree[children.length]; for(int i=0; i(location, head, ret, lift); + return new Tree(location, head, ret, lift, liftLeft); } void gather(HashSet> hf) { @@ -83,7 +95,7 @@ public abstract class Forest implements GraphViz.ToGraphViz { private void expand(final int i, Tree[] ta, HashSet> ht, HashSet> ignore, Tree bogus) { if (i==children.length) { - ht.add(new Tree(location, head, ta, lift)); + ht.add(new Tree(location, head, ta, lift, liftLeft)); } else { HashSet> ht2 = new HashSet>(); children[i].expand(ht2, ignore, bogus);