PLY is a parsing tool written purely in Python.
It is, in essence, a re-implementation of Lex and Yacc originally in C-language.
PLY uses the same LALR parsing technique as Lex and Yacc.
[1] Implemented in Python, it has almost all the features provided by Lex and Yacc.
It includes support for empty productions, precedence rules, error recovery, and ambiguous grammars.