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