es6类型转换_单片机ad转换原理

es6类型转换_单片机ad转换原理babelES6转换ES5实现原理

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

babel ES6 转换 ES5 实现原理

前言

前面写过一篇简单的 AST 抽象语法树的文章 简述 AST 抽象语法树。今天来看一下在 babel 中是如何将 ES6 转换为 ES5 的 。

babel 各种包介绍

babel-core:核心包,提供转译的 API,用于对代码进行转译。例如 babel.transform。在 webpack 中 babel-loader 就是通过这个包实现。
babylon:babel 的词法解析器。将原始代码逐个字母地像扫描机一样读取分析得出 AST 语法树结构。
babel-traverse:对 AST 进行遍历转译。
babel-generator:将新的 AST 语法树生成新的代码。
babel-types:用于检验、构建和改变 AST 树的节点
babel-template:辅助函数,用于从字符串形式的代码来构建 AST 树节点
babel-helpers:一系列预制的 babel-template 函数,用于提供给一些 plugins 使用
babel-code-frames:用于生成错误信息,打印出错误点源代码帧以及指出出错位置
babel-plugin-xxx:babel 转译过程中使用到的插件,其中 babel-plugin-transform-xxx 是 transform 步骤使用的。
babel-preset-xxx:transform阶段使用到的一系列的 plugin。
babel-polyfill:JS 标准新增的原生对象和 API 的 shim,实现上仅仅是 core-js 和 regenerator-runtime两个包的封装。
babel-runtime:功能类似 babel-polyfill,一般用于 library 或 plugin 中,因为它不会污染全局作用域。
参考:https://www.jianshu.com/p/e9b94b2d52e2

转换过程

转换过程分为三步:

  1. Parser 解析
    第一步主要是将 ES6 语法解析为 AST 抽象语法树。简单地说就是将代码打散成颗粒组装的对象。这一步主要是通过 babylon 插件来完成。
  2. Transformer 转换
    第二步是将打散的 AST 语法通过配置好的 plugins(babel-traverse 对 AST 进行遍历转译)和 presets (es2015 / es2016 / es2017 / env / stage-0 / stage-4 其中 es20xx 表示转换成该年份批准的标准,env 是最新标准,stage-0 和 stage-4 是实验版)转换成新的 AST 语法。这一步主要是由 babel-transform 插件完成。plugins 和 presets 通常在 .babelrc 文件中配置。
  3. Generator 生成
    第三步是将新的 AST 语法树对象再生成浏览器都可以识别的 ES5 语法。这一步主要是由 babel-generator 插件完成。

案例

举个简单的例子,比如代码块 let a = 10 中有 ES6 语法 let。转换的过程如下:

  1. 使用 在线 astexplorer 将代码块解析成 AST 语法树。
{ 
   
  "type": "Program",
  "start": 0,
  "end": 10,
  "body": [
    { 
   
      "type": "VariableDeclaration",
      "start": 0,
      "end": 10,
      "declarations": [
        { 
   
          "type": "VariableDeclarator",
          "start": 4,
          "end": 10,
          "id": { 
   
            "type": "Identifier",
            "start": 4,
            "end": 5,
            "name": "a"
          },
          "init": { 
   
            "type": "Literal",
            "start": 8,
            "end": 10,
            "value": 10,
            "raw": "10"
          }
        }
      ],
      "kind": "let"
    }
  ],
  "sourceType": "module"
}
  1. 将以上 AST 语法树对象中的 ES6 语法 let 替换成 var
  2. 再将新的语法树生成新的代码 var a = 10
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190009.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 360手机桌面最新版本_魔秀桌面下载

    360手机桌面最新版本_魔秀桌面下载  本文中描述的步骤可能有些不是必须的,但笔者没有进一步验证,故将安装过程中的所有步骤均列出在此。 1.安装RedflagLinux5.0桌面版 2.安装前得准备,打几个补丁  1).redhatlinux9下第一张光盘下的RedHat/RPMS/compat-libstdc++-7.3- 2.96.118.i386.rpm(安装方法rpm-ivh…

    2022年8月20日
    7
  • tinyxml 内存泄露_tinyxml 用法[通俗易懂]

    tinyxml 内存泄露_tinyxml 用法[通俗易懂]场景说明:创建一个空的xml文件,要求格式如下:代码如下:TiXmlElement*RootElement=NULL;TiXmlDocument*pDoc=NULL;pDoc=newTiXmlDocument();TiXmlDeclaration*pDeclaration=newTiXmlDeclaration((“1.0”),(“UTF-8”),(“”));pDoc-&…

    2022年6月9日
    56
  • .npy文件_文件后缀名是npy怎么打开

    .npy文件_文件后缀名是npy怎么打开深度学习–迁移学习在使用训练好的模型时,其中有一种保存的模型文件格式叫.npy。打开方式·实现代码:importnumpyasnptest=np.load(‘./bvlc_alexnet.npy’,encoding=”latin1″)#加载文件doc=open(‘1.txt’,’a’)#打开一个存储文件,并依次写入print(test,file=doc)#…

    2025年8月21日
    5
  • document.all用法(一)

    document.all用法(一)1、理解document.all[]  从IE4开始IE的objectmodel才增加了document.all[],来看看document.all[]的Description:ArrayofallHTMLtagsinthedocument.Collectionofallelementscontainedbytheobject.  也就是说document.all

    2022年7月12日
    20
  • Pytest(11)allure报告[通俗易懂]

    Pytest(11)allure报告[通俗易懂]前言allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面。mac环境:

    2022年7月31日
    7
  • StrictMode介绍[通俗易懂]

    StrictMode介绍[通俗易懂]第1页:  【IT168技术  】最新的Android平台中(Android2.3起),新增加了一个新的类,叫StrictMode(android.os.StrictMode)。这个类可以用来帮助开发者改进他们编写的应用,并且提供了各种的策略,这些策略能随时检查和报告开发者开发应用中存在的问题,比如可以监视那些本不应该在主线程中完成的工作或者其他的一些不规范和不好的代码。  Stri

    2022年5月1日
    66

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号