look no further than http://www.craftinginterpreters.com/
The usage of Java for this purpose is a bit... contrived, but it's not because the author doesn't know what he's doing, and following along in a different language that's better-suited to the task makes a good exercise for the reader