北京航空航天大学《编译原理》第12章 编译程序生成方法.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:26 大小:1.6MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

北京航空航天大学《编译原理》第12章 编译程序生成方法.pdf

北京航空航天大学《编译原理》第12章编译程序生成方法.pdf

预览

免费试读已结束,剩余 16 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第十二章编译程序生成方法和工具••编译程序的书写语言编译程序的书写语言••自编译性自编译性••自展自展••编译程序的移植编译程序的移植••编译程序的自动生成编译程序的自动生成北京航空航天大学计算机学院12.1编译程序的书写语言•机器语言或汇编语言主要优点:编出来的程序效率高。主要缺点:编程效率低,可读性差,不便于修改和移植。•高级程序设计语言已基本取代汇编语言优点:编程效率高,可读性好,利于移植。缺点:编译程运行效率较低。北京航空航天大学计算机学院12.2自编译性自编译性:如果一个高级语言能用来书写自己的编译程序,则该语言具有自编译性,并称该语言为自编译语言。两点说明:1.通常用自编译语言除可编写本语言的编译程序以外,也可用来编写别的语言的编译程序。∴如果某台机器上已配备有某种自编译语言,则可利用这种语言为本台机器配置其它的高级语言。北京航空航天大学计算机学院例:A机上有自编译语言L1的编译程序L1.AOL1——语言L1的编译程序AO——以A机的机器指令形式给出利用语言L1可为A机生成语言L2的编译程序L2.L1L1.AOL2.AOL1源程序A机L2可执行的编译程序L2源程序L2.AOL2目标程序A机可在A机上运行北京航空航天大学计算机学院源语言目标语言书写语言(d)程序(a)编译程序(b)解释程序(c)计算机北京航空航天大学计算机学院L2AoL2AoLA用Ao描述的L2语1L1Aoo言的编译器L2.Ao用1写的语言的LL2Ao编译器L2.L1运行Ao的Ao计算机用Ao描述的L1语言的编译器L1.AoffLA2L2AooAoAo北京航空航天大学计算机学院2.自编译性不是绝对的,只是强弱不同数据类型丰富的语言自编译性强控制结构丰富的语言数据类型:除一般的外还有字符串类型,数组,结构,枚举,指针等类型。控制结构:应适于进行多分支的程序设计,如有CASE语句等FORTRAN,ALGOL——自编译性差PASCAL,C,ADA,C++,JAVA——自编译性强实践示例:用PASCAL语言编写一个简单的编译程序,就是利用PASCAL的自编译性。北京航空航天大学计算机学院12.3自展利用高级语言的自编译性,还可以通过自展方式生成语言的编译程序。设L为自编译语言,自展生成L.Ao(A机目标形式的语言L的编译器,可在A机上运行)步骤:1.首先,将语言划分为N个部分:L=L1+L2+…+LnL1——核心部分L2~Ln——扩充部分北京航空航天大学计算机学院2.先用A机上的汇编编写L1的编译程序,L1.AaL1.Aa→Assember→L1.Ao3.用L1编写L1+L2的编译程序(L1+L2).L1L1.Ao(L1+L2).Ao4.用(L1+L2)编写L1+L2+L3的编译程序…5.L.(L1+L2…+Ln-1)(L1+L2…+Ln-1).AoL.Ao北京航空航天大学计算机学院L.Ao…….滚雪球式(L1+L2).AoL1.Ao用自展方式进行编译,可提高生产率。因核心语言小,可用汇编实现。其余部分高级语言编写。比全用低级语言效率高。北京航空航天大学计算机学院12.4编译程序的移植移植:将某台机上的成熟软件移植到另一台机器上,也就是将宿主机上的软件移植到目标机上。具有自编译性的高级语言来书写程序,则移植是方便的。移植L.L宿主机A目标机BL.BoL.Ao通过移植,在B机上可得到语言L的编译程序,具B机目标形式,可在B机上运行。北京航空航天大学计算机学院移植步骤:1.将L.L分为两部分:一部分与机器无关F.L一部分与机器有关A.L∴L.L=F.L+A.L2.根据目标机用语言L改写与具体机器有关的部分:LA.LB.L产生A机代码产生B机代码∴交叉编译器:I.L=F.L+B.L用A机上的L语言所写的能生成B机目标代码的语言L的编译程序。北京航空航天大学计算机学院3.第一次编译将I.L在宿主机A上用L的编译程序进行编译,生成能在宿主机A上运行的语言L的交叉编译器,它能生成目标机B的代码。I.LL.AoI.Ao用L所写的生语言L的交成目标机B宿主机A叉编译器,代码的L语言的L编译能在宿主机交叉编译器源程序A上运行,生程序成目标机B的代码北京航空航天大学计算机学院4.第二次编译(交叉编译)I.LI.AoL.Bo可在目标机BA机上运行并生成目标