Esrapy can parse pretty much any context-free grammar, including left-recursive
ones; can compile patterns (grammars) from textual or procedural descriptions;
unifies parsing and tokenizing so tokenization can be contextual; has support
for precedence (ambiguity resolution) and attributes (limited
context-sensitivity); can return "first match" or a forrest of all possible
parsings (for an ambiguous grammar); is very easy to use and results in very
readable applications; and is only about 600 lines of code (not counting
comments)--or only 450 if you don't need the textual compiler. Esrapy works as a
simple translator from a raw source text to a ...