I started working through Crafting Interpreters back in 2017, and did the first half of the book (decided to write the lox implementation in Scala instead of Java), and it completely demystified tokenizers/lexers/parsers/interpreters for me. They were something I thought of as this arcane art that only a certain kind of programmer could work on. Absolutely credit this to Nystrom's brilliant writing and depth of understanding of the topic.
I started writing the second interpreter in Rust, but life intervened and I didn't get far, and didn't finish it. I think it's time to get back to it!
Though this post is a few years old, I hadn't known he decided to turn it into a physical book. That's not really the best way I learn, I don't think, but I'm tempted to buy one just to have it, and to support the author.