第一种语言是如何编译的

时间:2018-08-23 04:32:47

标签: compiler-construction bootstrapping

这是鸡和鸡蛋的问题。引导语言X的编译器的一种解决方案是使用语言Y,但是如何首先编译语言Y的编译器呢?如果一直追溯到没有编译器的时候,那么第一个编译器如何能够自我编译?请使用高级隐喻来帮助理解。

1 个答案:

答案 0 :(得分:5)

我们将其理解为适用于非C语言的任何高级语言的编译器 可以用C 1

编写

所以我们也可能会问:如果我有一台计算机但没有编译器,并且我想要C编译器, 我该怎么做?

您可以在assembly language中编写C编译器 假设您有assembler 用于那台计算机。

在实践中,这将非常愚蠢。更明智的做法是,用汇编代码编写 一个比汇编程序更具表现力和功能的中间语言编译器, 然后用它来编写更具表现力和功能的... 已经编写了C编译器。

您的每个功能越来越强大的编译器都是可以翻译的程序 它的源语言(您作为发明人定义的语言)进入程序集 语言,然后调用汇编程序(您已经拥有) 将汇编代码转换为计算机的机器代码 2

如果您还没有汇编程序怎么办?

然后,您必须在计算机的machine code中编写汇编程序。写作 机器代码中从头开始的复杂程序可能仍然没有人拥有 排骨要做。但在有人用机器代码编写汇编器之前, 所有程序都必须由机器代码组成。开发了第一批组装机 在late 1940s中。 与编译器一样,明智的是迭代地开发汇编程序:首先 初级的,用机器代码编写的;接下来是一个更强大的 基本的...

计算机的机器代码是CPU的本地语言,因此无需进一步翻译 需要将其转换为可执行代码。您只需要以某种方式加载组成 机器代码程序进入内存区域,并让处理器在以下位置加载指令 初始地址:则计算机正在运行该程序。

第一个C编译器的创建与上面概述的差不多。 The Development of the C Language 是该语言的发明者Dennis Ritchie

记录的历史

[1]历史上当然有几种主要的高级语言 C, ~1969-73之前的编译器:

[2]对于现代编译器,这是一个很大的简化。了解有关Intermediate Representation的信息 并看到例如The Conceptual Structure of GCC