PLY is a Python-only implementation of the popular compiler construction
tools lex and yacc. The implementation borrows ideas from a number of
previous efforts; most notably John Aycock's SPARK toolkit. However,
the overall flavor of the implementation is more closely modeled after
the C version of lex and yacc. The other significant feature of PLY is
that it provides extensive input validation and error reporting--much
more so than other Python parsing tools.