任何语言都有开发出来编译器的可能?
今天在思考一个问题,毕竟学完编译原理一段时间了,编译器到底可以由哪种语言开发呢?
我们都知道编译程序通常分为下面五个阶段:
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模具,依次往下推,最终这个小模具可以做出来小盒子用来装东西。
第一个大模具肯定是手工做出来的第一个模具,但是有了这个大模具后,后面就可以用他自动的生成更多的模具,后面的各种模具加起来又可以造出来更精致的模具,
所以,自动第一个大模具造出来模具的时候,大模具就可以被抛弃了。