Untitled
unknown
java
3 years ago
1.7 kB
4
Indexable
// new DFSM set-up Set<State> finalStates = new HashSet<State>(); State initialState; // = new IdentifiedState(State.generateIdFromMap(currStateMap)); //states.add(initialState); Set<Transition> transitions = new HashSet<Transition>(); Set<State> acceptingStates = new HashSet<State>(); //Alphabet alphabet = this.alphabet; HashMap<State, Set<State>> epsilonTransitions = new HashMap<State, Set<State>>(); for (State s: states) epsilonTransitions.put(s, findEpsilonTransitions(s)); Queue<Set<State>> newStates = new LinkedList<Set<State>>(); Set<State> currStateMap = epsilonTransitions.get(this.initialState); newStates.add(currStateMap); initialState = new IdentifiedState(State.generateIdFromMap(currStateMap)); finalStates.add(initialState); while (!newStates.isEmpty()) { // Translate current state epsilon transition group to actual state group // the actual state group is a new state in the DFSM. Set<State> ns =newStates.poll(); for (Character c: alphabet) { Set<State> stateGroup = new HashSet<State>(); for (State s: ns) { this.transitions.at(s, c).forEach(st->epsilonTransitions.get(st).forEach( state -> stateGroup.add(state))); } State from = new IdentifiedState(State.generateIdFromMap(ns)); State to = new IdentifiedState(State.generateIdFromMap(stateGroup)); if(finalStates.add(from)) newStates.add(stateGroup); finalStates.add(to); transitions.add(new Transition(from, c, to)); this.acceptingStates.forEach(ac -> { if (ns.contains(ac)) acceptingStates.add(from); if (stateGroup.contains(ac)) acceptingStates.add(to); }); } }
Editor is loading...