2009-12-23 55 views
10

我正在創建一棵樹來表示一種簡單的語言。我非常熟悉抽象語法樹,並且已經開發了用於在C++中構建和使用它們的框架。是否有一個標準的Python庫來指定或操縱任意的AST?如果不這樣做,是否有一個樹庫可用於同一目的?用於在Python中編程抽象語法樹的庫

請注意,我不操縱Python AST,所以我認爲AST模塊並不適合。

回答

7

AST在Python中實現起來非常簡單。例如,對於我的pycparser項目(Python中完整的C語言分析器),我已經基於從Python模塊中借鑑的想法實現了AST。各種AST節點在YAML配置文件中指定,並且我爲Python中的這些節點自己生成Python代碼。

+0

相當不錯的。我所希望的東西已經很好地抽象成庫,文檔等(沒有進攻)。我的語法只有6種,所以它比較直接地寫它o我自己。我只是認爲可能有一個標準的圖書館人使用。 – 2009-12-23 03:57:48

+0

@Paul,如果你想一想,使用AST的最好方法是爲每個節點類型定義一個類。這是後來遍歷樹的最多態和最乾淨的方式(使用NodeVisitor)。所以,你必須寫這些類。考慮到Python中AST很少需要代碼,我懷疑這裏需要一個庫 – 2009-12-23 04:12:15

+0

@AndersonGreen:謝謝,刷新主鏈接並刪除其他鏈接 – 2013-07-15 03:24:51

0

如果您將語法元素表示爲pyparsing中的表達式,則可以將分析操作附加到每個表達式,該表達式將返回包含解析器特定類型中解析的標記的類實例。在pyparsing wiki上有幾個例子說明了這種技術(invRegex.py,simpleBool.pyevalArith.py)。 (這些語法都使用內置operatorPrecedence,它可以掩蓋一些語法結構,但

1

pyast是構建聲明抽象語法樹包。