X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FUnion.java;h=b690450eb60823bcbf1ceb8c996d070bf001458c;hp=db0db7dca1a322625895ee88f6d338a7934623ba;hb=c366dacc334fe2e35835164f5a37d3eebb2ca6d5;hpb=0516ea34996c86664928ef948013b749876b87ec diff --git a/src/edu/berkeley/sbp/Union.java b/src/edu/berkeley/sbp/Union.java index db0db7d..b690450 100644 --- a/src/edu/berkeley/sbp/Union.java +++ b/src/edu/berkeley/sbp/Union.java @@ -15,23 +15,28 @@ public class Union extends Element implements Iterable { private final List alternatives = new ArrayList(); public Iterator iterator() { return alternatives.iterator(); } - - void reachable(HashSet h) { for(Sequence s : alternatives) s.reachable(h); } + public boolean contains(Sequence s) { return alternatives.contains(s); } 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.dup(); - else ret = ret.union(a.dup()); + 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); } + public void add(Sequence s) { + alternatives.add(s); + if (/*!synthetic &&*/ shortForm!=null + //&& Character.isUpperCase(shortForm.charAt(0)) + ) + s.setName(toString()); + } /** * Since every cycle in a non-degenerate grammar contains at