码迷,mamicode.com
首页 > 其他好文 > 详细

编译器是如何编写的

时间:2017-12-15 20:11:40      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:post   static   生成   高级语言   get   代码   建立   lin   c51   

 

     在学编译原理的时候,就有一个想法,现在的编译器是如何编写的。如果说是用纯粹的机器代码编写,这显然是不可能的,

因为编译器是个非常复杂且庞大的软件工程,用纯机器代码编写所花费的时间这显然是不能接受的。有人就会说,用高级语言

编写编译器呗,那么问题就来了,高级语言是不能被计算机直接识别的,所以这种说法也显然是不正确的。机器语言的开发效率

太低,高级语言又无法被计算机直接识别,所以我个人就想,会不会是采用一种折中的办法,即编译器最核心的部分用机器语言

编写,剩下其他的部分用高级语言编写。后来查看一下其他资料,发现果然是这样。这种情况被称为自编译

 

     大致过程如下:

设有自编译语言L,可以通过自展的方法为机器A生成该语言的编译程序L.Ao。首先,将语言L划分为核心部分和扩充部分,其核心部分为L1,其扩充部分分别为L2、L3、…、Ln,即L=L1+L2+L3+…+Ln
先用A机的机器语言或汇编语言编写核心语言L1的编译程序L1.Ao,然后用语言L1编写语言(L1+L2)的编译程序(L1+L2).L1。由于(L1+L2)语言仅是在核心语言L1的基础上稍加扩充,所以,其编译程序一般能够用核心语言编写出来。利用语言的自编译性,语言(L1+L2)的编译程序(L1+L2).L1经L1.Ao编译以后,则可生成(L1+L2).Ao。然后用语言(L1+L2)编写语言(L1+L2+L3)的编译程序(L1+L2+L3).(L1+L2),该编译程序经(L1+L2).Ao编译以后,生成语言(L1+L2+L3)的编译程序(L1+L2+L3).Ao,……,如此重复下去,其过程就像滚雪球一样直到生成整个语言L的编译程序L.Ao为止。
由于开始通过低级语言建立的编译程序可做得比较小而简单,因而可以在较少的人力和时间的情况下建立起来,以后都是用高级语言本身来编写较大语言的编译程序。由于有用高级语言进行程序设计的优点,所以这样做的结果是比用低级语言直接一次生成一个完整的编译程序要快,而且在程序的可靠性方面也更能得到保证。 
技术分享图片
 
通过这种方式大大提高了编译器的开发效率

编译器是如何编写的

标签:post   static   生成   高级语言   get   代码   建立   lin   c51   

原文地址:http://www.cnblogs.com/mlgjb/p/8044585.html

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