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

Posted GreatAnt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了任何语言都有开发出来编译器的可能?相关的知识,希望对你有一定的参考价值。

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

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

我们都知道编译程序通常分为下面五个阶段:
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模具,依次往下推,最终这个小模具可以做出来小盒子用来装东西。

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

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

 

以上是关于任何语言都有开发出来编译器的可能?的主要内容,如果未能解决你的问题,请参考以下文章

c语言编译软件都有哪些

C语言编译器icc与gcc编译出来的执行文件有啥区别?

采用静态编译方式防止易语言小程序被误杀

JAVA的编译器都有哪些?

ccs中c编译器生成的段都有哪些

eclipse下maven管理web开发,jar包无法编译出来的问题