deterministic finite-state automaton