標籤: Static Analysis

簡單認識程式語言中的抽象語法樹(AST)

程式語言計算機概論雜記

公司的Node.js專案在經過好幾年的需求迭代後多少會出現些bad smells,為了解決這些bad smells於是又誕生了一些偏門的寫法,但卻也換來目前開發上很難確認眾多變數中哪些變數會是undefined(對,我們的專案已經寫到連eslint的一些rule都認不得了)。因此最近在研究如何為專案的eslint增加客製化的rule,補上讓eslint去抓出偏門寫法中的undefined變數。

在做了些研究後,發現eslint在為某個檔案做靜態檢查時,會先將整份檔案的程式碼讀一遍,並且建立抽象語法樹(Abstract Syntax Tree),然後透過遍歷這棵樹的操作去抓出沒有符合rule的地方。

其實不只是eslint,所有編譯器、直譯器在拿到一份程式碼時第一步也是先建立抽象語法樹,所以今天這篇要來簡單介紹什麼是抽象語法樹(Abstract Syntax Tree),或簡稱AST。