Dennis Ritchie的第一个C编译器

2021-03-11 16:22:04

第二,不太明显,但令人惊讶的特殊性是空间分配:分配临时存储,故意覆盖程序的初始,粉碎其初始化代码以节省空间。两个编译器在他们如何应对这方面的差异。在早些时候,通过命名一个函数来找到开始;在后来,开始时才被认为是0.这表明第一个编译器是在我们有一个内存映射的机器之前写的,所以图中的起源不是位置0,而截至第二个,我们有一个PDP-11确实提供了映射。(参见UNIX历史论文)。在其中一个文件(Prestuct-C / C10.c)中kludgeryis特别明显。下面列出了编译器源的链接。文件名为C0?.care第一个传递,解析源并将语法与中间文件上的一些文本混合。C1?.c文件是代码生成器,readthe树木和生成代码。格式是直文的(只有NL字符分隔线;浏览器' ve尝试了应对这个)。代码生成技术使用指令支出表;解析树以与其根操作符相对应的桌面的一部分递归地匹配。 restrictionson可以表达操作数​​的类型和复杂性,并且将序列搜索到最早的匹配片段中的序列搜索。每个限制规范是扩展阶段;小写字母是文字,上部小丑被从术中的操作数取代。这是在纸张上更详细地描述的,通过PDP-11编译器。(此参考是Troff来源;它也可以在第7版手册下与其他论文捆绑在后面的PDF形式中,虽然捆绑在第7版手册下。主页)。但是请注意,这次旅行描述了几年后的交换状态。有四个表格指定如何编译Expression to寄存器,仅为副作用编译,以编译到测试条件代码,并编译为按堆栈(用于函数参数,或临时).They仅保存" last1120c"编译器;后来的Thetables将是类似的。 Last1120C编译器的来源也有一个子公司,每个传递都有一些东西,其中一些东西被投入了库,以及一些关于各种文件的事实.s(汇编程序语言)文件。最后,有CVOPT程序,常常将随机语言表达式Templatetetables转换为汇编程序。很多手动,可能有足够的材料构建Last1120C编译器的工作版本,其中"工作"手段"将源转换为PDP-11汇编程序。"(查看成功的人的页面顶部。)