首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用哪个工具来解析Python中的编程语言?

使用哪个工具来解析Python中的编程语言?
EN

Stack Overflow用户
提问于 2011-07-04 21:09:28
回答 9查看 19.7K关注 0票数 37

你能推荐哪种Python工具来解析编程语言?它应该允许源代码中的语言语法的可读性表示,并且它应该能够扩展到复杂的语言(具有像Python本身这样复杂的语法的东西)。

当我搜索时,我主要找到的是pyparsing,我将对其进行评估,但我当然对其他替代方案感兴趣。

编辑:如果它附带良好的错误报告和附加到语法树元素的源代码位置,则会获得加分。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-07-07 22:30:07

我真的很喜欢pyPEG它的错误报告不是很友好,但它可以将源代码位置添加到AST。

pyPEG没有单独的词法分析器,这会使解析Python语言本身变得困难(我认为CPython可以识别词法分析器中的缩进和缩进),但我已经使用pyPEG为C#的子集构建了一个解析器,工作出奇地少。

改编自fdik.org/pyPEG/的示例:一种简单的语言,如下所示:

代码语言:javascript
复制
function fak(n) {
    if (n==0) { // 0! is 1 by definition
        return 1;
    } else {
        return n * fak(n - 1);
    };
}

该语言的pyPEG解析器:

代码语言:javascript
复制
def comment():          return [re.compile(r"//.*"),
                                re.compile("/\*.*?\*/", re.S)]
def literal():          return re.compile(r'\d*\.\d*|\d+|".*?"')
def symbol():           return re.compile(r"\w+")
def operator():         return re.compile(r"\+|\-|\*|\/|\=\=")
def operation():        return symbol, operator, [literal, functioncall]
def expression():       return [literal, operation, functioncall]
def expressionlist():   return expression, -1, (",", expression)
def returnstatement():  return keyword("return"), expression
def ifstatement():      return (keyword("if"), "(", expression, ")", block,
                                keyword("else"), block)
def statement():        return [ifstatement, returnstatement], ";"
def block():            return "{", -2, statement, "}"
def parameterlist():    return "(", symbol, -1, (",", symbol), ")"
def functioncall():     return symbol, "(", expressionlist, ")"
def function():         return keyword("function"), symbol, parameterlist, block
def simpleLanguage():   return function
票数 34
EN

Stack Overflow用户

发布于 2017-03-17 01:37:22

我建议您查看我的库:https://github.com/erezsh/lark

它可以解析所有上下文无关的语法,自动构建AST (带有行号和列号),并接受EBNF格式的语法,这被认为是标准格式。

它可以很容易地解析像Python这样的语言,而且比任何其他用Python编写的解析库都要快。

票数 16
EN

Stack Overflow用户

发布于 2011-07-11 20:40:57

pyPEG (我编写的工具)有一个用于错误报告的跟踪工具。

只需设置pyPEG.print_trace = True,pyPEG就会给你一个完整的跟踪里面发生了什么。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6571964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档