语言)?优点:编程效率高,可读性好,利于移植?缺点:编译程序运行效率较低Р2018/7/16Р编译技术Р4Р自编译性Р自编译性:如果一个高级语言能用来书写自己的编译程序,则该语言具有自编译性,并称该语言为自编译语言。?通常用自编译语言除可编写本语言的编译程序以外,也可用来编写别的语言的编译程序。?如果某台机器上已配备有某种自编译语言,则可利用这种语言为本台机器配置其它的高级语言。?自编译性不是绝对的,只是强弱不同?数据类型丰富的语言、控制结构丰富的语言自编译性强Р2018/7/16Р编译技术Р5Р自编译性Р例:A机上有自编译语言L1的编译程序L1.Ao。其中,L1——语言L1,Ao——A机的机器指令Р2018/7/16Р编译技术Р6Р自编译性Р2018/7/16Р编译技术Р7Р自编译程序的特点Р数据类型:除一般的外还有字符串类型,数组,结构,枚举,指针等类型。?控制结构:应适于进行多分支的程序设计,如有CASE语句等?FORTRAN,ALGOL——自编译性差?PASCAL,C,ADA,C++,JAVA——自编译性强?实践示例:用PASCAL语言编写一个简单的编译程序,就是利用PASCAL的自编译性。Р2018/7/16Р编译技术Р8Р自展Р利用高级语言的自编译性,还可以通过自展方式生成语言的编译程序。?设L为自编译语言,自展生成L.Ao(A机目标形式的语言L的编译器,可在A机上运行)?步骤:1.首先,将语言划分为N个部分:? L=L1+L2+…+Ln? L1——核心部分? L2~Ln——扩充部分Р2018/7/16Р编译技术Р9Р自展Р步骤:2.先用A机上的汇编编写L1的编译程序,L1.Aa?L1.Aa→Assember→L1.Ao?3.用L1编写L1+L2的编译程序Р4.用(L1+L2 )编写L1+L2+L3的编译程序?……?n.Р自展Р2018/7/16Р编译技术Р10