The appendix (Converting Stack-Based OpCodes into Register Operations) is the most interesting part to me. Targeting a stack machine is much easier when writing a compiler for the first time, but real-world machines are generally register based.
I couldn't find the authors' logic in a cursory look at the source code. Does anyone know where it actually is?