I’m writing a (entirely online for free) book on implementing languages. I’m publishing each chapter as I finish them. The next one is up now. It’s about how to implement syntax trees, the internal structure the parser creates and the interpreter uses.
But, in the process, we also go over formal grammars, a little metaprogramming, the Visitor pattern, the expression problem, and some of the differences between object-oriented and functional programming.