Method: Kleene::NFA#reachable_states
- Defined in:
- lib/kleene/nfa.rb
#reachable_states(start_state) ⇒ Object
Returns a set of State objects which are reachable through any transition path from the NFA’s start_state.
216 217 218 219 220 221 222 223 224 225 226 |
# File 'lib/kleene/nfa.rb', line 216 def reachable_states(start_state) visited_states = Set.new() unvisited_states = Set[start_state] while !unvisited_states.empty? outbound_transitions = unvisited_states.flat_map {|state| @transitions[state]&.values&.flat_map(&:to_a) || Array.new } destination_states = outbound_transitions.map(&:to).to_set visited_states.merge(unvisited_states) # add the unvisited states to the visited_states unvisited_states = destination_states - visited_states end visited_states end |