【.com原稿】2018年5月18-19日,由公司主办的全球软件与运维技术峰会召开在北京。峰会围绕人工智能、大数据、物联网、区块链等12个核心热点,汇聚了60位海内外一线专家。错过平台。 在“前端工程实践”分环节,亿美信息前端开发经理陈国兴带来了《抽象语法树与JavaScript》的主题分享。会后,记者梳理了陈国兴在WOT2018全球软件与运维技术峰会上的演讲内容。 什么是抽象语法树 抽象语法树是对程序代码语法的抽象表示,以树的形式表达了一种编程语言的语法结构。这棵树从树根开始,然后向上延伸。树的每个节点代表一个语法结构。在这棵树中,有很多类型的节点,比如函数、加减表达式等等。因此,开发者可以操作某个节点来完成一些工作。 陈国兴说,要操作一棵抽象语法树,应该具备以下两个基本要素:第一是工具。常用的工具有Astexplorer、Recast、Jscodeshift、Acorn、Esprima、Escodegen、Estreespec等网站。开发人员可以将代码粘贴到这些网站上,它会自动转换为语法树。二是规范。要实现一种编程语言,开发人员需要编写一个语法树。这棵树需要有一个规范,比如函数的类型、名称,都会有一套完整的规范。 陈国兴以代码重构为例,详细介绍了抽象语法树的概念。他说把“Lucy”改成“Nancy”,虽然重构的目的只是改个名字,但是当我们查找替换的时候,会发现在其他文件中会有一些表达不同含义的变量。全局查找和替换的方式会导致某人在另一个文件中“移情别恋”,这显然是不正确的。当然,可以使用正则表达式来解决这类问题,但是当存在多层次的不同类型的变量、数字或者各种对象类型时,就会变得非常复杂,没有办法用正则来彻底解决表达式,过程比较复杂,此时抽象语法树的方法可以很好的解决这个难点。 抽象语法树的应用场景 在陈国兴看来,抽象语法树的应用场景主要包括:代码升级升级、格式化(美化)代码、生成代码结构图、代码压缩优化、代码转换、languageCompiler(interpreter)etc抽象语法树。 其次是对代码进行格式化或者美化。抽象语法树之所以能够对代码进行格式化或者美化,是因为树上有明确的标记位置,这样在格式化的时候,只要找到标记的位置,就可以准确的看出该位置在哪一层。 三是生成代码结构图。抽象语法树是一棵类似于数据库关系图的大树。它已经有了关系结构,很容易生成结构图。 第四是代码压缩优化。JS中有一个专门用于代码压缩的库。它还基于抽象语法树的概念,将代码转换成一棵大树,然后缩减对应的名称,根据调用关系完成转换。 陈国兴说过,每一种编程语言其实都是一棵树。只要你会写一棵树,你就可以定义一套规则,然后把它变成一棵大树,最后再转换成目标语言。【原创稿件,合作网站转载请注明原作者和出处为.com】
