z-memo / interview

我们缺的从来都不是前端/后端工程师,而是工程师(或者那些会系统思考,并总是想着解决问题的人)
27 stars 3 forks source link

babel 怎么把字符串解析成 AST,是怎么进行词法/语法分析的? #71

Open MrSeaWave opened 3 years ago

MrSeaWave commented 3 years ago

配置文件的加载顺序

Plugin 会从前到后顺序执行, Preset 的顺序则 刚好相反(从后向前)。(Preset是 plugin 的集合)

babel解析过程

大致分为下面四步:

  • Babel

    • input => tokenizer => tokens,先对输入代码进行分词,根据最小有效语法单元,对字符串进行切割。
    • tokens => parser => AST,然后进行语法分析,会涉及到读取、暂存、回溯、暂存点销毁等操作。
    • AST => transformer => newAST,然后转换生成新的 AST。
    • newAST => codeGenerator => output,最后根据新生成的 AST 输出目标代码。

具体见下方链接文件的代码:

MrSeaWave commented 3 years ago

babel是一个javascript编译器,用来将es6语法编译成es5。

image

第1步 解析(Parse)

通过解析器babylon将代码解析成抽象语法树。

第2步 转换(TransForm)

通过babel-traverse plugin对抽象语法树进行深度优先遍历,遇到需要转换的,就直接在AST对象上对节点进行添加、更新及移除操作,比如遇到箭头函数,就转换成普通函数,最后得到新的AST树。

第3步 生成(Generate)

通过babel-generator将AST树生成es5代码。

MrSeaWave commented 3 years ago

具体见 https://mp.weixin.qq.com/s/fH2xYo_Bad0mgvo0OdYRZQ

MrSeaWave commented 3 years ago

Babel

定义

Babel概述