0%

《Crafting Interpreters》读书笔记

要点

[源代码] –> 词法分析 –> [token串] –> 编译器第一轮(语法分析) –> [语法树] –> 编译器第二轮(中间语言转换/翻译) –> [中间语言] –> 中间语言 VM 执行/解释 –> [原生机器语言]

编译器第一轮和第二轮可以合并成一轮,直接输出中间语言,在现代语言实现里不常见,只用于教学。

以 VM 为分界点,前面可以看成 解释型 语言,用 VM 来解释执行,可能用到即时编译。
如果走完全过程,发布原生机器语言,就是 编译型 语言

三种解释器/编译器

walk-through

建立出语法树,每次运行的时候遍历语法树,速度较慢

解释型语言

生成中间语言

编译型语言

后两者都可以实现为:

  1. 先建立出语法树,
  2. 然后设计一个基于 stack 的虚拟机,
  3. 接着将语法树转换/翻译成基于 stack 的虚拟机指令(栈、二叉树结构其实是等价的)。

代码和数据

程序由代码和数据组成,代码被表示成语法树AST,数据需要创建出数据结构来放置,如 hash, string, stack