I can recommend the PJL book. I wrote a compiler with it (in 1989-1990, in Prolog), and the book is a very good introduction to the topic.
It can be dated (written in 1987, 30 years ago), but it still covers the basics very well. This, however, is completely focused on lazy languages like Haskell. Haskell did not exist at that time, and the book uses LML or Miranda, the predecessor language, but the languages are very close.
Leander conradie
source share