This is a really fun exercise, I recommend every programmer try it once. You can replace most of the tokenization code with re.Scanner[1], which also allows you to have strings without worrying about `code.split()` messing them up.[1] https://news.ycombinator.com/item?id=36517749 This seems great. When I read these kinds of explanations, it always strikes me how the way you're supposed to write a