我只想知道编写C编译器的语言。请说出C以外的其他内容。
答案 0 :(得分:7)
这是一篇很好的读物:肯·汤普森的Reflections on Trusting Trust。首先概述第一批C编译器的编写方式。引导捆扎技术是准确的。不能直接回答你的问题,但会给你一些见解。
答案 1 :(得分:4)
几乎所有主要的C编译器都是用C语言编写的。你可能会认为这有鸡与蛋的问题,但事实并非如此。该过程称为bootstrapping。
答案 2 :(得分:2)
GCC是用C语言编写的。大多数C编译器都是用C语言编写的。
在第一次为某种语言生成编译器时,有一个启动捆绑阶段(任何具有pretensions能够编译自己的编译器的语言 - 在同一平台上COBOL是一个合理的例外,但还有许多其他例外),但是一旦你有了编译器,那么就用这种语言编写编译器。
除此之外,在汇编程序中执行它太昂贵了。
答案 3 :(得分:2)
非常原始的C编译器(由K& R)用一种名为B的前驱语言编写,或者可能是BCPL。但是一旦C编译器运行良好,它们就会转换为C并开始使用每个连续版本来编译下一个版本。
C的许多奇怪功能,如增量前和增量后运算符都存在,因为(a)它们代表了在第一个C开发的PDP-11上的特殊寻址模式,或者(b)它们帮助了编译器在编译自己的下一个版本时适合内存。
这就是故事的其余部分。
答案 4 :(得分:1)
根据哪个C编译器,它可能是用汇编编写的,然后它最终可能会自编译,所以部分用C语言编写。
自己浏览GCC的来源答案 5 :(得分:1)
答案 6 :(得分:0)
您必须指定哪个编译器。
答案 7 :(得分:0)
在过去,人们会在汇编程序中编写C语言的一小部分,然后使用它来“引导”编译用C编写的更好的C编译器。这些天更常见的是为C编译器通过从已经有效的架构交叉编译的新架构。我相信很少有例如gcc编译器,它们不是用C或C ++编写的。
答案 8 :(得分:-1)
在我看来,用perl
编写编译器是最简单的