Introduction to Automata Theory Languages, and Computation - John E. Hopcroft, Rajeev Motwani, Jeffrey D. Ullman (Pearson, 2011)