第一章
- 编译的5个阶段:词法分析、语法分析、语义分析与中间代码生成、优化、目标代码生成
- 翻译程序:能够把某种语言转换成另一种语言的程序,而两者在逻辑上是等价的
- 解释程序:以源程序为输入,不产生目标程序,而是边解释边执行源程序本身的程序。
- 诊断编译程序:帮助程序开发和调试的程序。
- 优化编译程序:提高目标代码效率的程序。
- 运行编译程序的是宿主机,运行目标代码的是目标机。
- 交叉编译:编译程序产生不同于宿主机的目标代码。
- 可变编译程序:不需要重写编译程序中与机器无关的部分就能改变目标机。
- 程序语言由语法和语义两方面定义。
- 语句包括:说明性语句、执行性语句
- 子程序传参方式:传值、传地址、传名
- 空间分配分方式:静态存储分配、动态存储分配
- 表格管理:对各种表格进行管理,包括表格的构造、查找、修改、删除、插入等;
词法分析
- 词法分析:把源程序作为字符串进行扫描 ,根据单词词法,识别出所有单词,过滤无用符,并检查是否为合法的单词。
- 词法分析的工具:正规式、有限自动机。
- 单词一般分为如下几种:基本字,标识符,常数,算符,界符。
- 词法规则:规定了形成单词的规则;如常数,标识符,基本字,算符等。
- 识别单词符号的方法:超前搜索
- 源程序的预处理:过滤无关的符号。
- 状态图由三种结构构成:分支结构、循环结构、终结点
- LEX语言源程序由两部分组成:正规式辅助定义式、识别规则
语法分析
- 语法分析: 根据语言的语法规则,从单词符号串中识别出各种语法单位 ,进行句子分析,并检查整个输入字串是否为合法的程序。
- 语法=词法规则+语法规则
- 语法规则:规定了由单词构造更大语法单位的规则;如表达式,短语,语句,程序等。
- 语法分析方法:自上而下(算符优先)、自下而上(递归下降)
- 重要的语法单位:程序,子程序,语句,短语,表达式等
- 上下文无关文法组成:终结符号、非终结符号、开始符号、产生式
- 句柄.:一个句型的最左直接短语。
- 素短语:至少含有一个终结符,且不可在分割成为更小的短语。一个句型的最左素短语即为可归约串。
- 递归下降分析的两个问题:文法的左递归、文法的回溯。
- 语法制导翻译:在语法分析的每次归约或推导时,根据产生式的语义进行翻译的一种方法。
符号表
- 编译程序中最主要的有如下几种:符号表,常量表,标号表,子程序名表,四元式表等。
- 符号表的查找技术:线性查找、二叉查找树、哈希表
- 符号表的基本操:查找、插入、访问、修改、删除
中间代码生成
- 中间代码生成:根据语义规则,把各种语法单位翻译成中间代码序列.
- 静态语义检查:类型检查、控制流检查、一致性检查、相关名字检查
- 中间代码的表示方法:四元式、三元式、间接三元式、逆波兰式、树形表示、DAG
优化
38. 代码优化:对产生的中间代码序列进行加工变换,使变换后的代码更为高效。
39. 优化的几种方法:删除公共子表达式、复写传播、删除无用代码、代码外提、强度削弱、删除归纳变量。
40. 必经节点集:流图通路中所必须经过的节点的集合
41. 回边:必经节点集中从后方节点到前方节点的边
42. 可规约流图:流图中除去回边而剩余部分构成无环路的流图.
43. 引用定值集ud[A]:能到达引用点u-A(u点引用了A)的变量A的所有定值点[d1,d2…dn]的集合(A在d定值)。
目标代码生成
- 目标代码生成:把中间代码程序翻译为机器指令或汇编指令程序。
- 生成的目标代码形式:绝对机器代码、可重定位机器代码、汇编语言代码