2011-05-26 55 views
3

我正在尋找一個合理複雜的語言(類似於Python本身的複雜性)的解析器生成器,它與Python3一起工作。如果它可以自動生成一個AST,這將是一個獎金,但我很好,如果它只是在解析時調用規則。我沒有特別的要求,也不必非常高效/快速。Python3語法分析器生成器

回答

3

LEPL不完全是一個解析器生成器 - 它更好!解析器在Python代碼中定義,並在運行時構建(因此效率較低,但使用起來更容易)。它使用運算符重載來構造一個相當可讀的DSL。諸如c = a & b | b & c爲BNF c := a b | b c.

您可以將(子)解析器的結果傳遞給abritary callable,這對AST生成非常有用(對於將數字文字轉換爲Python級別的數字對象也很有用)。這是一個遞歸下降解析器,所以你最好避免語法中的左遞歸(有可以使左遞歸工作的memoization objets,但是"Lepl's support for them has historically been unreliable (buggy)")。

+2

不幸的是,LEPL已經[已停用](http://www.acooke.org/lepl/discontinued.html)。 – kennytm 2012-12-25 20:43:30

3

ANTLR可以在Python中生成詞法分析器和/或解析器。您也可以使用它來創建AST和類似迭代器的結構來執行AST(稱爲樹語法)。

請參閱ANTLR get and split lexer content瞭解ANTLR演示,該演示使用Python目標產生AST。

+0

ANTLR的python支持庫聲稱是基於2.x的,它是否適用於Python3? – Anteru 2011-05-27 10:58:58

+0

@Anteru。從未嘗試過版本3. – 2011-05-27 13:42:07

+0

今天我恐怕它不能在Python 3中工作。 – rds 2011-11-10 14:44:28