finite state automaton