recursive descent parser generator written in Python that takes lexers and grammars as input