Stroustrup声称,第一个C++编译器C++是用C++ (Stroustrup常见问题)编写的。
但是,怎么可能用C++编写第一个C++编译器呢?
构成编译器的代码也需要编译,因此第一个C++编译器不可能是用C++编写的,对吗?
发布于 2011-09-01 16:07:43
关键就在这里:
第一个C++编译器( C++ )是用C++编写的。为此,我首先使用C编写了一个"C带类“到-C的预处理器。"C带类“是一种C方言,成为C++的直接祖先。该预处理器将"C具有类“结构(例如类和构造函数)转换为C。它是一个传统的预处理器,它不理解所有语言,留给C编译器进行大多数类型检查,并在没有完全知识的情况下翻译单个构造。然后,我在"C有类“中编写了第一个版本的C。
所以第一个版本的C++不是用C++编写的,而是用中间语言编写的。直接在C中创建C编译器和预处理程序的能力导致了C中的许多创新(和巨大的安全漏洞),因此您编写了新的预器,将"C与类“代码转换为直C(因为直C可以执行任何操作),然后使用"C带类”来编写C++编译器(不是说您不能在C中完成它,只是需要一段时间),然后使用C++编译器在C++中编写更高效/完整的编译器。明白了?
发布于 2011-09-01 16:07:45
它是被引导的。一旦将C++特性添加到cfront中,c前台也可以从那时起使用该特性(但不能实现该特性)。这是因为code能够将C++代码转换为C代码。因此,如果出现了一些新的平台,您可以在另一个平台上使用c前端将C++转换为C,然后使用新平台的C编译器完成从C到对象代码的编译。
发布于 2011-09-01 16:08:09
我认为B.S.回答了这个问题:
第一个C++编译器( C++ )是用C++编写的。为此,我首先使用C编写了一个"C带类“到-C的预处理器。"C带类“是一种C方言,成为C++的直接祖先。该预处理器将"C具有类“结构(例如类和构造函数)转换为C。它是一个传统的预处理器,它不理解所有语言,留给C编译器进行大多数类型检查,并在没有完全知识的情况下翻译单个构造。然后,我在"C有类“中编写了第一个版本的C。C++是一个传统的编译器,它完成了C++源代码的语法和语义检查。为此,它有一个完整的解析器,构建了符号表,并为每个类、函数等建立了完整的内部树表示,并在输出C之前对C++构造的内部树表示进行了源代码级优化。生成C的版本在任何类型检查中都不依赖C。它只是使用C作为汇编程序。生成的代码速度快得令人难以妥协。
首先,他创建了一个被简单的预处理器实现为C的叫做"C类“的东西。它基本上是C++,但是预处理器很少或根本不进行检查。然后,他用它将更强大的C++翻译器编写成C,包括类型检查、符号表等。
https://softwareengineering.stackexchange.com/questions/105313
复制相似问题