索引
本索引按中文术语整理,主要用于快速回到书中相关章节。
由于本版本对正文做了中文化改写,索引也相应采用中文技术书常用译名,而不是机械保留原文词序。
A-C
- ABI:应用二进制接口,约定函数调用、参数传递和寄存器使用方式。
- AST:抽象语法树,语法分析后的核心中间表示。
- C11:本书示例代码使用的 C 语言标准版本。
- Git:版本管理工具,用于记录每一步编译器开发。
- Docker:用于在 macOS 上运行 Linux 构建与测试环境。
- x86-64:本书目标平台使用的指令集。
编译器基础
- 词法分析:把输入字符串切分为标记序列。
- 标记:词法分析的输出单位,例如数字、标识符、运算符。
- 上下文无关文法:描述程序语法结构的形式化工具。
- 产生规则:文法中定义非终结符展开方式的规则。
- 终结符:文法中不能再展开的符号。
- 非终结符:文法中需要继续展开的符号。
- 递归下降语法分析:用一组递归函数实现的语法分析方法。
- 抽象语法树:去掉多余语法细节后的树形结构。
- 具象语法树:更接近原始语法结构的完整语法树。
- 栈机器:以栈为主要计算模型的代码生成方式。
机器码、汇编与链接
- 机器码:CPU 直接执行的程序表示。
- 汇编器:把汇编代码转换为机器码的程序。
- 汇编语言:与机器码接近的一种低级文本表示。
- 程序计数器:保存当前指令地址的 CPU 状态。
- 寄存器:CPU 内部的高速存储位置。
- 栈:函数调用、局部变量和临时值常用的内存区域。
- 目标文件:分离编译得到的中间文件,通常以
.o结尾。 - 链接错误:链接阶段发现符号缺失或重复定义等问题时产生的错误。
- 静态链接:把所需库代码复制进最终可执行文件。
- 动态链接:程序运行时再加载共享库。
- 调用者保存:函数调用后可能被覆盖、需要调用者自行保存的寄存器约定。
C 语言语义
- 头文件:保存声明、类型定义和跨文件共享信息的文件。
- 前向声明:在定义出现之前先告诉编译器某个函数或变量的类型。
- 声明:告诉编译器某个名字和类型的存在。
- 定义:真正为函数或变量提供实体。
- 左值:可以作为赋值目标的表达式。
- 右值:表达式计算得到的普通值。
- 指针:保存地址的值。
- 数组:连续排列的同类型对象集合。
- 字符串字面量:以字符数组形式保存的字符串常量。
- 函数指针:指向函数的指针类型。
- 声明符:C 类型声明中围绕标识符构成复杂类型的部分。
整数与内存表示
- 无符号整数:只表示非负数的整数类型。
- 有符号整数:可以表示负数的整数类型。
- 二进制补码:现代计算机常用的有符号整数表示方式。
- 符号位:有符号整数中表示正负的最高位。
- 符号扩展:把较小整数扩展到较大整数时保持符号不变。
- 最高位:二进制数中权重最高的位。
- 段:可执行文件和进程映像中的区域划分。
- 文本段:保存机器码的段。
- 数据段:保存全局变量等数据的段。
- 程序加载器:把可执行文件映射到内存并启动程序的系统组件。