Python中的词法分析、标记化和解析资源

65 投票
8 回答
43981 浏览
提问于 2025-04-11 09:15

有没有人能给我推荐一些关于用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 风格的注释。

33

这个问题虽然有点老了,但我觉得我的回答可能会帮助那些想学习基础知识的人。我发现这个资源非常不错。它是用Python写的一个简单解释器,没有使用任何外部库。所以这对想了解解析、词法分析和标记化内部工作原理的人来说非常有帮助:

“从零开始用Python写一个简单的解释器”:第一部分第二部分第三部分,和第四部分

38

我很高兴能使用PLY。它是一个用纯Python写的Lex和Yacc的实现,里面有很多小功能,让它变得很符合Python的风格,也很容易上手。因为Lex和Yacc是最流行的词法分析和语法分析工具,很多项目都在用,所以PLY可以借助这些前人的经验。网上有很多关于Lex和Yacc的知识,你可以很方便地把这些知识应用到PLY上。

PLY还有一个不错的文档页面,里面有一些简单的例子,可以帮助你快速入门。

如果你想了解更多Python的解析工具,可以看看这个链接

撰写回答