作者:c_陈可儿 | 来源:互联网 | 2022-12-06 19:58
这是鸡和蛋的问题.为语言X引导编译器的一个解决方案是使用语言Y,但是如何首先编译语言Y的编译器?!如果你一直跟踪到没有编译器存在的时间,那么第一个编译器如何能够自己编译?请使用高级隐喻来帮助理解.
1> Mike Kinghan..:
让我们把它看作是对任何非C语言的高级语言的编译器都可以用C 1编写
所以我们也可以问:如果我有一台计算机但没有编译器,而且我想要一个C编译器,我该怎么做?
您可以使用
计算机的汇编语言编写C编译器,假设您已
为该计算机安装了汇编程序.
在实践中,这将是愚蠢的努力.更明智的是,你会在汇编代码中编写一个比汇编程序更具表现力和强大功能的中间语言编译器,然后用它来编写一个更具表现力和更强大的编译器......直到你编写了一个C编译器.
每个逐步更多的powerul编译器都是一个程序,它将源语言(您作为发明者已定义)转换为计算机的汇编语言,然后调用汇编程序(您已经拥有)来翻译程序集代码到您的计算机的机器代码2.
如果你还没有装配工怎么办?
然后,您必须在计算机的机器代码中编写汇编程序.在机器代码中从头开始编写一个复杂的程序可能是没有人能够做到的事情.但在任何人编写汇编程序之前 - 机器代码 - 所有程序都必须用机器代码编写.第一批装配工是在20世纪40年代后期开发的.与编译器一样,你最好是迭代地开发汇编程序:首先是一个基本的,用机器代码编写的; 接下来是一个更强大的,用最基本的一个写的......
计算机的机器代码是CPU的本机语言,因此无需进一步转换即可将其转换为可执行代码.您只需要将组成机器代码程序的字节加载到内存区域并让处理器在初始地址加载指令:然后计算机正在运行程序.
第一个C编译器的创建几乎就像上面描绘的那样.C语言的发展是该语言
的发明者Dennis Ritchie所记录的历史
[1]当然,从历史上看,几个主要的高级语言编译器早于C,~1969-73:
Fortran,~1954-57
Algol,~1958-60
COBOL,~1959-61
PL/1,~1963-66
[2]对于现代编译器,这是一个很大的简化.阅读关于中间表征的内容,
并参见例如GCC的概念结构