Try to use cached functions where possible for performance.
Use this.anything() directly rather than going via _apply as we don't have to worry about left-recursion and don't benefit from the memoisation.
Add an optimiser to turn this._apply("anything") into this.anything()