Excellent text on demystifying programming languages and their implementations. The defining language is Scheme [SchemeLanguage], but the concepts are applicable across wide set of languages (in fact, in the first edition a series of transformations are shown that essentially generates AssemblyLanguage). Recently updated to a 2nd edition which unfortunately removes some of the more advanced material, but also makes the book more approachable.
Christopher T. Haynes was a coauthor on the second edition only. A third edition came out at the end of April 2008.