X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FForest.java;h=6ac1e4b81cb5281a3ac9f755b026b04dcb1d64dd;hp=13ac199a1264db985a3bbdc8823de95c0ddecc48;hb=b0ec1efcb13eceb539f9cd033a0d2908fc2be27a;hpb=0a0227b9180534d2a431f3d6e08a398bde2244c4 diff --git a/src/edu/berkeley/sbp/Forest.java b/src/edu/berkeley/sbp/Forest.java index 13ac199..6ac1e4b 100644 --- a/src/edu/berkeley/sbp/Forest.java +++ b/src/edu/berkeley/sbp/Forest.java @@ -24,7 +24,7 @@ public abstract class Forest { static Forest singleton(Token.Location loc, Sequence creator) { return create(loc, null, new Forest[] { }, creator, false, true); } static Forest singleton(Token.Location loc, Forest body, Sequence creator) { return create(loc, null, new Forest[] { body }, creator, false, true); } static Forest leaf(Token.Location loc, T tag, Sequence creator) { return create(loc, tag, null, creator, false, false); } - static Forest create(Token.Location loc, T tag, Forest[] tokens, Sequence creator, boolean unwrap, boolean singleton) { + public static Forest create(Token.Location loc, T tag, Forest[] tokens, Sequence creator, boolean unwrap, boolean singleton) { return new MultiForest(loc, tag, tokens, creator, unwrap, singleton); } @@ -144,7 +144,7 @@ public abstract class Forest { } public Iterator> iterator() { return ((IterableForest)resolve()).iterator(); } public HashSet> expand(boolean toss) { return resolve().expand(toss); } - public boolean valid() { resolve(); return valid; } + public boolean valid() { if (valid) return true; resolve(); return valid; } public String toString() { return resolve().toString(); } public Forest resolve() { if (hp==null) return res; @@ -156,11 +156,13 @@ public abstract class Forest { else results = new HashSet(); } if (results != null) { - for(Forest p : hp) for(Body b : (IterableForest)p) results.add(b); + for(Forest p : hp) + for(Body b : (IterableForest)p) + results.add(b); for(Body b : results) { if (b.keep() && (b.creator==null || !b.creator.lame)) continue; - if (!b.keep(results)) continue; if (b.creator!=null && b.creator.lame) continue; + if (!b.keep(results)) continue; valid = true; b.addTo(nh); } @@ -197,6 +199,11 @@ public abstract class Forest { public String toString() { if (toString != null) return toString; StringBuffer ret = new StringBuffer(); + if (results.size()==1) { + for(Forest.Body r : results) + ret.append(r); + return toString = ret.toString(); + } ret.append(" r : results) {