码迷,mamicode.com
首页 > 编程语言 > 详细

任何语言都有开发出来编译器的可能?

时间:2016-10-01 12:33:52      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

任何语言都有开发出来编译器的可能?

今天在思考一个问题,毕竟学完编译原理一段时间了,编译器到底可以由哪种语言开发呢?

我们都知道编译程序通常分为下面五个阶段:
1)词法分析
2)语法分析
3)语义分析与中间代码产生
4)优化
5)目标代码生成

当然最难的一点就是目标代码的生成,这一阶段实现了最终的翻译,就是真正把原码翻译成可以被CPU直接计算的机器码(NativeCode)。


在网上看了看,有的网友说C语言的第一代编译器是由B语言写的,因为C语言毕竟是在B语言的基础上设计出的一种新语言。

但是B语言由A语言修改而成的语言,当然B语言的编译器肯定是A语言生成的,那A呢?无穷递归,总有一个结束的地方。

那就是汇编语言,汇编语言写出了第一个简单的编译器,然后这个编译器再生成编译器,不断的生成新的编译器,不断的抛弃旧编译器,这样编译器就越来越成熟,越来

越好用了。

也就是下面的这句话:

机器生汇编,汇编生A,A生B,B生C,C生万物。

理论上来讲,用什么语言都可以编写出编译器,只是效率的问题,因为经过很多步骤的翻译,都最终翻译成了机器码,有的步骤多,效率低,有的步骤少,效率高,当然,我

们现在用的就是效率高的这种。


其实我在想为什么汇编语言生成一个简单的编译器后,可以用新生成的编译器再次生成编译器,例如,C语言开发C的编译器呢?

这是一个递归的思想,举个例子一看就明白了

用一个大的模具可以生成一个A模具,A模具可以做出来B模具,依次往下推,最终这个小模具可以做出来小盒子用来装东西。

第一个大模具肯定是手工做出来的第一个模具,但是有了这个大模具后,后面就可以用他自动的生成更多的模具,后面的各种模具加起来又可以造出来更精致的模具,

所以,自动第一个大模具造出来模具的时候,大模具就可以被抛弃了。

 

任何语言都有开发出来编译器的可能?

标签:

原文地址:http://www.cnblogs.com/greatfish/p/5925570.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!