python中用于词法分析、标记化和解析的资源

python中用于词法分析、标记化和解析的资源,python,parsing,resources,lex,Python,Parsing,Resources,Lex,人们能给我指一下有关Python词法分析、解析和标记化的资源吗 我正在对一个开源项目()进行一点黑客攻击,并希望对输入其中的命令的代码进行一些更改。因为它是真正的工作代码,所以它相当复杂,而且有点难 我以前没有编写过lex/parse/tokenise的代码,所以我想有一种方法可以通过一两个关于这方面的教程来实现。我希望能够学到足够的知识,来浏览我真正想要修改的代码。外面有什么合适的吗?(理想情况下,可以在一个下午完成,而不必先购买和阅读《龙之书》) 编辑:(2008年10月7日)下面的答案都不

人们能给我指一下有关Python词法分析、解析和标记化的资源吗

我正在对一个开源项目()进行一点黑客攻击,并希望对输入其中的命令的代码进行一些更改。因为它是真正的工作代码,所以它相当复杂,而且有点难

我以前没有编写过lex/parse/tokenise的代码,所以我想有一种方法可以通过一两个关于这方面的教程来实现。我希望能够学到足够的知识,来浏览我真正想要修改的代码。外面有什么合适的吗?(理想情况下,可以在一个下午完成,而不必先购买和阅读《龙之书》)

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


那么,有人能给我介绍一个教程吗?在这个教程中,我可以用python从头开始构建一个基本的解析器?

看看这个标准模块,并修改它的一个副本以匹配您在shell中使用的语法,这是一个很好的起点

如果您想要一个完整的词法分析/解析解决方案的所有功能,也可以生成python。

我建议,因为它是纯python,您不需要学习语法,但它没有广泛使用,并且文档相对较少。重量级的是ANTLR和PyParsing。ANTLR也可以生成java和C++解析器,而AST Walkes,但你必须学习什么是新语言。

< P>我是一个快乐的用户。这是一个Lex&Yacc的纯Python实现,有许多小细节,使它非常Pythonic且易于使用。由于Lex和Yacc是最流行的词法分析和解析工具,并且用于大多数项目,因此PLY具有站在巨人的肩膀上的优势。Lex&Yacc上有很多在线知识,您可以自由地将其应用于PLY

PLY还提供了一些简单示例,帮助您入门


有关大量Python解析工具的列表,请参阅。

是用Python编写的源代码语法高亮显示工具。它有lexer和formatter,查看源代码可能会很有趣。

对于中等复杂的语法来说,这是一个很好的选择。您可以直接在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导入单词alphas
>>>greet=Word(alphas)+“,“+Word(alphas)+”!“#>>hello=“你好,世界!”
>>>>打印hello,“->”,greet.parseString(hello)
你好,世界!->['Hello',','World','!']
(示例取自PyParsing主页)

使用解析操作(触发特定语法规则时调用的函数),可以将解析直接转换为抽象语法树或任何其他表示形式


有许多帮助函数封装了重复出现的模式,如操作符层次结构、带引号的字符串、嵌套或C风格的注释。

这里有一些东西可以帮助您入门(大致从最简单到最复杂,从最少到最强大):

当我学到这些东西时,是在一个为期一学期的400级大学课程中。我们做了很多作业,手工解析;如果你想真正了解引擎盖下发生了什么,我推荐同样的方法

这不是我用的那本书,但它很好


希望这足以让你开始:)

这个问题已经很老了,但也许我的回答会帮助那些想学习基础知识的人。我觉得这个资源非常好。它是一个用python编写的简单解释器,不使用任何外部库。因此,这将帮助任何想要了解解析、词法分析和标记化的内部工作的人:

“Python中从头开始的简单Intepreter:”,
,以及。

弗雷德里科·托马塞蒂(Frederico Tomassetti)对从BNF到二进制解密的所有相关内容都做了一个很好(但很短)的简要总结:

  • 词汇的
  • 解析器
  • 抽象语法树(AST),以及
  • 构造/代码生成器
他甚至提到了新的解析表达式语法(PEG)


我支持PLY的建议,它很棒。不管它值多少钱,我在PyParsing方面总是遇到麻烦。我试过几次使用它,但从未对结果感到完全满意(例如,它花费了很长时间,难以调试,需要比我预期的更多的代码,等等)。我不能说这是由于我的无知还是PyParsing的失败,但是…链接已经死了,如果你能更新它就太好了。这对那些了解所有这些东西但正在寻找python实现的人有什么帮助?非常好的一系列文章,重点放在目标而不是工具上!ANTLR链接已断开。我无法打开链接。