Symbolic dynamics and automata theory