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