摘要:
14.1 程序调用约定 C语言本身的语法特性是与平台无关的,但是具体实现语法特性本身,也就是编译往往会随着OS和CPU软硬件条件而有所不同。比如参数传递是入栈还是用寄存器,返回值的传递方法是用什么寄存器等。规定这些的就是程序调用约定calling convention。 Linux的调用约定在LSB 阅读全文
摘要:
12.2 x86系列的CPU历史 遵循同一指令集架构的CPU应该能够执行依据该指令集架构编译的程序 MMX指令用于整数并行处理,SSE用于浮点数并行处理 AMD先于Intel提出了x86系列的64位扩展,其指令集架构称为AMD64,之后Intel提出了自己的Intel64,AMD64和Intel64 阅读全文
摘要:
11.1 IR Cb使用的是树形IR。 cbc --dump-ir if_test.cb <<IR>> (if_test.cb:1) variables: functions: <<DefinedFunction>> (if_test.cb:2) name: main isPrivate: fals 阅读全文
摘要:
10.1 类型定义检查 主要解决: 包含void的数组,结构体,联合体 成员重复的结构,联合体 循环定义的结构,联合体-需要检查有没有引用闭环 class TypeChecker extends Visitor { private final TypeTable typeTable; private 阅读全文
摘要:
9.1 语义分析概要 本章目的 引用消解 类型名称消解: TypeRef->Type 类型定义检查:比如不能新建void的数组,void的成员结构体,直接将自身类型作为子成员的结构体等问题 表达式有效性检查: 比如1++ 静态类型检查,比如在结构体间进行了未定义的+操作,或者是将int类型的值直接赋 阅读全文
摘要:
8.1 表达式的抽象语法树 Literal Type表示类型的定义,如struct pr{int first; int second;},TypeRef则是类型的名称。struct pr; 定义TypeRef后,在类型定义之前就能编写用到了该类型的代码。 // #@@range/primary{ E 阅读全文