Excluding external dependencies, PyDSL implements 4 parsers:

1.Backtracing Recusive Descent Parser

It attempts every possible recursion and returns every valid parse tree. It supports the Null symbol, generates errors reports for the validator. It doesn’t support left recursion

https://github.com/nesaro/pydsl/blob/master/pydsl/Parser/RecursiveDescent.py

2.Weighted Backtracing Recusive Descent Parser

A small optimization on top of the Backtracing Recusive Descent Parser. It attempts to consume symbols closer to the leaf nodes first. https://github.com/nesaro/pydsl/blob/master/pydsl/Parser/Weighted.py

3. LR0 Parser

First attempt to implement a bottom up parser supporting grammar/alphabet recursion. It can deal with left recursion, but it has no support for error generation or Null symbols

https://github.com/nesaro/pydsl/blob/master/pydsl/Parser/LR0.py

4. LL1 Recursive Descent Parser

A simpler implementation of a Recursive Descent Parser based on the Language implementation patterns. It doesn’t support null symbol, left recursion or error generation

https://github.com/nesaro/pydsl/blob/master/pydsl/Parser/RecursiveDescent.py

I think a LLK Recursive descent parser is the next one to implement so I can make the basic calculator implementation work.