【发布时间】:2011-05-26 17:29:09
【问题描述】:
我正在寻找一种适用于 Python3 的相当复杂的语言(与 Python 本身的复杂性相似)的解析器生成器。如果它可以自动生成 AST,这将是一个奖励,但如果它只是在解析时调用规则,我很好。我没有特殊要求,也不必非常高效/快速。
【问题讨论】:
标签: parsing python-3.x parser-generator
我正在寻找一种适用于 Python3 的相当复杂的语言(与 Python 本身的复杂性相似)的解析器生成器。如果它可以自动生成 AST,这将是一个奖励,但如果它只是在解析时调用规则,我很好。我没有特殊要求,也不必非常高效/快速。
【问题讨论】:
标签: parsing python-3.x parser-generator
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)")。
【讨论】:
ANTLR 可以在 Python 中生成词法分析器和/或解析器。您还可以使用它来创建 AST 和类似迭代器的结构来遍历 AST(称为树语法)。
请参阅ANTLR get and split lexer content 了解使用 Python 目标生成 AST 的 ANTLR 演示。
【讨论】: