第十五章 编译器核心原理概述

117 阅读2分钟

什么是编译器

  1. 编译器其实只是一段程序,它用 用来将“一种语言 A”翻译成“另外-元 种语言 B”。
  2. 其中,语言A通常叫作源代码(source code) 语言B通常叫作目标代码(object coo de 或 target code)。编 译器将源代码翻译为目标代码的过程是叫作编译(compile )。完整的编译过程通常包含词法分析、 语法分析、语义分析、中间代码生成 文、优化、目标代码生成等步骤。

1.jpeg

编译前端和编译后端

  • 整个编译过程分为编译前端和编译后端:
  1. 编译前端包含词法分析、语法分析和语义分析,它通常与目标平台无关,仅负责分析源原代码。
  2. 编译后端则通常与目标平台有关,编译后端涉及中间代码生成和优化以及目标代码生成。
  3. 但是,编译后端并不一定会包含中间代码生成和优化这两个环节,这取决于具体的场景和实现。中间代码生成和优化这两个环节有时也叫“中端”。

Vuejs 的编译过程

在VUE中, vue.js 的模板作为 DSL,其编译流程会有所不 同。对于 Vue.js 模板编译器来说,源代码就是组件的模板,而目标代码是能够在浏览器平台上运行的 JavaScript 代码,或其他拥有 JavaScript 运行时时的平台代码,如图所示。

2.jpeg

vue编译器的编译过程如下:

3.jpeg

  • Vue.js的模版编译器用于把模版编译为渲染函数,主要分为3个步骤:
  1. 分析模版,将其解析为模版AST (parser函数)
  2. 将模版AST转换为用于描述渲染函数的JavaScript AST (transform函数)
  3. 根据JavaScript AST生成渲染函数代码(genertate函数)

4.jpeg

    let ast = parse(templateStr);
    let JSAst = transform(ast);
    let render = generate(JSAst);