Shallit J. A Second Course in Formal Languages and Automata Theory 2008