babel原理,web前端框架开发实例,前端开发学习内容

本文详细介绍了如何将代码转换为抽象语法树(AST),包括词法分析和语法分析步骤,以及Babel编译流程中的解析阶段。通过实例展示了JavaScript代码如何被转化为AST并进行操作。
摘要由CSDN通过智能技术生成
  • 解析: 将代码(其实就是字符串)转换成 AST( 抽象语法树)

  • 转换: 访问 AST 的节点进行变换操作生成新的 AST

  • 生成: 以新的 AST 为基础生成代码

抽象语法树(AST)

举个例子:

// JS

const add = (a,b) => a+b;

// 上面代码生成的AST

{

“type”: “Program”,

“body”: [

{

“type”: “VariableDeclaration”, // 变量声明

“declarations”: [ // 具体声明

{

“type”: “VariableDeclarator”, // 变量声明

“id”: {

“type”: “Identifier”, // 标识符(最基础的)

“name”: “add” // 函数名

},

“init”: {

“type”: “ArrowFunctionExpression”, // 箭头函数

“id”: null,

“expression”: true,

“generator”: false,

“params”: [ // 参数

{

“type”: “Identifier”,

“name”: “a”

},

{

“type”: “Identifier”,

“name”: “b”

}

],

“body”: { // 函数体

“type”: “BinaryExpression”, // 二项式

“left”: { // 二项式左边

“type”: “Identifier”,

“name”: “a”

},

“operator”: “+”, // 二项式运算符

“right”: { // 二项式右边

“type”: “Identifier”,

“name”: “b”

}

}

}

}

],

“kind”: “const”

}

],

“sourceType”: “module”

}

在这里插入图片描述AST explorer

Babel工作流程

  1. Parse(解析)

Parse阶段分为两个阶段:词法分析和语法分析

  • 词法分析:可以看成是对代码进行“分词”,它接收一段源代码,然后执行一段 tokenize 函数,把代码分割成被称为Tokens(令牌流)。

[

{ “type”: “Keyword”, “value”: “const” },

{ “type”: “Identifier”, “value”: “add” },

{ “type”: “Punctuator”, “value”: “=” },

{ “type”: “Punctuator”, “value”: “(” },

{ “type”: “Identifier”, “value”: “a” },

{ “type”: “Punctuator”, “value”: “,” },

{ “type”: “Identifier”, “value”: “b” },

{ “type”: “Punctuator”, “value”: “)” },

{ “type”: “Punctuator”, “value”: “=>” },

{ “type”: “Identifier”, “value”: “a” },

{ “type”: “Punctuator”, “value”: “+” },

{ “type”: “Identifier”, “value”: “b” }

]

模拟实现

function tokenize(code) {

if (!code || code.length === 0) {

return [];

}

var current = 0; // 记录位置

var tokens = []; // 定义一个空的 token 数组

var LETTERS = /[a-zA-Z$_]/i;

var KEYWORDS = /const/; // 模拟一下判断是不是关键字

var WHITESPACE = /\s/;

var PARENS = /(|)/;

var NUMBERS = /[0-9]/;

var OPERATORS = /[+*/-]/;

var PUNCTUATORS = /[~!@#$%^&*()/|,.<>?"';:_±=[]{}]/;

// 从第一个字符开始遍历

while (current < code.length) {

var char = code[current];

// 判断空格

if (WHITESPACE.test(char)) {

current++;

continue;

}

// 判断连续字符

if (LETTERS.test(char)) {

var value = ‘’;

var type = ‘Identifier’;

while (char && LETTERS.test(char)) {

value += char;

char = code[++current];

}

// 判断是否是关键字

if (KEYWORDS.test(value)) {

type = ‘Keyword’

}

tokens.push({

type: type,

value: value

});

continue;

}

// 判断小括号

if (PARENS.test(char)) {

tokens.push({

type: ‘Paren’,

value: char

});

current++;

continue;

}

// 判断连续数字

if (NUMBERS.test(char)) {

var value = ‘’;

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

计算机网络

  • HTTP 缓存

  • 你知道 302 状态码是什么嘛?你平时浏览网页的过程中遇到过哪些 302 的场景?

  • HTTP 常用的请求方式,区别和用途?

  • HTTPS 是什么?具体流程

  • 三次握手和四次挥手

  • 你对 TCP 滑动窗口有了解嘛?

  • WebSocket与Ajax的区别

  • 了解 WebSocket 嘛?

  • HTTP 如何实现长连接?在什么时候会超时?

  • TCP 如何保证有效传输及拥塞控制原理。

  • TCP 协议怎么保证可靠的,UDP 为什么不可靠?

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

算法

  • 链表

  • 字符串

  • 数组问题

  • 二叉树

  • 排序算法

  • 二分查找

  • 动态规划

  • BFS

  • DFS

  • 回溯算法

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

算法

  • 链表

  • 字符串

  • 数组问题

  • 二叉树

  • 排序算法

  • 二分查找

  • 动态规划

  • BFS

  • DFS

  • 回溯算法

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值