04 - 机器怎么读懂你写的代码?(翻译流水线总览)
规则定好了,你也照着规则写出了一段代码。现在最关键的问题来了:这段人话,是怎么一步步变成机器能跑的东西的?
这一章我们先看全局地图——有哪几步、每一步干嘛。看懂了地图,后面几章再钻进去看细节,就不会迷路。
翻译不是一步到位,而是一条流水线
很多人以为「翻译代码」是啪一下就完成的。其实不是。它更像一条工厂流水线:一段原材料(你的代码),经过一个个工位的加工,最后变成成品(机器能执行的东西)。
这条流水线大致是这样:
你写的源代码
│
▼
① 拆词(词法分析) 把一长串字符切成一个个「词」
│
▼
② 搭架子(语法分析) 把这些词按规则搭成一棵「结构树」
│
▼
③ 查含义(语义分析) 检查这棵树讲不讲得通、有没有意义错误
│
▼
④ 生成机器能跑的东西 翻成机器码 / 中间代码
│
▼
真正跑起来
一句话看懂每个工位
我们拿这行代码走一遍,先建立直觉(细节留到后面章节):
result = 1 + 2
① 拆词(词法分析)
把这一长串字符切成一个个有意义的「词」:result、=、1、+、2。
就像你读英文句子,第一步是先把字母流断成一个个单词。
② 搭架子(语法分析)
把这些词按语法规则组织成一棵有结构的「树」,表达出「把 1 + 2 的结果,赋值给 result」这个结构。
就像小学语文分析句子成分:谁是主语、谁是谓语、谁是宾语。
③ 查含义(语义分析)
检查这棵树讲不讲得通:result 这个名字之前定义过吗?1 + 2 类型对得上吗?能不能真的相加?
就像老师批改作文:句子结构没问题,但意思有没有说通、有没有前后矛盾。
④ 生成机器能跑的东西 确认没问题后,把这棵树翻译成机器码(或者一种叫「中间代码」的过渡形态),机器就能真正执行了。
到这一步,你的「人话」终于变成了机器认识的 0 和 1。
为什么非要分这么多步?
你可能会问:干嘛这么麻烦,不能一口气翻完吗?分步有几个实实在在的好处:
- 各司其职:每个工位只干一件简单的事,好设计、好维护、出错好排查。
- 能提前发现错误:还没真正跑,就能在「拆词」「搭架子」「查含义」这几步把很多错误挡下来(这就是为什么代码常常「还没运行就报错」)。
- 好复用:中间加工出来的半成品(比如那棵树、中间代码),可以拿去做很多事——换个后端就能生成不同机器的代码。
记住这张流水线图,它是整套教程的骨架。接下来我们挑其中最能体现「翻译智慧」的两步——拆词和搭架子——单独展开讲。
小结
- 翻译代码不是一步到位,而是一条流水线:拆词 → 搭架子 → 查含义 → 生成机器能跑的东西。
- 拆词=断句成词;搭架子=分析句子结构成一棵树;查含义=检查讲不讲得通;最后翻成机器码。
- 分步的好处:各司其职、能提前发现错误、半成品可复用。
- 这也解释了为什么代码常常「还没运行就报错」——错误在前面的工位就被拦下了。
- 下一章我们钻进前两个工位:词法分析和语法分析,看看「一串字符」是怎么变成「有结构的意思」的。
上一章 ← 03 - 设计一门语言要设计什么 | 下一章 → 05 - 拆词和搭架子:词法分析 & 语法分析 | 回到 README 目录