首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编译器如何编译编译器?

编译器如何编译编译器?
EN

Stack Overflow用户
提问于 2013-07-12 04:10:50
回答 3查看 9.3K关注 0票数 9

我有高级编程背景,对学习低级编程很感兴趣。我想知道编译器是如何编译的?

在看了维基上的一些文章后,Numerical machine code被认为是最底层的语言,但必须有一个编译器来编译这个机器代码。这个编译器是用什么语言写的?

EN

回答 3

Stack Overflow用户

发布于 2013-07-12 04:17:35

你可以随时使用你最喜欢的编译器A来编写另一个编译器,比如B。在这个B中,你添加了一些额外的功能,所以它很容易成为你最喜欢的编译器,你可以用它来编写编译器C,...

那么该如何开始呢?在过去,人们只是简单地在内存中填入原始数字,由CPU直接解释。这就是为什么源代码通常被称为代码。一旦一个最小的编译器以这种方式编程,就可以执行它来创建另一个用它编译的语言编写的编译器。这也可以用来创建更高级别的,以此类推。

事实上,将原始指令代码填充到内存本身可以被视为零级编译过程,其中人就是编译器。

一种给定语言的编译器通常是用同一种语言编写的。例如,C编程语言就是这种情况。这在某种程度上不是巧合,因为谁知道一门语言足够好,敢为它编写编译器,就可能会把这种语言作为他最喜欢的编程语言之一。这只是一个典型的例子,并不是必须的,因为有许多语言可供选择,包括那些特别适合编译器构造的语言。

票数 8
EN

Stack Overflow用户

发布于 2013-07-12 04:16:48

数字机器代码是二进制的。1和0。编译意味着将其简化为某种更低的形式,因此它并不是真正编译的。

例如,来自您引用的维基文章:For example, on the Zilog Z80 processor, the machine code 00000101, which causes the CPU to decrement the B processor register, would be represented in assembly language as DEC B.

因此,当您编写Z80汇编语言时,您将拥有一个编译器,并且指令DEC B将被编译为'00000101‘--反之亦然。

票数 6
EN

Stack Overflow用户

发布于 2013-07-12 04:21:32

Numerical Machine code代表电路的一系列off和on状态,是所有电子数据的最低级别。这种低级语言没有所谓的“编译器”,相反,计算机中的电路是以这样一种方式组合和构造的,即通过读取由高或低电态实现的代码中的on和off来“解释”它们。总之,这些高电平或低电平状态导致不同的门/电路打开或关闭,通常表现不同。在Electronic Gates上查看更多信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17602546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档