编译器自举和移植
有个著名的问题:Mommy, where do compilers comefrom?要解决这个问题,首先来看看T-Diagram。可以将编译器用一个T形图来表示:
---------| S T |
--- ---
| I |
---
其中,S表示Souce Language,T表示Target Language,I表示ImplementationLanguage。
根据这个图,可以得到两种组合:
1、 由I实现的将S翻译成A的编译器和将A翻译成T的编译器联合起来工作,可以实现S到T的编译。这不是很有意思的组合。
------------------
| S A | A T |
--- ------ ---
| I | | I |
--- ---
2、由I实现的将S翻译成T的编译器(compiler C1),由H实现的将I翻译成K的编译器的组合(compilerC2)。这个组合比较有意思:可以用C2去编译C1(将其实现语言从I翻译成K),这样就得到由K实现的将S翻译成T的编译器(compilerC3):
--------- ---------
| S T | | S T |
---