Grako takes a grammar in a variation of EBNF as input, and outputs a memoizing PEG/Packrat parser in Python.
Grako is different from other PEG parser generators in that the generated parsers use Python's very efficient exception-handling system to backtrack.