【问题标题】:Python3 parser generatorPython3 解析器生成器
【发布时间】:2011-05-26 17:29:09
【问题描述】:

我正在寻找一种适用于 Python3 的相当复杂的语言(与 Python 本身的复杂性相似)的解析器生成器。如果它可以自动生成 AST,这将是一个奖励,但如果它只是在解析时调用规则,我很好。我没有特殊要求,也不必非常高效/快速。

【问题讨论】:

    标签: parsing python-3.x parser-generator


    【解决方案1】:

    LEPL 不完全是解析器生成器——它更好!解析器在 Python 代码中定义并在运行时构建(因此效率低下,但更易于使用)。它使用运算符重载来构造一个可读性很强的 DSL。 BNF c := a b | b c.c = a & b | b & c 之类的东西。

    您可以将(子)解析器的结果传递给 abritary callable,这对于 AST 生成非常有用(对于将数字文字转换为 Python 级别的数字对象也很有用)。这是一个递归下降解析器,所以你最好避免语法中的左递归(有记忆对象可以使左递归工作,但是"Lepl's support for them has historically been unreliable (buggy)")。

    【讨论】:

    【解决方案2】:

    ANTLR 可以在 Python 中生成词法分析器和/或解析器。您还可以使用它来创建 AST 和类似迭代器的结构来遍历 AST(称为树语法)。

    请参阅ANTLR get and split lexer content 了解使用 Python 目标生成 AST 的 ANTLR 演示。

    【讨论】:

    • ANTLR 的 python 支持库声称是基于 2.x 的,它是否适用于 Python3?
    • 在其首页上有一个 Linux 和一个 Mac 示例,并且不遗漏一个词为什么它不支持其他 85% 的计算机。此外,文档是付费软件。
    • @Nils,它的主页上还有一个 Windows 示例。当然,您可以购买一些书籍,但是有很多很好的在线资料可供您开始使用 ANTLR。
    • @Nils 开始页面的快速启动选项卡在右下角有3个小圆形按钮:第一个是OSX,第二个是Linux,第三个是Windows。你是对的,这已经一年多了。我不会就你提到的其他事情与你争论,因为在我看来,你并没有真正接受正常的讨论。并且将拼写错误的单词与代码质量联系起来,真的吗?我应该将您的视力质量与您的编码或研究技能进行比较吗?或者这也很愚蠢?
    猜你喜欢
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 2010-09-25
    • 1970-01-01
    相关资源
    最近更新 更多