package rationals.transformations; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import rationals.Automaton; import rationals.NoSuchStateException; import rationals.State; import rationals.Transition; /** * Compute the union of two automaton. * <ul> * <li>C = A + B</li> * <li>S(C) = S(A) U S(B)</li> * <li>S0(C) = S0(A) U SO(B)</li> * <li>T(C) = T(A) U T(B)</li> * <li>D(C) = D(A) U D(B)</li> * </ul> * @author nono * @version $Id: Union.java 2 2006-08-24 14:41:48Z oqube $ */ public class Union implements BinaryTransformation { public Automaton transform(Automaton a , Automaton b) { Automaton ap = (Automaton) a.clone() ; Map map = new HashMap() ; Iterator i = b.states().iterator() ; while(i.hasNext()) { State e = (State) i.next() ; map.put(e , ap.addState(e.isInitial() , e.isTerminal())) ; } i = b.delta().iterator() ; while(i.hasNext()) { Transition t = (Transition) i.next() ; try { ap.addTransition(new Transition( (State) map.get(t.start()) , t.label() , (State) map.get(t.end()))) ; } catch(NoSuchStateException x) {} } return ap ; } }