refactoring to eliminate Token.result()
[sbp.git] / src / edu / berkeley / sbp / Union.java
index 1d4841f..8780d9e 100644 (file)
@@ -16,7 +16,17 @@ public class Union extends Element implements Iterable<Sequence> {
 
     public Iterator<Sequence> iterator() { return alternatives.iterator(); }
 
-    void reachable(HashSet<Sequence.Position> h) { for(Sequence s : alternatives) s.reachable(h); }
+    Topology toAtom() {
+        if (alternatives.size()==0) throw new RuntimeException("cannot build an Atom from a Union with no productions");
+        Topology ret = null;
+        for(Sequence s : this) {
+            Topology a = s.toAtom();
+            if (ret==null) ret = a;
+            else           ret = ret.union(a);
+        }
+        if (ret==null) throw new RuntimeException("confusion on " + this);
+        return ret;
+    }
 
     /** adds an alternative */
     public void add(Sequence s) { alternatives.add(s); }