Packrat parser combinators