class Kleene::DFA

def initialize(start_state, alphabet = DEFAULT_ALPHABET, transitions = Hash.new, dfa_state_to_nfa_state_sets = Hash.new, transition_callbacks = nil, origin_nfa: nil)

def initialize(start_state, alphabet = DEFAULT_ALPHABET, transitions = Hash.new, dfa_state_to_nfa_state_sets = Hash.new, transition_callbacks = nil, origin_nfa: nil)
  @start_state = start_state
  @current_state = start_state
  @transitions = transitions
  @dfa_state_to_nfa_state_sets = dfa_state_to_nfa_state_sets
  @alphabet = alphabet + all_transitions.map(&:token)
  @states = reachable_states(@start_state)
  @final_states = Set.new
  @nfa_state_to_dfa_state_sets = Hash.new
  @dfa_state_to_nfa_state_sets.each do |dfa_state, nfa_state_set|
    nfa_state_set.each do |nfa_state|
      dfa_state_set = @nfa_state_to_dfa_state_sets[nfa_state] ||= Set.new
      dfa_state_set << dfa_state
    end
  end
  @transition_callbacks = transition_callbacks || Hash.new
  @transition_callbacks_per_destination_state = Hash.new
  @origin_nfa = origin_nfa
  update_final_states
  reset_current_state
end