编译器是如何编写的

 

在学编译原理的时候,就有一个想法,现在的编译器是如何编写的。如果说是用纯粹的机器代码编写,这显然是不可能的,因为编译器是个非常复杂且庞大的软件工程,用纯机器代码编写所花费的时间这显然是不能接受的。有人就会说,用高级语言编写编译器呗,那么问题就来了,高级语言是不能被计算机直接识别的,所以这种说法也显然是不正确的。机器语言的开发效率太低,高级语言又无法被计算机直接识别,所以我个人就想,会不会是采用一种折中的办法,即编译器最核心的部分用机器语言编写,剩下其他的部分用高级语言编写。后来查看一下其他资料,发现果然是这样。这种情况被称为自编译。

 

大致过程如下:

设有自编译语言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为止。 由于开始通过低级语言建立的编译程序可做得比较小而简单,因而可以在较少的人力和时间的情况下建立起来,以后都是用高级语言本身来编写较大语言的编译程序。由于有用高级语言进行程序设计的优点,所以这样做的结果是比用低级语言直接一次生成一个完整的编译程序要快,而且在程序的可靠性方面也更能得到保证。 
 
通过这种方式大大提高了编译器的开发效率

转载于:https://www.cnblogs.com/mlgjb/p/8044585.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值