AST-抽象語法樹簡單介紹

一些絮絮叨叨:

有次在查babel的相關(guān)資料的時(shí)候翻到了AST這個(gè)陌生的詞匯,然后看到有些大佬在討論AST啥啥啥的亭饵,一看覺得有點(diǎn)意思休偶,就把相關(guān)的文章放進(jìn)了收藏夾。

過了不知道多久之后辜羊,以前因?yàn)椤疤L不看”的文章由于某種機(jī)緣巧合被翻了出來踏兜,發(fā)現(xiàn)還是很值得學(xué)習(xí)一下的词顾。

AST是什么

AST(Abstract?Syntax?Tree),中文名為抽象語法樹碱妆。

一開始接觸AST的時(shí)候以為只是javascript里面的一個(gè)概念肉盹,實(shí)際上并不然,其實(shí)這個(gè)概念是計(jì)算機(jī)科學(xué)里面的一個(gè)概念疹尾,是源代碼語法結(jié)構(gòu)里面的一種抽象表示上忍。算的上是編譯原理里面的一個(gè)小內(nèi)容(看到某位大佬說的)

為什么要有AST

最簡單的一個(gè)理解就是:為什么javascript的編譯器可以分得清我們寫的各種奇奇怪怪的代碼呢,例如說函數(shù)定義纳本,變量賦值窍蓝,是依照什么規(guī)則來進(jìn)行解析的呢?

用我個(gè)人理解的話來說繁成,就是為了讓代碼可以變成被機(jī)器識別并處理的一種標(biāo)準(zhǔn)結(jié)構(gòu)——將一個(gè)文件里面的代碼按照AST的標(biāo)準(zhǔn)進(jìn)行拆分吓笙,直到分到不可分解的原子粒度為止,然后機(jī)器就可以根據(jù)這些原子粒度的處理方法進(jìn)行統(tǒng)一處理這個(gè)分解結(jié)果就是抽象語法樹朴艰。

例如 1+1 這個(gè)表達(dá)式 可以被分解為 操作數(shù)(1) 操作符(+) 操作數(shù)(1)

1+1 的抽象語法樹

通過這種方式代碼就可以被統(tǒng)一處理观蓄,例如說編譯成對應(yīng)的機(jī)器碼進(jìn)行操作

AST怎么用

看到這里可能就會有小伙伴產(chǎn)生疑問了,這種底層的東西跟我們有什么關(guān)系呢祠墅?常見的關(guān)于開發(fā)的案例如下:

1. 代碼編輯器的智能提示,代碼編輯器通過AST及一些交互手段知道你指中的是什么內(nèi)容歌径,并且分析出這個(gè)是什么東西毁嗦,并且給出提示

2. babel的編譯器,我們使用babel的時(shí)候會經(jīng)郴仡酰看到babylon這個(gè)東西狗准,有時(shí)候就沒過于深究,其實(shí)babylon就是babel的AST解析器茵肃,然后babel主要充當(dāng)?shù)氖菍ST的調(diào)整功能腔长,然后重新輸出。

這里提一嘴:babel的整個(gè)工作流程就是code->AST->遍歷AST验残,替換變量名->重新導(dǎo)出代碼捞附,babel就是負(fù)責(zé)了后兩步的邏輯∧唬可能基于AST的代碼兼容方案都是這種處理方式(筆者沒有開發(fā)過)

3. 設(shè)計(jì)一門新的編程語言鸟召,將自己的語言編譯成某種其他語言等?一個(gè)簡單的編譯器

這里也可以看得出來,其實(shí)AST更加多情況下是用在制作工具或者插件這個(gè)環(huán)節(jié)的氨鹏,懂得這個(gè)簡單的小知識也可以幫助大家理解很多插件的運(yùn)行邏輯欧募,希望可以幫到大家。

如果有其他基于AST的常見插件的話仆抵,也可以寫下來分享一下~

參考資料:

1.?AST抽象語法樹——最基礎(chǔ)的javascript重點(diǎn)知識跟继,99%的人根本不了解

2.?AST抽象語法樹

3.編程語言的實(shí)現(xiàn)种冬,從AST(抽象語法樹)開始

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市舔糖,隨后出現(xiàn)的幾起案子碌廓,更是在濱河造成了極大的恐慌,老刑警劉巖剩盒,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谷婆,死亡現(xiàn)場離奇詭異,居然都是意外死亡辽聊,警方通過查閱死者的電腦和手機(jī)纪挎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跟匆,“玉大人异袄,你說我怎么就攤上這事÷瓯郏” “怎么了烤蜕?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長迹冤。 經(jīng)常有香客問我讽营,道長,這世上最難降的妖魔是什么泡徙? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任橱鹏,我火速辦了婚禮,結(jié)果婚禮上堪藐,老公的妹妹穿的比我還像新娘莉兰。我一直安慰自己,他們只是感情好礁竞,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布糖荒。 她就那樣靜靜地躺著,像睡著了一般模捂。 火紅的嫁衣襯著肌膚如雪捶朵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天枫绅,我揣著相機(jī)與錄音泉孩,去河邊找鬼。 笑死并淋,一個(gè)胖子當(dāng)著我的面吹牛寓搬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播县耽,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼句喷,長吁一口氣:“原來是場噩夢啊……” “哼拳魁!你這毒婦竟也來了贸人?” 一聲冷哼從身側(cè)響起尘颓,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤疯趟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后锡溯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赶舆,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年祭饭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芜茵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡倡蝙,死狀恐怖九串,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寺鸥,我是刑警寧澤猪钮,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站胆建,受9級特大地震影響烤低,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜眼坏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一拂玻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宰译,春花似錦、人聲如沸魄懂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽市栗。三九已至缀拭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間填帽,已是汗流浹背蛛淋。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留篡腌,地道東北人褐荷。 一個(gè)月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像嘹悼,于是被迫代替她去往敵國和親叛甫。 傳聞我的和親對象是個(gè)殘疾皇子层宫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評論 2 349

推薦閱讀更多精彩內(nèi)容