0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深入了解抽象语法树(AST)及其在使用工具和库中的应用

哲想软件 来源:哲想软件 作者:哲想软件 2022-10-13 09:20 次阅读

在本文中,我们将深入了解抽象语法树(AST)及其在日常工作中使用的工具和库中的应用。我们更感兴趣的是AST的实际使用和应用,而不是编译器、解析器编程语言开发工具的晦涩学术理论。

这是一系列文章中的第一篇,该文章探讨了Freshworks的前端开发人员构建和使用的各种AST工具来执行大量活动,例如大规模代码迁移、重构等。

AST 探索者

有一个在线工具可以探索由各种语言解析器生成的AST,称为ASTExplorer,由Facebook的工程师构建。它支持多种语言和解析器。您可以输入代码并获取它表示的AST格式,并在同一浏览器窗口中检查节点和数据。您还可以编写转换函数,这将帮助您使用AST更改或重构代码。对于任何想要了解AST并在其帮助下创建工具的人来说,这是学习和使用AST的最佳工具。

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

为什么AST对工具很重要?

抽象语法树是任何语言开发工具的构建块,因为它们是有效操作源代码的可扩展手段。通过将代码表示为树状结构,您可以利用树数据结构附带的所有有效操作机制。它比处理以文本片段或字符串表示形式表示的源代码要快得多。这是因为如果您想对源代码进行高级和复杂的操作,那么使用纯字符串和字符序列将是一场噩梦。如果您希望有一个方便的表示来对您的代码进行更改而不会产生意想不到的后果和副作用,那么AST是最好的表示。将源代码转换为抽象语法树格式后,

这就是为什么所有语言标准都默认带有AST规范的原因。该语言本身具有用于创建、转换和使用AST的内置API。除此之外,总会有外部工具和库使使用AST成为一项方便而轻松的任务。

那么我们实际上在哪里使用AST呢?简而言之,它在工具和库的Javascript生态系统中无处不在。从这个列表中可以看出,如果没有AST,则根本不可能为Javascript项目提供工具。

语法高亮

代码完成

静态分析

代码覆盖率

缩小

即时编译

源地图

编译成JS语言

代码重构

代码迁移等等。

代码模组

在Freshworks,当我们尝试将Ember代码迁移到新版本时,我们首先遇到了像Codemods这样的AST工具。Ember框架和社区本身提供了许多codemods来帮助您更轻松、更省时地进行迁移。我们已经写了一篇关于我们如何使用Codemods来迁移我们的代码库的博客文章

您可能想查看它以重新了解codemod,包括为什么它们有意义,以及为什么它们应该成为您的自动迁移工具的关键部分。甚至诸如React、Angular和Vue之类的框架也推荐并提供codemods用于从框架的一个版本迁移到下一个版本的升级。

一旦我们开始使用Codemods进行迁移,我们的开发人员发现将他们的代码迁移到较新版本的框架非常有用且节省时间。我们需要越来越多的codemod来解决我们的一些迁移问题。因此,我们开始探索和编写专门解决我们自己的代码迁移问题的codemod,但同时使codemod更加通用,以便我们可以与更大的JavaScript开发人员社区共享它们并使其开源。

但是我们的一些开发人员无法完全掌握AST等Codemod的底层架构以及Babel、recast和jscodeshift等相关工具。所以我们决定让我们的开发人员更容易理解这一点,并减少学习的痛苦。我们围绕AST构建了一堆工具来帮助开发人员熟悉AST和codemods。本系列博文将深入探讨这些工具的内部架构和组件,从而抓住这些工具的本质和意义。




审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程语言
    +关注

    关注

    10

    文章

    1944

    浏览量

    34721
  • javascript
    +关注

    关注

    0

    文章

    516

    浏览量

    53853
  • AST
    AST
    +关注

    关注

    0

    文章

    7

    浏览量

    2327

原文标题:Freshworks:AST工具简介(下)

文章出处:【微信号:哲想软件,微信公众号:哲想软件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深入了解逻辑分析仪入门手册

    深入了解逻辑分析仪入门手册引言与许多电子测试和测量工具一样,逻辑分析仪是一种针对特定类型问题的解决方案。它是一种通用工具,可以帮助您调试数字硬件、检验设计和调试嵌入式软件。对设计数字电路的工程师来说
    发表于 11-19 11:40

    深入了解示波器

    深入了解示波器
    发表于 11-14 22:32

    专家开讲:深入了解电池技术 ──Part 1

    。笔者不会一一详细介绍所有的电池技术,只选择一些常见或是值得认识的;而在接下来的专栏里,笔者将开始介绍电池分类、常见规格以及专业术语,如果你有特别想知道的电池技术,欢迎留言!扩展阅读:专家开讲:深入了解
    发表于 08-18 09:33

    专家开讲:深入了解电池技术──Part 3

    资深工程师 Ivan Cowie 的「深入了解电池技术」专栏Part 3来啰!这次要介绍的是铅酸电池(lead-acidbatteries)技术。铅酸电池是1859年由法国物理学家Gaston
    发表于 08-18 09:37

    单片机的深入了解

    项目名称:单片机的深入了解!项目是否开源:否申请开发板数量:1 块申请人团队介绍:我们团队由五个人组成,我们打算开始着手单片机的程序改编,设计一些比较特殊新颖的东西!希望给以支持!
    发表于 10-12 20:00

    深入了解LabVIEW FPGA资料分享

    深入了解LabVIEW FPGA
    发表于 05-27 08:35

    示波器的深入了解

    示波器的深入了解 引言自然界运行着各种形式的正弦波,比如海浪、地震、声波、爆破、空气传播的声音,或者身体运转的自然节律。物理世界里,能
    发表于 11-04 11:53 52次下载
    示波器的<b class='flag-5'>深入了解</b>

    深入了解逻辑分析仪

    深入了解逻辑分析仪 与许多电子测试和测量工具一样, 逻辑分析仪是一种针对特定类型问题的解决方案。 它是一种通用工具, 可以帮助您调试数字硬件、 检
    发表于 02-11 10:56 39次下载

    深入了解赛灵思System Generator的时间参数

    深入了解赛灵思System Generator的时间参数  基于模型的设计(MBD)因其缩小实时系统抽象的数学建模和物理实现之间差距方面的光明前景而备受关注。通过使用相同的
    发表于 12-29 11:40 1424次阅读
    <b class='flag-5'>深入了解</b>赛灵思System Generator<b class='flag-5'>中</b>的时间参数

    深入了解示波器入门手册

    深入了解示波器入门手册
    发表于 03-27 17:43 241次下载
    <b class='flag-5'>深入了解</b>示波器入门手册

    一种基于程序向量的代码克隆检测方法

    词法单元的特征表示,分析不同字面单词之间的语义相似性;接着,通过语法分析提取程序的抽象语法AST),为叶子节点赋予对应字面单词的特征表示
    发表于 04-07 14:49 15次下载
    一种基于程序向量<b class='flag-5'>树</b>的代码克隆检测方法

    基于关键词的GCC抽象语法消除冗余算法

    GCC( GNU Compiler Collection)编译器编译¢语言源程序所生成的抽象语法文本包含大量与源代码无关的冗余信息,若直接进行解析,会严重影响分析效率,降低分析精确
    发表于 05-07 10:30 210次下载

    带你深入了解示波器

    带你深入了解示波器
    发表于 02-07 14:26 19次下载

    深入了解安全光栅

    深入了解安全光栅
    的头像 发表于 06-25 13:53 1215次阅读
    <b class='flag-5'>深入了解</b>安全光栅

    深入了解 GaN 技术

    深入了解 GaN 技术
    的头像 发表于 12-06 17:28 6156次阅读
    <b class='flag-5'>深入了解</b> GaN 技术