Parse a given string according to a given grammar, starting from a given start non-terminal,
with a backtracking Packrat parser algorithm (like backtracking recursive descent, but with
linear performance in the length of the input).