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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Nginx报错:Sorry, the page you are looking for is currently unavailable. Please try again later.

    Nginx报错:Sorry, the page you are looking for is currently unavailable. Please try again later.

    2021年10月12日
    127
  • 2020年开始,中国程序员前景一片灰暗,是这样吗?[通俗易懂]

    2020年开始,中国程序员前景一片灰暗,是这样吗?[通俗易懂]背景:汇总了下老王在其他平台的原创回复,欢迎关注老王原创公众号【软件老王】,关注不迷路。1、感觉中国程序员前景一片灰暗,是这样吗?老王观点:(1)个人认为谈不上灰暗,过去十年是互联网快速爆发的十年,每个行业发展了一定程度,都会慢慢趋于平稳,软件行业也不例外。(2)其实最近也有这种感觉,感觉软件行业比以前难做了,随着政府推动的互联网+,软件行业已经进入各行各业,认为后面可能会像美国一样,成为一个基础行业,待遇和机会也会趋同于其他行业,但是不知道能不能像美国那样,到50多岁了还能写的上代码。(3

    2022年10月11日
    3
  • 教大家一个可以用迅雷全速下载百度网盘文件的方法「建议收藏」

    教大家一个可以用迅雷全速下载百度网盘文件的方法「建议收藏」本帖最后由古道吹西风于2017-8-2822:11编辑 百度的各种限制,相信大家都是苦难言,每年赚那么多的钱,还这样小气,开通会员也一样的下载慢,我只说“我去年买了个表”这个方法网上有教程,大家也可以去网上搜一下,先看一下我家的网速,小区宽带6M 再看看下载速度 是不是全速,方法如下1.下载tampermonkey,这个google浏览器插件,插件可以去百度搜索下载。如下图 2.上传完…

    2022年10月8日
    4
  • 基于MATLAB的矩阵及元素赋值[通俗易懂]

    *内容摘要:该代码用于实现在MATLAB中矩阵及元素的赋值*文件标识:无*作者:*完成日期:2019-3-10*问题描述:给矩阵a赋值>>a=[147;258;369]a=147258369*问题描述:给矩阵全行赋予值…

    2022年4月8日
    87
  • 批处理字符串截取_批处理 字符串 比较大小

    批处理字符串截取_批处理 字符串 比较大小解决批处理for体内的字符串截取问题背景:笔记想读取bat同目录下a文件夹下的所有文件名,并在for循环体下截取前两位字符串,如图代码块@echooff&setlocalenabledelayedexpansionsetfa=C:\Users\GilbertXiao\Desktop\a\afor/f”delims=”%%ain(‘dir/b/on%fa%\*.

    2022年10月12日
    4
  • 阿里ECS云服务器买来之后必做的几个操作

    阿里ECS云服务器买来之后必做的几个操作今天我为大家带来的是如何在云服务器中配置自己的环境。在这里先说明一下我的配置,我使用的是阿里云服务器ECS+Ubuntu20.0464位来实现的,不同的服务器和不同的系统版本可能会导致操作有些许不同,如果你是华为云或者腾讯云又或者是百度云的用户,还请自己多多摸索,大致的思路是一样的。废话不多说,我们现在就开始来着手实现吧——此处我们是假设你已经购买好阿里云ECS云服务器哦!1.检查你的安全组首先,我们要做的是打开你的安全组,检查你的22端口是否被开启,只有当端口

    2022年5月4日
    81

发表回复

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

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