PLY is a straightforward lex/yacc implementation. Here is a list of its
* It is implemented entirely in Python.
* It uses LR-parsing which is reasonably efficient and well suited for larger
* PLY provides most of the standard lex/yacc features including support
for empty productions, precedence rules, error recovery, and support
for ambiguous grammars.
* PLY is straightforward to use and provides very extensive error checking.
* PLY doesn't try to do anything more or less than provide the basic lex/yacc
functionality. In other words, it's not a large parsing framework or a
component of some larger system.
Python 3 version.