public void addEpsilon(int source, int destination) { try { checkState(source, destination); } catch (StateNotInAutomatonException e) { // LOGGER.warn("Unable to add epsilon transition, a state is not in the automaton : " + e); } State s = states.get(source); State d = states.get(destination); ArrayList<StatePair> pairs = new ArrayList<>(); pairs.add(new StatePair(s, d)); this.representedBy.addEpsilons(pairs); }
for (State p : initials) if (a.initial != p) pairs.add(new StatePair(a.initial, p)); a.addEpsilons(pairs); a.initial.addTransition(new Transition('0', a.initial));
LinkedList<StatePair> worklist = new LinkedList<StatePair>(); HashSet<StatePair> visited = new HashSet<StatePair>(); StatePair p = new StatePair(a1.initial, a2.initial); worklist.add(p); visited.add(p); max1 = Character.MIN_VALUE; StatePair q = new StatePair(t1[n1].to, t2[n2].to); if (!visited.contains(q)) { worklist.add(q);
State s = new State(); c.initial = s; StatePair p = new StatePair(s, a1.initial, a2.initial); worklist.add(p); newstates.put(p, p); Transition[] t1 = transitions1[p.s1.number]; for (int n1 = 0; n1 < t1.length; n1++) { StatePair q = new StatePair(t1[n1].to, p.s2); StatePair r = newstates.get(q); if (r == null) { StatePair q = new StatePair(p.s1, t2[n2].to); StatePair r = newstates.get(q); if (r == null) {
p.transitions.add(new Transition((char)(c + 1), t.max, t.to)); if (s.length() == 0) epsilons.add(new StatePair(p, t.to)); else { State q = p;
addepsilon = true; if (addepsilon) epsilons.add(new StatePair(s, t.to));
static Automaton inverseAutomaton(final Automaton automaton) { final Map<State, State> stateMapping = new HashMap<>(); for (final State state: automaton.getStates()) { stateMapping.put(state, new State()); } for (final State state: automaton.getStates()) { for (final Transition transition: state.getTransitions()) { final State invDest = stateMapping.get(state); final State invOrig = stateMapping.get(transition.getDest()); invOrig.addTransition(new Transition(transition.getMin(), transition.getMax(), invDest)); } } final Automaton inverseAutomaton = new Automaton(); stateMapping.get(automaton.getInitialState()).setAccept(true); final State initialState = new State(); inverseAutomaton.setInitialState(initialState); final List<StatePair> epsilons = new ArrayList<>(); for (final State acceptState: automaton.getAcceptStates()) { final State invOrigState = stateMapping.get(acceptState); final StatePair statePair = new StatePair(initialState, invOrigState); epsilons.add(statePair); } inverseAutomaton.addEpsilons(epsilons); return inverseAutomaton; }
LinkedList<StatePair> worklist = new LinkedList<StatePair>(); HashMap<StatePair, StatePair> newstates = new HashMap<StatePair, StatePair>(); StatePair p = new StatePair(c.initial, a1.initial, a2.initial); worklist.add(p); newstates.put(p, p); for (int n2 = b2; n2 < t2.length && t1[n1].max >= t2[n2].min; n2++) if (t2[n2].max >= t1[n1].min) { StatePair q = new StatePair(t1[n1].to, t2[n2].to); StatePair r = newstates.get(q); if (r == null) {