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; /** * Removes states that neither accessible nor coaccessible. * * @author nono * @version $Id: Pruner.java 2 2006-08-24 14:41:48Z oqube $ */ public class Pruner implements UnaryTransformation { public Automaton transform(Automaton a) { Map conversion = new HashMap() ; Iterator i = a.accessibleAndCoAccessibleStates().iterator(); Automaton b = new Automaton() ; while(i.hasNext()) { State e = (State) i.next() ; conversion.put(e , b.addState(e.isInitial() , e.isTerminal())) ; } i = a.delta().iterator(); while(i.hasNext()) { Transition t = (Transition) i.next() ; State bs = (State) conversion.get(t.start()) ; State be = (State) conversion.get(t.end()) ; if(bs == null || be == null) continue; try { b.addTransition(new Transition( bs, t.label() , be)) ; } catch (NoSuchStateException x) {} } return b ; } }