个中每个 type 是一系列描述该令牌属性的集合:
- {
- type: {
- label: 'name',
- keyword: undefined,
- beforeExpr: false,
- startsExpr: true,
- rightAssociative: false,
- isLoop: false,
- isAssign: false,
- prefix: false,
- postfix: false,
- binop: null,
- updateContext: null
- },
- ...
- }
这里的每一个 type 类似于 AST 中的节点都拥有 start、end、loc 等属性;在实际应用中,譬如对于 ES6 中的箭头函数,我们可以经由过程 babylon 说冥器生成如下的 AST 表示:
- {
- type: {
- label: 'name',
- keyword: undefined,
- beforeExpr: false,
- startsExpr: true,
- rightAssociative: false,
- isLoop: false,
- isAssign: false,
- prefix: false,
- postfix: false,
- binop: null,
- updateContext: null
- },
- ...
- }
我们可以应用 AST Explorer 这个对象进行在线预览与编辑;在上述的 AST 表示中,顾名思义,ArrowFunctionExpression 就表示该表达式为箭头函数表达式。该函数拥有 foo 与 bar 这两个参数,参数所属的 Identifiers 类型是没有任何子节点的变量名类型;接下来我们发明加号运算符被表示为了 BinaryExpression 类型,并且其 operator 属性设置为 +,而阁下两个参数分别挂载于 left 与 right 属性下。在接下来的转化步调中,我们等于须要对如许的抽象语法树进行转换,该步调重要由 Babel Preset 与 Plugin 控制;Babel 内部供给了 babel-traverse 这个库来帮助进行 AST 遍历,该库还供给了一系列内置的调换与操作接口。而经由转化之后的 AST 表示如下,在实际开辟中我们也经常起首比较转化前后代码的 AST 表示的不合,以懂得应当进行如何的转化操作:
推荐阅读
2009年6月,我省开端量刑规范化改革,是全国第二批试点省份。据介绍,海南最新版的量刑细则涵盖了23个常见着绫躯和罚金刑、缓刑实用,所涉的刑事犯法案件占到我省刑事案件的95%以上。此次>>>详细阅读
本文标题:JavaScript语法树与代码转化实践
地址:http://www.17bianji.com/lsqh/36429.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示