2011-03-19 52 views
2

我正在写一个应用程序,它读取当前有自己的文法的输入文件,该文件由lex/yacc处理。Python解析器模块教程

我正在修改这个,以便使这个输入文件成为一个Python脚本,而且想知道是否有人能指点我的初学者指南,以在Python中使用解析器模块。我对Python本身相当陌生,但已经在网上教程中找到了相当一部分内容。

从我研究的内容来看,我知道有些选项(如pyparsing)可以让我保留现有的语法并使用Pyparsing作为lex/yacc的替代品。不过,我很想了解更多的Python解析器模块并探讨其可行性。

谢谢。

回答

2

您的意思是the parser module?它只是用于Python源代码的解析器,而不是通用的解析器。你不能用它来解析别的东西。

+0

是的,这就是我所指的。我正在考虑让输入文件到我的应用程序是一个python文件。所以语法是python语言,这个解析器模块会解析它。我只是想知道这是否有一个更友好的教程。 – endbegin 2011-03-19 02:17:45

+0

在这种情况下,您可能会发现内置的ast模块更易于使用。 – 2011-03-19 02:26:39

+0

感谢您的回复。你能推荐一个关于在Python中使用AST模块的初学者级别的教程吗?我试图搜索网页,但没有看到具体的东西。 – endbegin 2011-03-22 20:18:55

2

正如Jochen所说,perser模块用于解析Python代码。我认为你最好检查出Ned Batchelder's list of parsers。 PyParsing与Lex和Yacc完全不同,所以我不确定为什么你认为你可以保留现有的语法和词法分析器。更好的选择可能是David Beazley的PLY工具包。它很稳定,并且有很好的文档。

+0

我想远离lex/yacc的一般方式。我刚刚在ast模块上看到您的建议,并会尝试找到一个友好的教程。谢谢。 – endbegin 2011-03-19 02:40:55

1

我建议你看看https://github.com/erezsh/lark

这对于初来乍到的解析是伟大的:它可以分析所有的上下文无关文法,它会自动建立一个AST(与线&列号),它接受的语法EBNF格式,被认为是标准格式,非常易于编写。