class Kleene::DFA

def next_state(from_state, input_token, token_index)

this function transitions from state to state on an input token
def next_state(from_state, input_token, token_index)
  transition = @transitions[from_state][input_token] || raise("No DFA transition found. Input token #{input_token} not in DFA alphabet.")
  # invoke the relevant transition callback function
  transition_callbacks[transition].try {|callback_fn| callback_fn.call(transition, input_token, token_index) }
  transition_callbacks_per_destination_state[transition.to].try {|callback_fn| callback_fn.call(transition, input_token, token_index) }
  transition.to
end