X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FUnion.java;h=474a5421a8e783eca00c22e9a8dbe9d5ab154120;hp=77a158181a309578ca9e6354ca54db520370d0d6;hb=4061f053ccd06b1e833c523b26001942e8c5afcd;hpb=75d0fa39d405292f4b831a6d1743f2aeea01ebd4 diff --git a/src/edu/berkeley/sbp/Union.java b/src/edu/berkeley/sbp/Union.java index 77a1581..474a542 100644 --- a/src/edu/berkeley/sbp/Union.java +++ b/src/edu/berkeley/sbp/Union.java @@ -1,3 +1,5 @@ +// Copyright 2006 all rights reserved; see LICENSE file for BSD-style license + package edu.berkeley.sbp; import edu.berkeley.sbp.util.*; import edu.berkeley.sbp.*; @@ -17,7 +19,7 @@ import java.lang.ref.*; */ public class Union extends Element implements Iterable { - private final String name; + private final String name; private final boolean synthetic; private boolean viewed = false; @@ -52,24 +54,32 @@ public class Union extends Element implements Iterable { /** adds an alternative */ public void add(Sequence s) { + /* + FIXME if (viewed) - throw new RuntimeException("attempt to add a Sequence to a Union that has already been examined"); + throw new RuntimeException("attempt to add a Sequence to a Union that has already been examined:\n "+this); + */ if (alternatives.contains(s)) return; alternatives.add(s); } + /** adds a one-element sequence */ + public void add(Element e) { + add(Sequence.create(e)); + } + // Epsilon Form ////////////////////////////////////////////////////////////////////////////// // FIXME - private Forest.Many epsilonForm = null; - Forest epsilonForm() { - if (epsilonForm != null) return epsilonForm; - epsilonForm = new Forest.Many(); + //private Forest.Many epsilonForm = null; + Forest epsilonForm(Input.Region loc) { + //if (epsilonForm != null) return epsilonForm; + Forest.Many epsilonForm = new Forest.Many(); for(Sequence s : this) { // FIXME FIXME FIXME if (new Walk.Cache().possiblyEpsilon(s)) - epsilonForm.merge(s.epsilonForm()); + epsilonForm.merge(s.epsilonForm(loc)); } return epsilonForm; } @@ -77,10 +87,9 @@ public class Union extends Element implements Iterable { // Display ////////////////////////////////////////////////////////////////////////////// - public String getName() { - if (name != null) return name; - return "(anon_union)"; - } + boolean isSynthetic() { return synthetic; } + String getName() { return name==null ? "(anon_union)" : name; } + public String toString() { viewed = true; if (name != null) return name;