第一个 C++ 编译器(Cfront)是使用 C++ 编写出来的。为此,我首先使用 C 编写了一个将“带类的 C”转换成 C 的预处理器。“带类的 C”属于 C 的一种变种,它是 C++ 的直接祖先。这个预处理器将“带类的 C”的结构成分(例如类和构造函数)翻译成 C。它是一个传统的预处理器,不能完全理解 C++ 语言,还将大多数类型检查留给了 C 编译器来做,而且其对 C++ 成分结构的翻译是单个单个地进行的,而不会先对全局进行分析。然后我利用“带类的 C”编写出了 Cfront 的第一个版本。
Cfront 是一个传统的编译器,它会对 C++ 源代码进行完整的语法和语义检查。为此,它要有一个完整的词法分析器,要建立符号表,还要为每个类、函数等建立一套完整的内部树状表示。在生成 C 代码之前,它还会对 C++ 成分结构的内部树状表示做一些源代码层面上的优化。虽然这个版本(的 C++ 编译器)生成 C 代码,但它不依赖 C 做任何类型检查。它仅仅把 C 用作汇编器。最终生成的代码非常快。想知道更多信息,可参考 D&E 。
原文地址:http://www.research.att.com/~bs/bs_faq.html#bootstrapping
本文版权归 蚂蚁的 C/C++ 标准编程 以及 作者 Bjarne Stroustrup 翻译:antigloss 共同所有,转载请注明原作者和出处。谢谢。