Python中的词法分析、标记化和解析资源
有没有人能给我推荐一些关于用Python进行词法分析、解析和标记化的资源?
我正在对一个开源项目(hotwire)进行一些小改动,想对代码做一些修改,这段代码负责对输入的命令进行词法分析(lexes)、解析(parses)和标记化(tokenises)。因为这是实际运行的代码,所以它相对复杂,有点难以理解。
我之前没有接触过词法分析、解析和标记化的代码,所以我在想一个方法就是找一些相关的教程来学习。我希望能学到足够的知识,以便能理解我想修改的代码。有没有合适的资源呢?(最好是能在一个下午内完成,而不需要先买一本《龙书》来读……)
补充:(2008年10月7日)下面的回答都没有完全满足我的需求。虽然我可以用它们从零开始生成解析器,但我想学习如何从头开始写一个基本的解析器,而不是使用lex和yacc或类似的工具。这样我就能更好地理解现有的代码。
所以,有人能推荐一个教程,让我可以仅用Python从零开始构建一个基本的解析器吗?
8 个回答
19
对于中等复杂度的语法,PyParsing 非常出色。你可以直接在 Python 代码中定义语法,不需要生成额外的代码:
>>> from pyparsing import Word, alphas
>>> greet = Word( alphas ) + "," + Word( alphas ) + "!" # <-- grammar defined here
>>> hello = "Hello, World!"
>>>> print hello, "->", greet.parseString( hello )
Hello, World! -> ['Hello', ',', 'World', '!']
(这个例子来自 PyParsing 的主页)。
通过解析动作(当某个语法规则被触发时调用的函数),你可以直接把解析结果转换成抽象语法树,或者其他任何形式的表示。
还有很多辅助函数,可以帮助你处理一些常见的模式,比如运算符优先级、带引号的字符串、嵌套结构或者 C 风格的注释。