Small discussion and evaluation of different parsers.
Please keep wiki links as wiki links, use external links only if there is no existing page for the tool.
Name |
Grammar |
Module |
Python |
Comment |
shlex |
|
C |
|
included in distribution |
Plex |
|
C |
|
lexical analysis module for Python, foundation for Pyrex |
Spark |
GLR |
Python |
|
|
Yapps |
LL(1) |
Python |
1-any, 2-1.5+ |
|
PyLR - (broken link) |
LR(1) LALR(1) |
C |
|
|
kwParsing |
|
|
|
|
PyBison |
|
C |
|
bison grammar with python code actions |
Trap |
LR |
|
1.5.1+ |
|
PLY |
SLR LALR(1) |
Python |
|
Python Lex-Yacc |
ToyParserGenerator |
|
|
2.2+ |
|
DParser |
GLR |
C |
2.2+ |
grammar in doc strings |
PyGgy |
GLR |
Python |
2.2.1 |
|
SimpleParse |
- |
|
2.0+ |
requires mxTextTools |
Martel |
|
Python |
2.0+ |
requires mxTextTools |
mxTextTools |
- |
C |
|
is not exactly a parser like we're used to, but it is a fast text-processing engine |
pyparsing |
|
Python |
2.2+ |
|
ANTLR |
LL1+ |
Python |
|
stand-alone tool in Java. Latest version can produce Python code |
Yappy |
LALR |
Python |
2.2+ |
|
ZestyParser |
|
Python |
|
Object-oriented, Pythonic parsing |
Parsing |
LR(1) |
Python |
2.5+ |
|
aperiot |
LL(1) |
Python |
|
uses separate grammar files |
yeanpypa |
|
Python |
|
inspired by pyparsing and boost::spirit |
Wisent |
LR(1) |
Python |
2.4+ |
|
RP |
na |
Python |
2.6+ |
Simple parser using rule defined in BNF format |
LEPL |
Any |
Python |
2.6+ |
Recursive descent with full backtracking and optional memoisation (which can handle left recursive grammars). So equivalent to GLR, but based on LL(k) core. |
For faster performance, one may use other parser generator systems and plug them in as modules.
For example:
Spirit (http://spirit.sourceforge.net/) framework for writing EBNF as C++ code
FlexBisonModule (http://www.crsr.net/Software/FBModule.html)
cocktail compiler tools approach
Example of such usage is SeeGramWrap available from Edward C. Jones Python page, which is a heavily revised and upgraded version of the ANTLR C parser that is in cgram (broken link). The lastest verson has been refactored to move some of the complexity from ANTLR to Python.
Martin von Loewis presented a paper at Python10, titled "Towards a Standard Parser Generator" that surveyed the available parser generators for Python.
Ned Batchelder maintains additional information on these and other parsers at Python Parsing Tools.
Complete online textbook, titled "Parsing: A Practical Guide".
EditText (2009-04-07 12:54:26由252-149-222-201编辑)