An Incremental Approach to Compiler Construction (2006) [pdf]
I find it a little amusing that it claims "toy compilers are too simplistic and do not prepare the novice compiler writer to construct a useful compiler", and then chooses Scheme, effectively bypassing the whole process of parsing... which IMHO is half the fun of writing a compiler.<p>Seeing the elegance of recursive descent (and refactoring it into table-driven operator-precedence) and how it can turn recursive structures like expressions and statement blocks into linear sequences of instructions is something I think everyone writing a compiler should experience.<p>However, I agree with an incremental approach, and that is nothing new; personally I think Jack Crenshaw's tutorial series (started in 1988) is one of the best:<p><a href="http://compilers.iecc.com/crenshaw/" rel="nofollow">http://compilers.iecc.com/crenshaw/</a> (original 68k version)<p><a href="http://www.pp4s.co.uk/main/tu-trans-comp-jc-intro.html" rel="nofollow">http://www.pp4s.co.uk/main/tu-trans-comp-jc-intro.html</a> (x86 version)<p>It's interesting to note that Jack doesn't specialise in compilers, nor computer science for that matter, yet his explanations are far clearer to me than many of those who do.