新浪博客

Freshworks:AST工具简介(上)

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

这是一系列博客文章中的第一篇,该文罩了Freshworks的前端开发人员构建和使用的各种AST工具来执行大量活动,例如大规模代码迁移、重构等。
Freshworks:AST工具简介(上)
什么是AST
您的AST基本上是源代码的树形表示。通过提出适当的类比,可以稍微改进这个定义。让我们将AST视为代码的文档对象模型(DOM)。通常,您操纵DOM来更新网页上的内容。您通常在DOM中添加节点并更新和删除节点,以便浏览器自动在网页上反映您的更改。同样,您可以更新AST节点,以一种简单有效的方式对代码进行修改。通常当我们最终得到这种定义时,我们似乎理解得更好、更清晰,尽管这是一种过度简化。
它被称为抽象语法树,因为它不会从您的代码中捕获所有信息。例如,它不存储有关分隔符、标点符号、空格等的信息。
AST是如何创建的?
这就是您的代码如何转换为AST的方式。正如您在此处看到的,在创建AST之前,我们有不同的处理阶段。我们有“词法分析”和“句法分析”;我们将看到他们实际做了什么。
Freshworks:AST工具简介(上)

首先,您的代码经过一个处理阶段,称为词法分析,执行此操作的工具称为词法分析器或扫描器。它所做的只是接受一串代码并将其拆分为一个令牌列表。
让我们考虑一个小的JavaScript程序,它通过一个函数将“helloworld”打印到控制台。
Freshworks:AST工具简介(上)
下一阶段称为语法分析,由一个称为语法分析器的工具完成。您的语法分析器也称为解析器。它采用词法分析器生成的标记并将它们构建到树结构中,最终称为抽象语法树。
Freshworks:AST工具简介(上)
所以现在,我们编写的代码被转换成类似下面的截图。由于我们以JavaScript为例,其AST以JSON表示法表示,这将便于JavaScript生态系统中的所有其他工具以他们想要的任何方式理解和处理AST。它不一定是所有其他编程语言的JSON表示法。它可以是相应编程语言支持的任何默认符号。例如,在Ruby中,AST用S表达式表示,而在其他语言中,它可以用YML等表示。这基本上取决于您使用什么样的解析器以及解析器发出什么样的输出。您还可以使用跨语言解析器来分析您的代码,
Freshworks:AST工具简介(上)
公司名称:北京哲想软件有限公司
北京哲想软件官方网站:cogitosoft.com
北京哲想软件微信公众平台账号:cogitosoftware
北京哲想软件微博:哲想软件
北京哲想软件邮箱:sales@ cogitosoft.com
销售(俞先生)联系方式: 8601068421378
微信:18610247936 QQ368531638

我的更多文章

下载客户端阅读体验更佳

APP专享