AST
-
抽象語法樹(Abstract Syntax Tree)也稱為AST語法樹,指的是源代碼語法所對應的樹狀結構腾降。也就是說贱鄙,一種編程語言的源代碼,通過構建語法樹的形式將源代碼中的語句映射到樹中的每一個節(jié)點上碍论。
示意圖.png -
而在JavaScript中,JS引擎會把源代碼轉換成AST柄慰,解釋器再基于AST生成字節(jié)碼鳍悠,提供給計算機。順便說一句坐搔,JS引擎中還有優(yōu)化編譯器藏研,它會花費更多的時間處理AST,生成優(yōu)化后的機械碼(比解釋器interpreter生成的字節(jié)碼更高效)
image.png 程序代碼本身可以被映射成為一棵語法樹概行,而通過操縱語法樹蠢挡,我們能夠精準的獲得程序代碼中的每一個精確的節(jié)點。例如聲明語句凳忙,賦值語句业踏,而這是用正則表達式所不能準確體現的地方。esprima提供了一個在線解析JavaScript代碼的地址涧卵,可以清楚地觀察到js代碼被轉化為JSON格式勤家,由一個個具體的符號組成
AST Explorer 也可以讓你對 AST 節(jié)點有一個更好的感性認識:AST會把代碼本身(body)和注釋(comments)分開,然后代碼語句也會進行區(qū)別:函數聲明柳恐、變量聲明伐脖、表達式語句等等。
作用
-
抽象語法樹的作用非常的多乐设,比如編譯器讼庇、IDE、壓縮優(yōu)化代碼等伤提。在JavaScript中,雖然我們并不會常常與AST直接打交道认烁,但卻也會經常的涉及到它肿男。例如使用UglifyJS來壓縮代碼或babel轉換代碼,實際這背后就是在對JavaScript的抽象語法樹進行操作却嗡。
示意圖2.png