Let’s Build a Compiler (1995)
Dated, but simple, and more importantly, concrete, using almost no abstractions (like lex and yacc), so there's no magic. Since the compiler described is for a subset of Pascal, and the compiler is itself written in Pascal, even the magic of the compiler itself is explained away.This series is a large part of how I got started in the compiler business; and today I help maintain probably the most used Pascal compiler, in Delphi.If anyone is interested in actually following along, TP 5.5 is freely available, though you'll need DosBox or similar if you're not running a 32-bit install of Windows:http://edn.embarcadero.com/article/20803