Writing an interpreter is an amazing exercise in defensive programming. There are a *lot* of things that can go wrong.