作家
登录

JavaScript语法树与代码转化实践

作者: 来源: 2017-07-27 09:55:49 阅读 我要评论

  •   { type: { ... }, value: "n", start: 0, end: 1, loc: { ... } }, 
  •   { type: { ... }, value: "*", start: 2, end: 3, loc: { ... } }, 
  •   { type: { ... }, value: "n", start: 4, end: 5, loc: { ... } }, 
  •   ... 
  •  
  • 个中每个 type 是一系列描述该令牌属性的集合:

    1.   type: { 
    2.     label: 'name'
    3.     keyword: undefined, 
    4.     beforeExpr: false
    5.     startsExpr: true
    6.     rightAssociative: false
    7.     isLoop: false
    8.     isAssign: false
    9.     prefix: false
    10.     postfix: false
    11.     binop: null
    12.     updateContext: null 
    13.   }, 
    14.   ... 
    15.  

    这里的每一个 type 类似于 AST 中的节点都拥有 start、end、loc 等属性;在实际应用中,譬如对于 ES6 中的箭头函数,我们可以经由过程 babylon 说冥器生成如下的 AST 表示:

    1.   type: { 
    2.     label: 'name'
    3.     keyword: undefined, 
    4.     beforeExpr: false
    5.     startsExpr: true
    6.     rightAssociative: false
    7.     isLoop: false
    8.     isAssign: false
    9.     prefix: false
    10.     postfix: false
    11.     binop: null
    12.     updateContext: null 
    13.   }, 
    14.   ... 
    15.  

    我们可以应用 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

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)