Java parser combinator framework supporting left recursion