"Let's build a compiler" was already suggested. There is a "modernized" version using Haskell instead of Turbo Pascal: http://alephnullplex.appspot.com/blog/view/2010/01/12/lbach-1-introduction

Keeping with Haskell, there is a very instructive Scheme interpreter which could give further ideas: [Write Yourself a Scheme in 48 Hours][1]


 [1]: http://jonathan.tang.name/files/scheme_in_48/tutorial/overview.html