什么是编译器
- 编译器其实只是一段程序,它用 用来将“一种语言 A”翻译成“另外-元 种语言 B”。
- 其中,语言A通常叫作源代码(source code) 语言B通常叫作目标代码(object coo de 或 target code)。编 译器将源代码翻译为目标代码的过程是叫作编译(compile )。完整的编译过程通常包含词法分析、 语法分析、语义分析、中间代码生成 文、优化、目标代码生成等步骤。
编译前端和编译后端
- 整个编译过程分为编译前端和编译后端:
- 编译前端包含词法分析、语法分析和语义分析,它通常与目标平台无关,仅负责分析源原代码。
- 编译后端则通常与目标平台有关,编译后端涉及中间代码生成和优化以及目标代码生成。
- 但是,编译后端并不一定会包含中间代码生成和优化这两个环节,这取决于具体的场景和实现。中间代码生成和优化这两个环节有时也叫“中端”。
Vuejs 的编译过程
在VUE中, vue.js 的模板作为 DSL,其编译流程会有所不 同。对于 Vue.js 模板编译器来说,源代码就是组件的模板,而目标代码是能够在浏览器平台上运行的 JavaScript 代码,或其他拥有 JavaScript 运行时时的平台代码,如图所示。
vue编译器的编译过程如下:
- Vue.js的模版编译器用于把模版编译为渲染函数,主要分为3个步骤:
- 分析模版,将其解析为模版AST (parser函数)
- 将模版AST转换为用于描述渲染函数的JavaScript AST (transform函数)
- 根据JavaScript AST生成渲染函数代码(genertate函数)
let ast = parse(templateStr);
let JSAst = transform(ast);
let render = generate(JSAst);