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

编译编译器
EN

Stack Overflow用户
提问于 2013-02-01 18:43:34
回答 3查看 206关注 0票数 2

可能重复: 引导语言

编译器本身是用高级语言编写的。那么计算机如何理解编译器呢?它们将HLLs转换成机器级代码,但是计算机如何理解它们呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-01 18:48:04

一个编译器是用机器代码编写的。其余的可以只使用它或其他已经编译的编译器(包括它本身的未来版本,它可以使用已经存在的版本重新编译新版本)。

P.S.注意到大多数编译器不会将“高级代码”编译成机器代码,它们有两个组件,前端后端。前端将代码编译成中间中间语言,后端将中间语言编译成机器代码。

这确保了,如果您有n语言和m体系结构,您只需要n+m组件,而不需要n*m,如果您有每种语言/机器的编译器。

票数 3
EN

Stack Overflow用户

发布于 2013-02-01 18:53:13

需要用汇编程序代码编写一个版本。然后,可以使用此编译器编译其他程序,包括其他编译器。

然而,一个有趣的论文/观察是,编译器可以学习。也就是说,您可以删除部分源代码,并且仍然保留该功能;)一个例子是\n字符的解析。下面的文章很好地展示了这一点!http://cm.bell-labs.com/who/ken/trust.html

票数 1
EN

Stack Overflow用户

发布于 2013-02-01 18:56:56

语言X的编译器,用编写的语言Y (X和Y可能是,也可能不是同一种语言)必须用Y语言的编译器编译成机器代码(如果Y是要解释的,则编译器必须由Y解释器执行)。这是无法避免的,真的。除非Y是装配的。也就是说,在程序集中编写X编译器。

如果您想用语言( language X for language X)编写编译器,那么您可以这样做:

  1. 用另一种语言(例如Y )为X语言编写编译器,编译器已经存在(或在程序集中)
  2. 然后用X编写X编译器,并使用用Y语言编写的X编译器(在步骤1中编写的)编译它。
  3. 如果新的X编译器足够完整,它应该能够编译自己的副本(因为它们毕竟是X源)。

这叫做http://en.wikipedia.org/wiki/Bootstrapping_%28compilers%29

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

https://stackoverflow.com/questions/14652973

复制
相关文章

相似问题

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