Memoize<T>(Parser<T>) ➜ Parser<T>

Transforms a parser into a packrat parser. The resulting parser does not necessarily support left recursion.

DirectLeftRecursion<T>(Parser<T>) ➜ Parser<T>

Transforms a parser into a packrat parser, supporting direct left recursion only. The implementation is based on this paper.

LeftRecursion<T>(Parser<T>) ➜ Parser<T>

Transforms a parser into a packrat parser, supporting direct or indirect left recursion. The implementation is based on this paper.