AST和Babel

46 阅读1分钟

B站学习视频

AST

1、词法分析:将源代码转换成单词流,称为词法单元,每个词法单元包含一个标识符和属性值,比如变量名、数字、操作符等

2、语法分析,将词法单元流转换成抽像语法树,会产生ast,标记所构成的数据结构,表示源代码的结构和规则。

3、语义分析:在AST上执行类型检查,作用域检查等操作,以确保代码的正确性和安全性

4、代码生成:基于AST生成目标代码,包括优化代码结构、生成代码文本、进行代码压缩。

**下面是一个简单的JavaScript编译器示例代码: **

lexer 是词法分析器,将源代码转换成词法单元流;

parser 是语法分析器,将词法单元流转换成抽象语法树;

semanticAnalysis是语义分析器,对抽象语法树进行语义分析;

codeGeneration 是代码生成器,将分析后的AST生成目标代码。

image.png

image.png

Babel

babel官网地址

babel是一个流行的JavaScript编译器

babel包含以下几个核心内容:

  1. @babel/core
  2. @babel/parser
  3. @babel/traverse
  4. @babel/generate
  5. 辅助相关,type polyfill temple等

babel的预设babel-preset-env

image.png

babel除了转译code,还可以处理polyfill

babel的工作过程

  1. 解析(Parsing):首先,Babel解析源代码(babel-parser)并构建成抽象语法树(AST
  2. 转换(Transformation):将转换后的AST运用指定的规则和插件修改代码(plugins/presets
  3. 生成(Generation)最后修改后的AST生成目标代码(babel-generator -> sourcemap

image.png