旖美信息技术前端开发经理陈国兴:抽象语法树与Javascript

原创
服务器
抽象语法树是程序代码语法的抽象表示,以树状的形式表现编程语言的语法结构。这棵树从树根开始,然后一直往上延伸,树的每一个节点代表一个语法结构。在这棵树中,有很多种类型的节点,例如函数、加减表达式等。所以,开发者可以操作某个节点,以完成一些工作。

  【51CTO.com原创稿件】2018年5月18-19日,由51CTO主办的全球软件与运维技术峰会在北京召开。此次峰会围绕人工智能、大数据、物联网、区块链等12大核心热点,汇聚海内外60位一线专家,是一场高端的技术盛宴,也是***IT技术人才学习和人脉拓展不容错过的平台。

  在“前端工程实践”分会场,旖美信息技术前端开发经理陈国兴带来了《抽象语法树与JavaScript》的主题分享。会后,51CTO记者根据陈国兴在WOT2018全球软件与运维技术峰会的演讲内容进行了整理。

  何为抽象语法树

  抽象语法树是程序代码语法的抽象表示,以树状的形式表现编程语言的语法结构。这棵树从树根开始,然后一直往上延伸,树的每一个节点代表一个语法结构。在这棵树中,有很多种类型的节点,例如函数、加减表达式等。所以,开发者可以操作某个节点,以完成一些工作。

  陈国兴表示,要操作抽象语法树,应该要具备以下两个基本要素:首先是工具。常用的工具包括Astexplorer、Recast、Jscodeshift、Acorn、Esprima、Escodegen、Estree spec等网站,开发者可以把代码贴到这些网站上,就会自动转换成为语法树。其次是规范。开发者要实现一个编程语言,就需要写一棵语法树。这棵树需要有一个规范,例如函数的类型、名称等,都会有一套完整的规范。

  陈国兴以代码进行重构为例,跟大家详细介绍了抽象语法树的概念。他表示,将“Lucy”改成“Nancy”,重构的目标虽然只是改一个名字,但是,当我们进行搜索替换时会发现,在其它文件上还会有一些表达不同意义的变量,这时全局搜索替换的方式就会导致了在另外一个文件中有人“移情别恋”了,这显然是不正确的。当然,出现这种问题时可以用正则表达式进行解决,但在有多级不同类型的变量、数字或是各种对象类型时,就会变得非常复杂,用正则表达式也没有办法完全解决,且过程相当的复杂,而这种情况下用抽象语法树的方式,则能够很好的解决困难。

  抽象语法树的应用场景

  据陈国兴介绍,抽象语法树的应用场景主要包括:代码的升降级、格式化(美化)代码、生成代码结构图、代码压缩优化、代码转换、语言编译(解释)器等。

  一是代码的升降级,是指将原有用es5写的系统全部转换成es6,或者把es6编译为es5代码,而这种转换就可以用操作抽象语法树来完成。

  二是格式化或者是美化代码。抽象语法树之所以能够实现格式化或是美化代码,是因为在树上有明确的标明位置,这样在做格式化的时候,只要找到标明的位置,就能够准确的看到位置在哪一层。

  三是生成代码结构图。抽象语法树是一棵类似于数据库关系图的大树,其天生就已经具备关系结构,很容易生成结构图。

  四是代码压缩优化。JS里有一个库是专门用做代码压缩的,它也是基于抽象语法树的概念先将代码转换成大树,然后再把相应的名称缩减,并根据调用关系完成转换。

  陈国兴表示,每一门编程语言,实际上就是一棵树。只要知道怎么写一棵树,就可以定义一套规则,然后再把它转成大树,***转换成目标语言。

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

责任编辑:张诚 来源: 51CTO
相关推荐

2017-07-24 09:45:15

JavaScript语法代码

2013-08-20 13:11:58

技术美团

2017-11-22 14:24:21

Reactjavaajax

2017-07-26 17:38:10

JavaScriptBabel

2013-09-11 15:19:33

医疗信息化华为

2017-02-14 11:20:07

互联网+翻转课堂教育

2014-04-02 09:20:46

IDF英特尔深圳

2015-08-10 17:31:11

远程医疗解决方案2015中国卫生信息技华为

2012-06-13 16:33:17

软博会

2015-06-23 16:14:41

石油石化行业信息技术峰华为

2022-04-20 09:27:52

业务视角信息技术关系

2010-07-15 16:57:47

CDNADN

2015-06-09 15:12:40

2015中国电子政务信北京华为

2010-08-09 09:09:43

Flex技术

2019-11-21 12:56:43

EasyStack

2009-05-22 14:11:06

JavaOneSunJava 7

2010-08-09 13:05:24

Flex4beta

2016-11-01 15:04:46

2017-08-23 16:14:56

2009-03-27 09:07:29

信息技术排行榜金砖四国
点赞
收藏

51CTO技术栈公众号