3

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

4

2 回答 2

3

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

您可以将(子)解析器的结果传递给 abritary callable,这对于 AST 生成非常有用(对于将数字文字转换为 Python 级别的数字对象也很有用)。这是一个递归下降解析器,所以你最好避免语法中的左递归(有记忆对象可以使左递归工作,但是“Lepl 对它们的支持历来是不可靠的(错误的)”)。

于 2011-05-26T17:37:10.117 回答
3

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

有关使用 Python 目标生成 AST 的 ANTLR 演示,请参阅ANTLR 获取和拆分词法分析器内容

于 2011-05-26T18:09:11.463 回答