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

03 - 设计一门语言,到底要设计什么?

假设现在轮到你了:老板说「给我造一门新语言」。你从哪下手?这一章我们不谈实现,只想清楚一件事——一门语言,本质上是在设计什么?

先玩个小游戏:发明一句「命令」

假设我们要让机器人干活,你随手写了一句:

拿 苹果 到 桌子

看起来挺清楚。但机器人立刻懵了,它会反问你两个问题:

  1. 「这句话的格式是什么?」——是「动作 + 东西 + 到 + 地点」吗?那能不能写成「到 桌子 拿 苹果」?逗号要不要?空格算不算数?
  2. 「这句话到底要我干嘛?」——「拿」是抓在手里,还是搬走?「到桌子」是放桌上,还是走到桌子旁边?

你发现没有:要让这句话能被机器执行,你必须先回答这两类问题。而这两类问题,正好就是设计一门语言的两根支柱

支柱一:语法(长什么样)

语法(Syntax)管的是「这门语言的句子该怎么写才算合法」。 它是一套形状规则,规定:

  • 有哪些关键字(保留给语言自己用的词,比如 ifwhilereturn);
  • 句子要按什么顺序和格式排列(比如「先条件,后花括号」);
  • 用什么符号分隔(分号、逗号、括号、缩进……)。

举个真实的例子,几乎所有语言都规定「判断」要这么写:

if (条件) {
    要做的事
}

你要是写成 如果 条件 那么 做事,在这门语言里就是语法错误——不是意思不对,而是「格式不合规矩」,机器压根没法往下读。

类比:语法就像「填表格」。表格规定了哪一栏填什么、按什么顺序填。你填错了格子,工作人员看都不看就退回来——这就是语法错误。

支柱二:语义(是什么意思)

语义(Semantics)管的是「一句合法的句子,到底该产生什么效果」。

同样一句 a = b + c,语法上没问题,但语义要回答一堆问题:

  • + 是数字相加,还是把两段文字拼起来?(1 + 2"你" + "好" 结果完全不同)
  • = 是「判断相等」还是「把右边的值存到左边」?
  • 如果 b 是数字、c 是文字,这句话到底算合法还是报错?

语法保证句子「写得对」,语义保证句子「意思明确、有确定的效果」。 两者缺一不可:语法对但语义乱,机器还是不知道该干嘛。

一门语言的「零件清单」

把上面的东西落到具体,你设计一门语言时,其实就是在定义这么几种零件:

  • 值 / 数据类型:能处理哪些东西?数字、文字、真假……
  • 变量:怎么给数据起名字、存起来、之后再用。
  • 表达式:能算出一个结果的式子,比如 1 + 2a > b
  • 语句:一条完整的指令,比如「赋值」「如果……就……」「重复做……」。
  • 函数:把一段常用的操作打包,起个名字,方便反复调用。

你会发现,无论 C、Python 还是 JavaScript,翻来覆去都是这几样零件。语言之间的差异,很多时候只是「同样的零件,换了个样子和规则」而已。

小结

  • 设计一门语言,核心是设计两根支柱:语法(长什么样)语义(是什么意思)
  • 语法像填表格:规定句子的格式,写错了就是语法错误。
  • 语义规定句子的确切效果:同一个 +,可能是加法也可能是拼接。
  • 落到具体,语言就是在定义一套「零件」:数据类型、变量、表达式、语句、函数。
  • 规则定好了,接下来的问题是:机器拿到你按规则写的代码,是怎么一步步读懂并执行的?下一章给你一张全局流水线图。

上一章 ← 02 - 语言的进化 | 下一章 → 04 - 机器怎么读懂你写的代码? | 回到 README 目录