From 4cc825538bcfaacea47ba7c89a1e47321a95baab Mon Sep 17 00:00:00 2001 From: adam Date: Sun, 22 Jan 2006 03:41:21 -0500 Subject: [PATCH] checkpoint darcs-hash:20060122084121-5007d-41d56b1d0aa7eb45981a514b7443fe1cf0f71c06.gz --- src/edu/berkeley/sbp/Forest.java | 41 ++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/src/edu/berkeley/sbp/Forest.java b/src/edu/berkeley/sbp/Forest.java index ec3da78..34759e3 100644 --- a/src/edu/berkeley/sbp/Forest.java +++ b/src/edu/berkeley/sbp/Forest.java @@ -7,7 +7,7 @@ import java.util.*; import java.lang.reflect.*; /** an efficient representation of a collection of trees (Tomita's shared packed parse forest) */ -public abstract class Forest extends PrintableTree> implements Iterable> { +public abstract class Forest /*extends PrintableTree>*/ implements Iterable> { /** assume that this forest contains exactly one tree and return it; otherwise throw an exception */ public final Tree expand1() throws Ambiguous, ParseFailed { @@ -17,25 +17,29 @@ public abstract class Forest extends PrintableTree> implements } /** expand this forest into a set of trees */ - //public abstract HashSet> expand(boolean toss); - public HashSet> expand(boolean toss) { - HashSet> ret = new HashSet>(); - for(Body b : this) - ret.addAll(b.expand(toss, new ArrayList>(), 0, new HashSet>())); - if (toss && ret.size() > 1) throw new Ambiguous(this); - return ret; - } + public HashSet> expand(boolean toss) { + HashSet> ret = new HashSet>(); + for(Body b : this) + ret.addAll(b.expand(toss, new ArrayList>(), 0, new HashSet>())); + if (toss && ret.size() > 1) throw new Ambiguous(this); + return ret; + } static Forest singleton(Input.Location loc) { return create(loc, null, new Forest[] { }, false, true); } static Forest singleton(Input.Location loc, Forest body) { return create(loc, null, new Forest[] { body }, false, true); } static Forest leaf(Input.Location loc, T tag) { return create(loc, tag, null, false, false); } public static Forest create(Input.Location loc, T tag, Forest[] tokens, boolean unwrap, boolean singleton) { - return new MultiForest(new Body(loc, tag, tokens, unwrap, singleton)); + return new MyBody(loc, tag, tokens, unwrap, singleton); } // Body ////////////////////////////////////////////////////////////////////////////// - protected static class Body extends PrintableTree> implements Iterable> { + protected static interface Body { + HashSet> expand(boolean toss, ArrayList> toks, int i, HashSet> h); + } + + protected static class MyBody extends Forest implements Body /* extends PrintableTree> implements Iterable>*/ { + public Iterator> iterator() { return new SingletonIterator>(this); } private final Input.Location location; private final T tag; @@ -43,7 +47,7 @@ public abstract class Forest extends PrintableTree> implements private final boolean unwrap; private final boolean singleton; - private Body(Input.Location loc, T tag, Forest[] tokens, boolean unwrap, boolean singleton) { + private MyBody(Input.Location loc, T tag, Forest[] tokens, boolean unwrap, boolean singleton) { this.location = loc; this.tag = tag; this.tokens = tokens==null ? emptyForestArray : new Forest[tokens.length]; @@ -53,7 +57,7 @@ public abstract class Forest extends PrintableTree> implements this.singleton = singleton; } - private HashSet> expand(boolean toss, ArrayList> toks, int i, HashSet> h) { + public HashSet> expand(boolean toss, ArrayList> toks, int i, HashSet> h) { if (singleton) { for(Body b : tokens[0]) b.expand(toss, toks, i, h); @@ -79,17 +83,11 @@ public abstract class Forest extends PrintableTree> implements return h; } - void addTo(FastSet> h) { - /*if (!singleton)*/ h.add(this, true); - //else for(Body b : tokens[0]) b.addTo(h); - } - protected String headToString() { return null; } protected String headToJava() { return null; } protected String left() { return "{"; } protected String right() { return "}"; } protected boolean ignoreSingleton() { return false; } - public Iterator> iterator() { return new ArrayIterator>(tokens); } } @@ -124,11 +122,6 @@ public abstract class Forest extends PrintableTree> implements public Forest resolve() { return this; } } - private static class MultiForest extends Forest { - private final FastSet> results = new FastSet>(); - public MultiForest(Body b) { results.add(b); } - public Iterator> iterator() { return results.iterator(); } - } // Statics ////////////////////////////////////////////////////////////////////////////// -- 1.7.10.4