当前位置:  开发笔记 > 编程语言 > 正文

python中lexing,tokenising和parsing的资源

如何解决《python中lexing,tokenising和parsing的资源》经验,为你挑选了5个好方法。

人们可以指向我使用Python进行lexing,解析和标记的资源吗?

我的一个开源项目(做一个小的黑客热线),并希望做的是代码的一些变化LEXES,分析和tokenises进入它的命令.由于它是真正的工作代码,它相当复杂,有点难以解决.

我之前没有处理过lex/parse/tokenise的代码,所以我认为一种方法是在这个方面完成一两个教程.我希望学到足够的知识来浏览我真正想要改变的代码.那里有什么合适的吗?(理想情况下,它可以在一个下午完成而无需先购买和阅读龙书......)

编辑:(2008年10月7日)以下所有答案都没有给出我想要的东西.有了它们,我可以从头开始生成解析器,但我想学习如何从头开始编写自己的基本解析器,而不是使用lex和yacc或类似的工具.完成后,我可以更好地理解现有代码.

那么有人可以指向我一个教程,我可以从头开始构建一个基本的解析器,只使用python?



1> Eli Bendersk..:

我是PLY的快乐用户.它是Lex&Yacc的纯Python实现,具有许多细小的细节,使其非常Pythonic且易于使用.由于Lex&Yacc是最受欢迎的lexing和解析工具,并且用于大多数项目,PLY具有站在巨人肩膀上的优势.Lex&Yacc在线存在大量知识,您可以自由地将其应用于PLY.

PLY还有一个很好的文档页面,其中包含一些简单的示例,可帮助您入门.

有关许多Python解析工具的列表,请参阅此内容.



2> Saad..:

这个问题很老了,但也许我的回答可以帮助那些想学习基础知识的人.我发现这个资源非常好.它是一个用python编写的简单解释器,不使用任何外部库.所以这将有助于任何想要了解解析,lexing和tokenising的内部工作的人:

"Python中从头开始的简单解释:" 第1 部分,第2 部分, 第3 部分和第4部分.


非常好的系列文章,专注于目标而不是工具!

3> Torsten Mare..:

对于中等复杂的语法,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样式注释.


对于它的价值,我总是遇到PyParsing问题.我试过几次使用它并且从未完全满意结果(例如,它需要很长时间,很难调试,需要更多代码然后我预期等).我不能说这是因为我的无知还是PyParsing的失败,尽管......

4> nilamo..:

pygments是用python编写的源代码语法荧光笔。它具有词法分析器和格式化程序,并且看一下源可能会很有趣。



5> Tony Arkles..:

以下是一些入门指南(大致从最简单到最复杂,最小到最强大):

http://en.wikipedia.org/wiki/Recursive_descent_parser

http://en.wikipedia.org/wiki/Top-down_parsing

http://en.wikipedia.org/wiki/LL_parser

http://effbot.org/zone/simple-top-down-parsing.htm

http://en.wikipedia.org/wiki/Bottom-up_parsing

http://en.wikipedia.org/wiki/LR_parser

http://en.wikipedia.org/wiki/GLR_parser

当我学到这些东西时,那是一学期的400级别大学课程。我们做了很多任务,需要手工解析。如果您想真正了解幕后情况,我建议您使用相同的方法。

这不是我所用的书,但相当不错:《编译器设计原理》。

希望这足以让您入门:)


这如何帮助某人知道所有这些东西,但是在python中寻找实现呢?
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有