0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深入了解抽象語(yǔ)法樹(shù)(AST)及其在使用工具和庫(kù)中的應(yīng)用

哲想軟件 ? 來(lái)源:哲想軟件 ? 作者:哲想軟件 ? 2022-10-13 09:20 ? 次閱讀

在本文中,我們將深入了解抽象語(yǔ)法樹(shù)(AST)及其在日常工作中使用的工具和庫(kù)中的應(yīng)用。我們更感興趣的是AST的實(shí)際使用和應(yīng)用,而不是編譯器、解析器編程語(yǔ)言開(kāi)發(fā)工具的晦澀學(xué)術(shù)理論。

這是一系列文章中的第一篇,該文章探討了Freshworks的前端開(kāi)發(fā)人員構(gòu)建和使用的各種AST工具來(lái)執(zhí)行大量活動(dòng),例如大規(guī)模代碼遷移、重構(gòu)等。

AST 探索者

有一個(gè)在線工具可以探索由各種語(yǔ)言解析器生成的AST,稱(chēng)為ASTExplorer,由Facebook的工程師構(gòu)建。它支持多種語(yǔ)言和解析器。您可以輸入代碼并獲取它表示的AST格式,并在同一瀏覽器窗口中檢查節(jié)點(diǎn)和數(shù)據(jù)。您還可以編寫(xiě)轉(zhuǎn)換函數(shù),這將幫助您使用AST更改或重構(gòu)代碼。對(duì)于任何想要了解AST并在其幫助下創(chuàng)建工具的人來(lái)說(shuō),這是學(xué)習(xí)和使用AST的最佳工具。

83c2677c-4a8d-11ed-a3b6-dac502259ad0.png

為什么AST對(duì)工具很重要?

抽象語(yǔ)法樹(shù)是任何語(yǔ)言開(kāi)發(fā)工具的構(gòu)建塊,因?yàn)樗鼈兪怯行Р僮髟创a的可擴(kuò)展手段。通過(guò)將代碼表示為樹(shù)狀結(jié)構(gòu),您可以利用樹(shù)數(shù)據(jù)結(jié)構(gòu)附帶的所有有效操作機(jī)制。它比處理以文本片段或字符串表示形式表示的源代碼要快得多。這是因?yàn)槿绻雽?duì)源代碼進(jìn)行高級(jí)和復(fù)雜的操作,那么使用純字符串和字符序列將是一場(chǎng)噩夢(mèng)。如果您希望有一個(gè)方便的表示來(lái)對(duì)您的代碼進(jìn)行更改而不會(huì)產(chǎn)生意想不到的后果和副作用,那么AST是最好的表示。將源代碼轉(zhuǎn)換為抽象語(yǔ)法樹(shù)格式后,

這就是為什么所有語(yǔ)言標(biāo)準(zhǔn)都默認(rèn)帶有AST規(guī)范的原因。該語(yǔ)言本身具有用于創(chuàng)建、轉(zhuǎn)換和使用AST的內(nèi)置API。除此之外,總會(huì)有外部工具和庫(kù)使使用AST成為一項(xiàng)方便而輕松的任務(wù)。

那么我們實(shí)際上在哪里使用AST呢?簡(jiǎn)而言之,它在工具和庫(kù)的Javascript生態(tài)系統(tǒng)中無(wú)處不在。從這個(gè)列表中可以看出,如果沒(méi)有AST,則根本不可能為Javascript項(xiàng)目提供工具。

語(yǔ)法高亮

代碼完成

靜態(tài)分析

代碼覆蓋率

縮小

即時(shí)編譯

源地圖

編譯成JS語(yǔ)言

代碼重構(gòu)

代碼遷移等等。

代碼模組

在Freshworks,當(dāng)我們嘗試將Ember代碼遷移到新版本時(shí),我們首先遇到了像Codemods這樣的AST工具。Ember框架和社區(qū)本身提供了許多codemods來(lái)幫助您更輕松、更省時(shí)地進(jìn)行遷移。我們已經(jīng)寫(xiě)了一篇關(guān)于我們?nèi)绾问褂肅odemods來(lái)遷移我們的代碼庫(kù)的博客文章

您可能想查看它以重新了解codemod,包括為什么它們有意義,以及為什么它們應(yīng)該成為您的自動(dòng)遷移工具的關(guān)鍵部分。甚至諸如React、Angular和Vue之類(lèi)的框架也推薦并提供codemods用于從框架的一個(gè)版本遷移到下一個(gè)版本的升級(jí)。

一旦我們開(kāi)始使用Codemods進(jìn)行遷移,我們的開(kāi)發(fā)人員發(fā)現(xiàn)將他們的代碼遷移到較新版本的框架非常有用且節(jié)省時(shí)間。我們需要越來(lái)越多的codemod來(lái)解決我們的一些遷移問(wèn)題。因此,我們開(kāi)始探索和編寫(xiě)專(zhuān)門(mén)解決我們自己的代碼遷移問(wèn)題的codemod,但同時(shí)使codemod更加通用,以便我們可以與更大的JavaScript開(kāi)發(fā)人員社區(qū)共享它們并使其開(kāi)源。

但是我們的一些開(kāi)發(fā)人員無(wú)法完全掌握AST等Codemod的底層架構(gòu)以及Babel、recast和jscodeshift等相關(guān)工具。所以我們決定讓我們的開(kāi)發(fā)人員更容易理解這一點(diǎn),并減少學(xué)習(xí)的痛苦。我們圍繞AST構(gòu)建了一堆工具來(lái)幫助開(kāi)發(fā)人員熟悉AST和codemods。本系列博文將深入探討這些工具的內(nèi)部架構(gòu)和組件,從而抓住這些工具的本質(zhì)和意義。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程語(yǔ)言
    +關(guān)注

    關(guān)注

    10

    文章

    1930

    瀏覽量

    34540
  • javascript
    +關(guān)注

    關(guān)注

    0

    文章

    515

    瀏覽量

    53753
  • AST
    AST
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    2313

原文標(biāo)題:Freshworks:AST工具簡(jiǎn)介(下)

文章出處:【微信號(hào):哲想軟件,微信公眾號(hào):哲想軟件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    深入了解邏輯分析儀入門(mén)手冊(cè)

    深入了解邏輯分析儀入門(mén)手冊(cè)引言與許多電子測(cè)試和測(cè)量工具一樣,邏輯分析儀是一種針對(duì)特定類(lèi)型問(wèn)題的解決方案。它是一種通用工具,可以幫助您調(diào)試數(shù)字硬件、檢驗(yàn)設(shè)計(jì)和調(diào)試嵌入式軟件。對(duì)設(shè)計(jì)數(shù)字電路的工程師來(lái)說(shuō)
    發(fā)表于 11-19 11:40

    深入了解示波器

    深入了解示波器
    發(fā)表于 11-14 22:32

    專(zhuān)家開(kāi)講:深入了解電池技術(shù) ──Part 1

    。筆者不會(huì)一一詳細(xì)介紹所有的電池技術(shù),只選擇一些常見(jiàn)或是值得認(rèn)識(shí)的;而在接下來(lái)的專(zhuān)欄里,筆者將開(kāi)始介紹電池分類(lèi)、常見(jiàn)規(guī)格以及專(zhuān)業(yè)術(shù)語(yǔ),如果你有特別想知道的電池技術(shù),歡迎留言!擴(kuò)展閱讀:專(zhuān)家開(kāi)講:深入了解
    發(fā)表于 08-18 09:33

    專(zhuān)家開(kāi)講:深入了解電池技術(shù)──Part 3

    資深工程師 Ivan Cowie 的「深入了解電池技術(shù)」專(zhuān)欄Part 3來(lái)啰!這次要介紹的是鉛酸電池(lead-acidbatteries)技術(shù)。鉛酸電池是1859年由法國(guó)物理學(xué)家Gaston
    發(fā)表于 08-18 09:37

    深入了解LabVIEW FPGA資料分享

    深入了解LabVIEW FPGA
    發(fā)表于 05-27 08:35

    示波器的深入了解

    示波器的深入了解 引言自然界運(yùn)行著各種形式的正弦波,比如海浪、地震、聲波、爆破、空氣傳播的聲音,或者身體運(yùn)轉(zhuǎn)的自然節(jié)律。物理世界里,能
    發(fā)表于 11-04 11:53 ?52次下載
    示波器的<b class='flag-5'>深入了解</b>

    深入了解邏輯分析儀

    深入了解邏輯分析儀 與許多電子測(cè)試和測(cè)量工具一樣, 邏輯分析儀是一種針對(duì)特定類(lèi)型問(wèn)題的解決方案。 它是一種通用工具, 可以幫助您調(diào)試數(shù)字硬件、 檢
    發(fā)表于 02-11 10:56 ?39次下載

    深入了解賽靈思System Generator的時(shí)間參數(shù)

    深入了解賽靈思System Generator的時(shí)間參數(shù)  基于模型的設(shè)計(jì)(MBD)因其縮小實(shí)時(shí)系統(tǒng)抽象的數(shù)學(xué)建模和物理實(shí)現(xiàn)之間差距方面的光明前景而備受關(guān)注。通過(guò)使用相同的
    發(fā)表于 12-29 11:40 ?1413次閱讀
    <b class='flag-5'>深入了解</b>賽靈思System Generator<b class='flag-5'>中</b>的時(shí)間參數(shù)

    深入了解示波器入門(mén)手冊(cè)

    深入了解示波器入門(mén)手冊(cè)
    發(fā)表于 03-27 17:43 ?241次下載
    <b class='flag-5'>深入了解</b>示波器入門(mén)手冊(cè)

    深入了解電感與磁珠的異同

    模擬電子的相關(guān)知識(shí)學(xué)習(xí)教材資料——深入了解電感與磁珠的異同
    發(fā)表于 09-27 15:19 ?0次下載

    一種基于程序向量樹(shù)的代碼克隆檢測(cè)方法

    詞法單元的特征表示,分析不同字面單詞之間的語(yǔ)義相似性;接著,通過(guò)語(yǔ)法分析提取程序的抽象語(yǔ)法樹(shù)AST),為葉子節(jié)點(diǎn)賦予對(duì)應(yīng)字面單詞的特征表示
    發(fā)表于 04-07 14:49 ?15次下載
    一種基于程序向量<b class='flag-5'>樹(shù)</b>的代碼克隆檢測(cè)方法

    基于關(guān)鍵詞的GCC抽象語(yǔ)法樹(shù)消除冗余算法

    GCC( GNU Compiler Collection)編譯器編譯¢語(yǔ)言源程序所生成的抽象語(yǔ)法樹(shù)文本包含大量與源代碼無(wú)關(guān)的冗余信息,若直接進(jìn)行解析,會(huì)嚴(yán)重影響分析效率,降低分析精確
    發(fā)表于 05-07 10:30 ?210次下載

    帶你深入了解示波器

    帶你深入了解示波器
    發(fā)表于 02-07 14:26 ?19次下載

    深入了解安全光柵

    深入了解安全光柵
    的頭像 發(fā)表于 06-25 13:53 ?1139次閱讀
    <b class='flag-5'>深入了解</b>安全光柵

    深入了解 GaN 技術(shù)

    深入了解 GaN 技術(shù)
    的頭像 發(fā)表于 12-06 17:28 ?6033次閱讀
    <b class='flag-5'>深入了解</b> GaN 技術(shù)