1. 程式人生 > >AST 模組:用 Python 修改 Python 程式碼

AST 模組:用 Python 修改 Python 程式碼

本文介紹如何利用Python的AST模組得到或者修改python虛擬機器編譯過程中生成的語法樹

CPython 的編譯過程

http://pyimg.fanhe.org/pep339.png

在開始之前,我們應該先看看 CPython 的編譯過程,這個過程在 PEP 339 中有詳細的描述。

當然,在讀這篇文章的時候,你並不需要對這個步驟有很深入的理解,不過這可以幫助你對整個過程有一個大體的瞭解。

首先,編譯器會根據原始碼生成一棵語法分析樹 (Parse Tree),隨後,再根據語法分析樹建立抽象語法樹 (AST, Abstract Syntax Tree)。從 AST 中可以生成出控制流圖 (CFG, Control Flow Graph),最後再將控制流圖編譯為程式碼物件 (Code Object)。

圖中標藍的部分就是 AST 這一步,也就是我們今天所關注的部分。Python 從 2.6 開始就提供了現在這樣的 ast 模組,它提供了一種訪問和修改 AST 的簡單方式。

通過這個,我們可以從 AST 中生成程式碼物件,也可以出於某些原因,根據修改過的 AST 重新生成原始碼。