As you might expect, the 25 line number is if you suck all the comments out of the file. With the comments — and they are welcome — it is more like 140 lines of code. Although there’s not much there, it does follow what you’d expect for a traditional language translation system. That is, there’s a lexer, a parser, a parse tree, and parts of the code that interpret or compile (again, sort of) the code.
This probably isn’t practical as-is, but it would be hard to imagine an example that could be simpler to approach. Once you figure out how it works, you could go on to build your own languages. Sure, you would have to figure out a few things like how to best parse algebraic expressions and how to handle parse conflicts, but you’d have the core ideas under your belt.