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

在C1的基础上设计C语言的又一个子集C2语言 , C2语言比C1复杂 , 但是仍然不是完整的C语言 , 开发出C2语言的编译器……如此直到CN , CN已经足够强大了 , 这时候就足够开发出完整的C语言编译器的实现了 。

至于这里的N是多少 , 这取决于你的目标语言(这里是C语言)的复杂程度和程序员的编程能力 。

那么这种大胆的子集简化的方法 , 又有什么理论依据呢?

先介绍一个概念 , “自编译”Self-Compile 。

对于某些具有明显自举(不知道哪个鬼才起的名字)性质的强类型编程语言

可以借助它们的一个有限小子集

通过有限次数的递推来实现对它们自身的表述

(所谓强类型就是程序中的每个变量必须声明类型后才能使用 , 比如C语言 , 相反有些脚本语言则根本没有类型这一说法比如python 。 )

满足自编译这样的语言有C、Pascal、Ada等等 , 至于为什么可以自编译 , 可以参见清华大学出版社的《编译原理》 , 书中实现了一个Pascal的子集的编译器 。

推荐阅读