Writing Compilers and Interpreters by Ronald Mak