为什么C语言编译器能用C语言编写?( 三 )

因此第一个C语言编译器的原型完全可能是用B语言或者混合B语言与PDP汇编语言编写的 。

事实上 , B语言的执行效率比较低 , 但是如果全部用汇编语言来编写 , 不仅工作量巨大 , 而且汇编语言的可读性极差 , 很容易就会出错!

上一张图大家感受一下这巨大的差别!!!

C语言

为了克服这个困难 , 早期的C语言编译器就采取了一个取巧的办法先用汇编语言编写一个C语言的一个子集的编译器 , 再通过这个子集去递推完成完整的C语言编译器 。

大致过程如下

C语言

先创造一个只有C语言最基本功能的子集 , 记作C0语言 , C0语言已经足够简单了 , 可以直接用汇编语言编写出C0的编译器 。

依靠C0已有的功能 , 设计比C0复杂 , 但仍然不完整的C语言的又一个子集C1语言 , 其中C0属于C1 , C1属于C , 用C0开发出C1语言的编译器 。

推荐阅读