jub*_*0bs 57 c compiler-construction kernighan-and-ritchie
这个问题可能源于我对编译器的误解,但是这里......
人们可以在第一版K&R(第xi页)的序言中找到以下陈述:
操作系统,C编译器和基本上所有UNIX应用程序(包括用于编写本书的所有软件)都是用C语言编写的.
(我的重点)
这是我不明白的事情:C编译器在编译任何C代码之前是否必须自行编译?如果那个C编译器是用C编写的,那么编译它是否需要一个已经存在的C编译器?!
摆脱这种无限回归难题(或鸡与鸡蛋问题)的唯一方法是用K和R编写的用C编写的C编译器实际上是用已经存在的用C语言编写的C编译器编译的.用C编写的C编译器取代了后者.
还是我完全脱了?
Yu *_*Hao 41
它被称为Bootstrapping,引自维基百科:
如果需要语言X的编译器来获取语言X的编译器(用X语言编写),第一个编译器是如何编写的?解决这个鸡肉或鸡蛋问题的可能方法包括:
如果您有兴趣,这里是Dennis Richie的第一个C编译器源代码.
请参阅维基百科页面的鸡肉和鸡蛋部分:
如果需要语言X的编译器来获取语言X的编译器(用X语言编写),第一个编译器是如何编写的?解决这个鸡肉或鸡蛋问题的可能方法包括:
编译器用它编译的语言编写是完全普通的.实现这一目标的一种方法是用其他语言编写一个完整的语言L编译器,然后在L中为L编写一个新的编译器.一个更有趣的方法是为一些L的子集编写一个最小的编译器其他语言,然后使用这个最小子集来改进编译器,使其增加L的可用子集的最小化.这样,可以构建完整的编译器.
| 归档时间: |
|
| 查看次数: |
37310 次 |
| 最近记录: |