Strings, Languages, and Compilers (Compiler Construction Using Java, JavaCC, and Yacc, 2012)