吴忠躺衫网络科技有限公司

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

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

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

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

哲想軟件 ? 來源:哲想軟件 ? 作者:哲想軟件 ? 2022-10-13 09:20 ? 次閱讀

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

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

AST 探索者

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

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

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

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

這就是為什么所有語(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)中無處不在。從這個(gè)列表中可以看出,如果沒有AST,則根本不可能為Javascript項(xiàng)目提供工具。

語(yǔ)法高亮

代碼完成

靜態(tài)分析

代碼覆蓋率

縮小

即時(shí)編譯

源地圖

編譯成JS語(yǔ)言

代碼重構(gòu)

代碼遷移等等。

代碼模組

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

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

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

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




審核編輯:劉清

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

    關(guān)注

    10

    文章

    1950

    瀏覽量

    34988
  • javascript
    +關(guān)注

    關(guān)注

    0

    文章

    525

    瀏覽量

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

    關(guān)注

    0

    文章

    7

    瀏覽量

    2339

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

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    深入了解示波器

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

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

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

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

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

    單片機(jī)的深入了解

    項(xiàng)目名稱:?jiǎn)纹瑱C(jī)的深入了解!項(xiàng)目是否開源:否申請(qǐng)開發(fā)板數(shù)量:1 塊申請(qǐng)人團(tuán)隊(duì)介紹:我們團(tuán)隊(duì)由五個(gè)人組成,我們打算開始著手單片機(jī)的程序改編,設(shè)計(jì)一些比較特殊新穎的東西!希望給以支持!
    發(fā)表于 10-12 20:00

    深入了解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ì)特定類型問題的解決方案。 它是一種通用工具, 可以幫助您調(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)注。通過使用相同的
    發(fā)表于 12-29 11:40 ?1440次閱讀
    <b class='flag-5'>深入了解</b>賽靈思System Generator<b class='flag-5'>中</b>的時(shí)間參數(shù)

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

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

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

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

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

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

    帶你深入了解示波器

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

    深入了解安全光柵

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

    深入了解 GaN 技術(shù)

    深入了解 GaN 技術(shù)
    的頭像 發(fā)表于 12-06 17:28 ?6252次閱讀
    <b class='flag-5'>深入了解</b> GaN 技術(shù)
    tt娱乐城备用| 百家乐娱乐平台代理佣金| 去澳门百家乐官网娱乐城| 大发888的微博| 百家乐闲单开多少| e世博百家乐官网技巧| 大发888客服qq号| 金濠国际| 百家乐赌博游戏平台| 玩百家乐澳门368娱乐城| 百家乐官网正网开户| 百家乐赌场策略论坛| 跨国际百家乐官网的玩法技巧和规则| 百家乐怎么玩| 太阳城绿萱园| 百家乐正确的打法| 永利百家乐官网娱乐场| 蒙城县| 大发888真人真钱网址| 百家乐透明牌靴| 棋牌百家乐官网有稳赚的方法吗 | 新葡京国际娱乐城| 太阳城房价| 百家乐纸牌赌博| 属蛇和属猪做生意| 立即博百家乐官网娱乐城| 南华县| 网页棋牌游戏| 茅台百家乐的玩法技巧和规则| 八卦24山| 百家乐官网小揽| 百家乐官网赌博出千| 大发888送体验金| 百家乐小路规则| 百家乐全程打庄| 正品百家乐官网游戏| 百家乐官网注册| 沙龙网上娱乐| 大发888官网客户端| 百家乐过滤| 百家乐牌路图表下|