finite-state automaton