基於 AST 的代碼自動生成方案
最近接到了一個需求,需要通過第三方提供的 d.ts 文件來定義對應的 JS SDK 文件,其形式如下: 第三方提供的 d.ts 文件: export class SDK { start(account: string); close(); init(id: string): Promise{ result: number; } } 定義出來的 JS SDK 文件: // 初始化 wr
昵稱 jrainlau
貢獻者20
粉絲0
最近接到了一個需求,需要通過第三方提供的 d.ts 文件來定義對應的 JS SDK 文件,其形式如下: 第三方提供的 d.ts 文件: export class SDK { start(account: string); close(); init(id: string): Promise{ result: number; } } 定義出來的 JS SDK 文件: // 初始化 wr
昵稱 jrainlau
AST 是 Abstract Syntax Tree 的縮寫,即 “抽象語法樹”.它是以樹狀的形式表現編程語言的語法結構. webpack 打包 JS 代碼的時候,webpack 會在我們的原有代碼基礎上新增一些代碼, 例如我們可以在打包JS 代碼的時候將高級代碼轉為低級代碼,就是通過 AST 語法樹來完成的 AST在線生成地址 babel插件查看使用地址 AST生成過程由源碼-詞法分
昵稱 HeiYanjing
前端開發中,使用了很多工具,譬如webpack、eslint來提升研發效率,但我們並不知道這些工具的實現原理。基於這些工具的核心都是抽象語法樹,那我們就從抽象語法樹開始理解底層原理的新世界吧。 一、抽象語法樹是什麼 顧名思義,首先可以確定的是,這是一顆跟語法相關的樹。 先上一盤硬菜,維基百科定義如下: In computer science, an abstract syntax tree (AS
昵稱 tsteam
AST (Abstract Syntax Tree) 標題 內容 AST AST定義,使用方式,原理 AST AST例子 AST AST應用 AST 定義 AST(Abstract Syntax Tree)抽象語法樹,簡稱AST,它是源代碼(也就是説它不僅僅是應用於JavaSc
昵稱 jackdan9
豆皮粉兒們,又見面了,今天這一期,由字節跳動數據平台的太郎醬,帶大家走進AST的世界。 作者:太郎醬 什麼是AST 抽象語法樹(Abstract Syntax Tree, AST),是源代碼的抽象語法結構的樹狀表示,與之對應的是具體語法樹;之所以是抽象的,是因為抽象語法樹並不會表示出真實語法中出現的每一個細節,而且是文法無關、不依賴於語言的細節;可以把AST想象成一套標準化的編程語言接口定義,只不
昵稱 豆皮範兒
作者:BoBoooooo 前言 談及 Babel,必然離不開 AST。有關 AST 這個知識點其實是很重要的,但由於涉及到代碼編譯階段,大多情況都是由各個框架內置相關處理,所以作為開發(使用)者本身,往往會忽視這個過程。希望通過這篇文章,帶各位同學走進 AST,藉助 AST 發揮更多的想象力。 AST 概述 想必大家總是聽到 AST 這個概念,那麼到底什麼是 AST? AST 全稱是是 Abs
昵稱 雲音樂技術團隊
前言 Babel 是一個通用的多功能的 JavaScript 編譯器,讓一些新版本的語法或者語法糖可以在低版本的瀏覽器上跑起來。 它有三個主要處理步驟 Parse - Transform - Generate。 在 Transform 轉換過程中通過將插件(或預設)應用到配置文件來啓用代碼轉換。 AST 編寫 Babel 插件非常複雜,需要有相當的基礎知識,在講插件之前必須得提起 AS
昵稱 小皇帝James
PHP-Parser 應用之掃描發現代碼中的打印、輸出結構語句 PHP-Parser 是由 nikic 開發的一個 PHP 抽象語法樹(AST)解析器,可方便的將代碼與抽象語法樹互相轉換。工程上常用來生成模板代碼(如 rector)、生成抽象語法樹進行靜態分析(如 phpstan)。最近學習應用(靜態分析)了一下,編寫了一個簡單的掃描發現代碼中的打印、輸出結構語句的命令(FindDumpState
昵稱 guanguans
一、出師之名 提到規則引擎,大部分人都會先想到DSL(Domain Specific Language),進而聯想令人生畏的編譯原理、遞歸下降、LL或LR。但規則引擎有大有小,它們在不同場景的存在不一樣,並不一定都要這麼複雜。 比如在一個小型支付系統的簡單風控場景裏,產品同學想設置一些規則避免用户的銀行卡被盜刷或者商户被薅羊毛: 24小時內支付總金額超10w的用户 1小時使用信用卡支付金額超
昵稱 Kyrie
最近網上突然多了好多 給所有的async函數添加try/catch 的面試題,實現思路基本就是用 babel 正好最近也在學習 GoGoCode,就想到用 GoGoCode 實現一下 GoGoCode 是一個基於 AST 的 JavaScript/Typescript/HTML 代碼轉換工具,但相較於同類,它提供了更符合直覺的 API:一套類 JQuery 的 API 用來查找和處理 AST
昵稱 灬都是個謎
本文來源:about.gitlab.com 作者:Sandra Gittlen 譯者:極狐(GitLab) 市場部內容團隊 應用程序安全測試(AST)對於應用程序研發來説,是一個正在快速發展並且十分重要的領域。DevOps 方法論提到:需要將測試集成到開發人員的工作流中。GitLab 相信在軟件研發中,AST 越成熟,應用程序就會越安全,同時企業也能夠更容易滿足合規要求。相信 D
昵稱 極狐GitLab
前言 如果有使用過spring aop功能的小夥伴,應該都會知道spring aop主要是通過動態代理在運行時,對業務進行切面攔截操作。今天我們就來實現一下如何通過APT+AST在編譯期時實現AOP功能。不過在此之前先科普一下APT和AST相關內容 APT(註解處理器) apt可以查看我之前寫過的文章聊聊如何運用JAVA註解處理器(APT) AST(抽象語法樹) 什麼是AST 抽象語法樹(Abst
昵稱 linyb極客之路
1 介紹 AST 打開前端項目中的 package.json,會發現眾多工具已經佔據了我們開發日常的各個角落,例如 JavaScript 轉譯、CSS 預處理、代碼壓縮、ESLint、Prettier 等。這些工具模塊大都不會交付到生產環境中,但它們的存在於我們的開發而言是不可或缺的。 Babel,Webpack,Vue-cli 和 EsLint 等很多的工具和庫的核心都是通過 Abstract
昵稱 京東雲開發者
前言 技術棧 Python 3.11 pyparsing 2.4.7 loguru 0.7.2 xmltodict 0.13.0 案例 測試解析 與 或 測試代碼 # encoding: utf-8 # author: qbit # date: 2023-12-14 # summary: pyparsing 2.x 解析測試,測試 AND OR import json i
昵稱 qbit
前言 技術棧 Python 3.11 pyparsing 3.2.3 lark 1.2.2 loguru 0.7.2 案例 測試代碼 # encoding: utf-8 # author: qbit # date: 2024-04-23 # summary: 將與或非邏輯表達式轉換為 ES 表達式 import json import pyparsing as
昵稱 qbit
前言 技術棧 Python 3.11 pyparsing 3.1.2 案例 測試代碼 # encoding: utf-8 # author: qbit # date: 2024-04-23 # summary: 化簡括號冗餘的與或非邏輯表達式 import pyparsing as pp line = '(((owner=111 AND doc_type=222))) OR
昵稱 qbit
作者:來自 vivo 互聯網大前端團隊- Wei Xing 在研發項目過程中,我們經常會遇到技術架構迭代更新的需求,通過技術的迭代更新,讓項目從新的技術特性中受益,但由於很多新的技術迭代版本並不能完全向下兼容,包含了很多非兼容性的改變(Breaking Changes),因此我們需要設計一款工具,幫助我們完成大規模代碼自動遷移問題。本文簡單闡述了基於 AST 的代碼遷移概念和大致流程,並通過代碼案
昵稱 vivo互聯網技術
GitMaster裏面展示項目結構時,同時也顯示了對應的icon。 看起來和Octotree是沒什麼區別,但其實在維護和更新上是有顯著區別的。 Octotree是直接從file-icons/atom複製相關樣式和字體文件到項目裏,這樣耦合的方式很不利於維護,所以我在處理文件圖標時進行了額外的處理,把所有文件圖標通過npm包的形式引入。 大家可能好奇為什麼不直接用file-icons/atom,沒有
昵稱 ineo6
作者:京東科技 周明亮 AST 基礎與功能 在前端裏面有一個很重要的概念,也是最原子化的內容,就是 AST ,幾乎所有的框架,都是基於 AST 進行改造運行,比如:React / Vue /Taro 等等。 多端的運行使用,都離不開 AST 這個概念。 在大家理解相關原理和背景後,我們可以通過手寫簡單的編譯器,簡單實現一個 Javascript 的代碼編譯器,編譯後在瀏覽器端正常運行。 創建數字小
昵稱 京東雲開發者
寫在前面 也不知道為什麼,每一次工作變動,所接手的第一個項目,都和項目遷移有關。這次也不例外,在 5 月初入職樂天之後,處理完雜七雜八的事情,第一個接手的項目是將一個大概有 5 年開發週期的 nuxt 2 前端項目,遷移到 nuxt 3 版本。 項目遷移與“屎山” 談及項目遷移,尤其是複雜項目,很容易讓人把它和“屎山”聯繫起來,而事實上也是如此,大多數規模較大的項目,往往都具備“屎山”的各種特徵,
昵稱 littlelyon
作者:京東零售 周明亮 寫在前面 這裏我們初步提到了一些基礎概念和應用: 分析器 抽象語法樹 AST AST 在 JS 中的用途 AST 的應用實踐 有了初步的認識,還有常規的代碼改造應用實踐,現在我們來詳細説説使用 AST, 如何進行代碼改造? Babel AST 四件套的使用方法 其實在解析 AST 這個工具上,有很多可以使用,上文我們已經提到過了。對於 JS 的 AST 大家已經
昵稱 京東雲開發者
前言 AST抽象語法樹想必大家都有聽過這個概念,但是不是隻停留在聽過這個層面呢。其實它對於編程來講是一個非常重要的概念,當然也包括前端,在很多地方都能看見AST抽象語法樹的影子,其中不乏有vue、react、babel、webpack、typeScript、eslint等。簡單來説但凡需要編譯的地方你基本都能發現AST的存在。 babel是用來將javascript高級語法編譯成瀏覽器能夠執行的語
昵稱 南玖
年初接到一個任務將 semi-ui 替換到 antd,但是能人力預算不太夠,所以基於工作量和效率選擇了基於 AST 的替換方案。 項目技術棧是 React + tsx 為什麼要使用 AST? AST(Abstract Syntax Tree,抽象語法樹)是一種在計算機科學中表示源代碼語法結構的樹狀數據結構。 通過 AST,可以理解代碼的結構和含義,實現代碼分析、轉換和操作。 基於 AS
昵稱 linong
目錄 目錄 環境搭建 代碼:修改AST的邏輯 重命名函數名 重命名變量並修改變量值 函數調用替換 控制流扁平化還原 刪除未使用的變量 對象屬性簡化 條件表達式優化 表達式還原 環境搭建 安裝環境 npm install @babel/parser @babel/traverse @babel/genera
昵稱 歡快的紅酒_c2Eaor