第一个C编译器是如何编写的?

时间:2013-08-08 12:00:06

标签: c assembly compiler-construction

第一个C编译器是用C本身编写的吗?然后,它是如何执行和编译的?或者,这个编译器是用汇编语言编写的吗?

3 个答案:

答案 0 :(得分:73)

在C语言历史的Dennis Ritchie's writeup中很好地描述了它。

仅仅总结他在那里写的内容,使用他的文章来获得更精细的细节。 C以BCPL语言开头,Ken Thomson可以访问在General Electrics 635主框架上运行的编译器。对该语言不满意,Thomson使用BCPL为B语言编写了一个编译器,这是BCPL之外的一个进化步骤,它消除了BCPL中的一些技术问题。

他们使用B在他们的PDP-7小型机上创建程序,虽然它们大多数只是玩具程序,但机器的硬件功能非常有限。 Thomson采取的一个重要步骤是在B本身中重写B编译器。一个常见的自举步骤。

然后通过称为NB(新B)的短暂中间步骤逐渐调整编译器以开始类似于C. PDP-11小型机在该步骤中发挥了作用,为他们提供了足够的空间来改进语言和编译器。

答案 1 :(得分:18)

第一个C编译器不是用C编写的,通常在编写编译器时我们使用汇编语言或其他编程语言,并且通常在第一次编译之后,编译器会用它的本地语言重写。

有很多编程语言都是用C语言编写的,然后用他们的母语重写:例如Java,Ada ......

答案 2 :(得分:4)

阅读丹尼斯·里奇关于primevalC的说明表明,与鸡和蛋一样,C通过引导从一种前体语言和它自己的编译器发展而来。物种形成的时间尺度比Gallus gallus domesticus快。

甚至可以看到编译器源代码在进化动荡中陷入困境。该注释链接到从磁带备份还原的两个快照。此代码还有been placed on github.这些快照构成了中间化石,比K& R语法早几年。丹尼斯'其中一个磁带的描述显示它是一个被引导的结构的冻结框架:

  

" prestruct-C"在我开始更改之前是编译器的副本   它使用结构本身。

换句话说,编译器已经扩充为支持结构,但还没有使用它们。是制作磁带备份的好时机......