什么是编译器

来源:互联网 发布:收售淘宝店铺 编辑:程序博客网 时间:2024/06/14 16:59

什么是编译器,查阅百度:编译器就是将“高级语言”翻译为“机器语言(低级语言)”的程序。那高级语言自然是指C#,C++等一些高度抽象化的语言。而机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义,例如某台计算机字长为16位,即有16个二进制数组成一条指令或其它信息。也就是CPU生产厂商在CPU硬件中实现的能支持的指令。一般都包括分配内存,计算等功能。

那编译器的运行过程是什么:

这些都是可以理解的,但是我一直想不通既然高级语言转化成机器语言需要编译器,那么编译器又是用什么语言写的呢?就是这个问题把我引入了误区。

今天下午搜索了各种资料,终于有所理解。首先,一开始进入了误区,错在把高级语言和编译器概念混淆了,高级语言是一门语言,是一些字符串,反映到内存中就是一堆一堆的100010、001000、00之类的数据。而编译器不一样,它是一个处理流程,是将这些存在内存中的10001、11010、0001数据转换成计算机能识别的机器语言的流程,所以说它的实现方式不是重点,重要的是它能完成这些功能。

但是计算机只能识别机器语言,所以只能用原生的机器语言来写这个编译流程也就是编译器(即一组机器指令如图)。然后将高级语言读入再输出,就得到了高级语言对应的机器语言。



接下来,我们又有了一种新的语言M语言需要编译成机器语言,自然我们可以用之前的方法,用机器语言在写一个编译器。可是现在情况不一样了,CPU现在除了能够识别机器语言外,还可以通过之前写的编译器来识别New语言,虽然它要通过之前写的编译器才能识别,如果在不考虑效率问题的话,那他和机器语言就等价了,也就是说我们现在有两种语言可供选择来开发M语言的编译器。但是由于New语言显然要比机器语言更加易于被人理解,所以我们选用了New语言来开发M语言的编译器。然后再将new语言开发的编译器编译为机器语言,这时候我们就有了一个新的编译器:M语言的编译器。



接着我们如果还有新的X语言,那么我们又可以用M语言来作为开发编译器的工具了,因为它也有了自己的编译器了。具体的过程是和用New语言开发编译器一样的。

终于,我解决了我的疑惑,所谓的编译器只不过是一组机器语言的指令集合而已,至于怎么得到这个集合,在没有其它语言编译工具的时候,只能用机器语言来写,当某种语言有了自己的编译器,那么就可以用这种语言来实现了,也就是通过它来实现,然后再将它用它的编译器转化成机器语言。

扩展,当然用机器语言直接开发的编译器效率肯定是最高的,因为如果用高级语言,这里指New语言开发编译器完成编码后,还是要将他转化机器语言,这中间的性能肯定有损耗。可是用机器语言开发的话不管是难度还是时间成本上会远远超过用高级语言进行开发。

所以一开始的汇编语言编译器肯定是用机器语言开发的。后来又有了C语言,那么一开始的C语言的编译器就可以用汇编语言来进行开发了。接着有了用汇编语言实现的C语言编译器后,我们就可以用这个编译器来实现自己的编译器,也就是说,可以用C语言+用汇编语言生成的编译器开发C语言的编译器,这是一个不停迭代的过程。




原创粉丝点击