Why the cache? It leads to a complicated parse tree but it doesn't seem like a lot of work to just parse it in a simpler way each time. I'd like to hear some justification.