我正在寻找一个解析器生成器,用于一个相当复杂的语言(类似于Python本身的复杂性),它可以与Python3一起使用。如果它可以自动生成AST,这将是一个奖励,但我很好,如果它只是在解析时调用规则。我没有特殊要求,也没有必要非常高效/快速。
答案 0 :(得分:3)
LEPL并不完全是解析器生成器 - 它更好!解析器在Python代码中定义并在运行时构造(因此效率低,但更容易使用)。它使用运算符重载来构造一个非常易读的DSL。对于BNF c = a & b | b & c
而言c := a b | b c.
之类的事情。
您可以将(子)解析器的结果传递给abritary callable,这对于AST生成非常有用(对于将数字文字转换为Python级数字对象也很有用)。它是一个递归下降解析器,所以你最好避免语法中的左递归(有可以使左递归工作的memoization objets,但是"Lepl's support for them has historically been unreliable (buggy)")。
答案 1 :(得分:3)
ANTLR可以在Python中生成词法分析器和/或解析器。您还可以使用它来创建AST和类似迭代器的结构来遍历AST(称为树语法)。
有关使用Python目标生成AST的ANTLR演示,请参阅ANTLR get and split lexer content。