首页 / 知识库 / 进大厂必备计算机基础 / 一门语言是怎么诞生的

08 - 串起来:造一门你自己的迷你语言

到这里,所有零件我们都见过了。这最后一章不讲新东西,而是把它们串成一条完整的链路——假设老板真让你造一门迷你语言,你从头到尾会怎么想?走完这一遍,前面七章就在你脑子里连成了一张图。

我们的目标很小:造一门只会做一件事的迷你语言,它能算这么一句:

result = 1 + 2

第一步:定规矩(对应第 03 章)

造语言的第一步,是先想清楚语法和语义

  • 语法:我规定一句话长这样——名字 = 表达式。表达式可以是数字,也可以是「数字 + 数字」。
  • 语义+ 就是数学加法;= 表示「把右边算出的值,存到左边这个名字里」。

规矩定死,机器才有据可依。这就是第 03 章说的「两根支柱」。

第二步:拆词(对应第 05 章·词法分析)

用户输入 result = 1 + 2,我先把这串字符切成一个个词,并标好身份:

[result:名字] [=:赋值] [1:数字] [+:运算符] [2:数字]

一堆没结构的字符,变成了一排贴好标签的词。

第三步:搭架子(对应第 05 章·语法分析)

再把这排词按我定的语法规则,搭成一棵结构树:

        =(赋值)
       /        \
   result       +(加法)
               /   \
              1     2

现在机器不光认识每个词,还知道它们的关系了:这是一个赋值,右边是一个加法。

第四步:查含义(对应第 04 章·语义分析)

顺着这棵树检查一遍,讲不讲得通:

  • 12 都是数字,能相加吗?能,类型对得上。
  • result 是个合法的名字吗?是。

没毛病,放行。(如果这里写的是 1 + "苹果",就会在这一步被拦下。)

第五步:让它跑起来(对应第 06 章·编译 or 解释)

现在到了最后一步,我有两种选择——这正是第 06 章讲的两条路:

  • 走解释这条路:我写个解释器,直接顺着这棵树算。看到加法节点,就把 12 加起来得 3;看到赋值节点,就把 3 存进 result读到哪算到哪,当场出结果。
  • 走编译这条路:我把这棵树翻译成机器码(或字节码),生成一个成品,之后拿去跑。

对我们这门迷你语言来说,写个解释器最省事。跑完,result 里就是 3 了。

第六步:让它好用(对应第 07 章·运行时和生态)

如果我还想让别人真的爱用这门语言,就得继续补:

  • 加个运行时,帮用户管好内存、报好错误;
  • 备一套标准库,让用户不用自己实现 print、文件读写这些常用功能;
  • 慢慢养起生态:包管理器、第三方库、文档社区。

这一截决定了它是「一个玩具」还是「一门真能用的语言」。

把整条链路连起来看

定规矩(语法+语义)


拆词  →  搭架子  →  查含义  →  让它跑(编译/解释)


                            补运行时/标准库/生态 → 好用

回头看,一门语言的诞生,本质上就是在回答这么一串问题:

  1. 人怎么表达? → 设计语法和语义(第 02、03 章)
  2. 机器怎么读懂? → 拆词、搭架子、查含义(第 04、05 章)
  3. 怎么真的跑? → 编译或解释(第 06 章)
  4. 怎么变好用? → 运行时、标准库、生态(第 07 章)

而这一切的起点和归宿,始终是我们的那条主线——

编程语言,就是一座架在「人话」和「机器话」之间的翻译桥。 你写的每一行代码,都要走过这座桥,才能变成机器真正执行的 0 和 1。

学完之后,你可以这样验证自己

下次你再用任何一门语言,试着在脑子里回答几个问题,如果都答得上来,这套教程就真的进脑子了:

  • 我这行代码,最终是要变成 0 和 1 的吗?(会 → 你抓住了本质)
  • 这门语言是编译型还是解释型?翻译是提前做还是现场做?
  • 我遇到的这个报错,是词法/语法错误(还没跑就报),还是运行时才出的错?
  • 我选这门语言,除了语法,是不是也在选它背后的生态?

小结

  • 造一门语言的完整思路:定规矩 → 拆词 → 搭架子 → 查含义 → 让它跑 → 补配套。
  • 每一步都对应前面某一章,串起来就是一座完整的「翻译桥」。
  • 一门语言的诞生,就是依次回答:人怎么表达、机器怎么读懂、怎么真的跑、怎么变好用。
  • 记住主线:编程语言 = 人话和机器话之间的翻译桥。
  • 恭喜你走完全程——现在你看任何一门语言,应该都能看出它「为什么长这样」了。

上一章 ← 07 - 光有语言还不够 | 回到 README 目录