你知道第一个C语言C++编译器是如何诞生的吗( 四 )

那么这种大胆的子集简化的方法 , 是怎么实现的 , 又有什么理论依据呢?先介绍一个概念 , “自编译”Self-Compile , 也就是对于某些具有明显自举性质的强类型(所谓强类型就是程序中的每个变量必须声明类型后才能使用 , 比如 C 语言 , 相反有些脚本语言则根本没有类型这一说法)编程语言 , 可以借助它们的一个有限小子集 , 通过有限次数的递推来实现对它们自身的表述 , 这样的语言有 C、Pascal、Ada 等等 , 至于为什么可以自编译 , 可以参见清华大学出版社的《编译原理》 , 书中实现了一个 Pascal 的子集的编译器 。 总之 , 已经有计算机科学家证明了 , C 语言理论上是可以通过上面说的 CVM 的方法实现完整的编译器的 , 那么实际上是怎样做到简化的呢?这张图是不是有点熟悉?对了就是在讲虚拟机的时候见到过 , 不过这里是 CVM(C Language Virtual Machine) , 每种语言都是在每个虚拟层上可以独立实现编译的 , 并且除了 C 语言外 , 每一层的输出都将作为下一层的输入(最后一层的输出就是应用程序了) , 这和滚雪球是一个道理 。 用手(汇编语言)把一小把雪结合在一起 , 一点点地滚下去就形成了一个大雪球 , 这大概就是所谓的 0 生 1 , 1 生 C , C 生万物吧?

推荐阅读