Writing an Interpreter in Go https://amzn.to/2PA5LEh
Let's Build a Compiler https://compilers.iecc.com/crenshaw/
Awesome list of compiler resources https://github.com/aalhour/awesome-compilers
Personally I found the Nanopass approach much easier to understand because it breaks down the compilation process into lots of simple transformation steps: https://nanopass.org/