checkpoint
[sbp.git] / src / edu / berkeley / sbp / Forest.java
index 705208f..917fea5 100644 (file)
@@ -10,9 +10,9 @@ import java.lang.reflect.*;
 public abstract class Forest<T> {
 
     /** assume that this forest contains exactly one tree and return it; otherwise throw an exception */
-    public final Tree<T> expand1() throws Parser.Ambiguous, Parser.Failed {
+    public final Tree<T> expand1() throws Ambiguous, ParseFailed {
         Iterator<Tree<T>> it = expand(true).iterator();
-        if (!it.hasNext()) throw new Parser.Failed();
+        if (!it.hasNext()) throw new ParseFailed();
         return it.next();
     }
 
@@ -71,43 +71,32 @@ public abstract class Forest<T> {
             }
             return h;
         }
-        void addTo(HashSet<Body> h) {
-            if (!singleton) h.add(this);
-            else for(Body b : (IterableForest<T>)tokens[0]) b.addTo(h);
-        }
+
         void addTo(FastSet<Body> h) {
             if (!singleton) h.add(this, true);
             else for(Body b : (IterableForest<T>)tokens[0]) b.addTo(h);
         }
 
-
-        private boolean rep = false;
         public String toString() {
-            if (rep) return "***";
-            try {
-                rep = true;
-                StringBuffer ret = new StringBuffer();
-                for(int i=0; i<tokens.length; i++) {
-                    String q = tokens[i]==null ? "null" : tokens[i].toString();
-                    if (q.length() > 0) {
-                        ret.append(q);
-                        ret.append(" ");
-                    }
+            StringBuffer ret = new StringBuffer();
+            for(int i=0; i<tokens.length; i++) {
+                String q = tokens[i]==null ? "null" : tokens[i].toString();
+                if (q.length() > 0) {
+                    ret.append(q);
+                    ret.append(" ");
                 }
-                String tail = ret.toString().trim();
-                String head = (tag!=null && !tag.toString().equals("")) ? (tail.length() > 0 ? tag+":" : tag+"") : "";
-                if (tail.length() > 0) tail = "{" + tail + "}";
-                return head + tail;
-            } finally {
-                rep = false;
             }
+            String tail = ret.toString().trim();
+            String head = (tag!=null && !tag.toString().equals("")) ? (tail.length() > 0 ? tag+":" : tag+"") : "";
+            if (tail.length() > 0) tail = "{" + tail + "}";
+            return head + tail;
         }
     }
 
 
     // Ref //////////////////////////////////////////////////////////////////////////////
 
-    static abstract class IterableForest<T> extends Forest<T> implements Iterable<Forest.Body<T>> {
+    private static abstract class IterableForest<T> extends Forest<T> implements Iterable<Forest.Body<T>> {
         public abstract Iterator<Forest.Body<T>> iterator();
     }
 
@@ -154,7 +143,7 @@ public abstract class Forest<T> {
             HashSet<Tree<T>> ret = new HashSet<Tree<T>>();
             for(Body<T> b : results)
                 ret.addAll(b.expand(toss, new ArrayList<Tree<T>>(), 0, new HashSet<Tree<T>>()));
-            if (toss && ret.size() > 1) throw new Parser.Ambiguous(this);
+            if (toss && ret.size() > 1) throw new Ambiguous(this);
             return ret;
         }
         
@@ -184,6 +173,5 @@ public abstract class Forest<T> {
     // Statics //////////////////////////////////////////////////////////////////////////////
 
     private static Tree[] tree_hint = new Tree[0];
-    private static Body[] body_hint = new Body[0];
     private static final Forest[] emptyForestArray = new Forest[0];
 }