编译原理复习
第1章 编译概述
编译原理结构框图
第6章 符号表的作用与管理
符号表的作用
- 收集符号属性;(词法分析)
- 上下文语义的合法性检查的依据;(语法分析)
- 作为目标代码生成阶段地址分配的依据;(语义分析)
符号表的组织方式
- 直接方式:在符号表中直接填入源程序中定义的标识符及其相关信息
- 间接方式:单独设置一个字符串数组
- 另一类组织方式是按标识符的种属,如简单变量、数组、过程等,同一种属的标识符建立一张符号表
第7章 代码优化
代码优化的目的和意义
代码优化是提高代码质量的关键技术,其实质是对代码进行等价变换,使得变换后代码运行结果与变换前的代码运行结果相同,但运行速度加快或占用空间少,即执行效率有明显提高
代码优化的方法
- 删除公共子表达式
- 代码外提
- 强度削弱
- 变换循环控制条件(删除归纳变量)
- 合并已知量
- 复写传播
- 删除无用赋值
代码优化的分类
- 全局优化
- 循环优化
- 局部优化
- 窥孔优化
第8章 运行时存储组织与管理
运行时存储组织策略(简单版)
- 静态存储分配策略
- 动态存储分配策略:分为栈式存储分配(分为简单栈式存储分配和嵌套过程中的栈式存储分配)和堆式存储分配
- 临时变量的存储分配:如果两个临时变量名的作用于不相交,则它们可以分配到同一单元中
运行时存储组织策略(钱总内卷版)
- 静态存储分配策略:在编译时就能确定目标程序运行中所需要的全部数据空间的大小
- 动态存储分配策略:分为栈式存储分配(分为简单栈式存储分配(允许递归调用,不允许嵌套)和嵌套(允许嵌套,允许递归)过程中的栈式存储分配)和堆式存储分配(可以自由申请内存与释放,但容易产生碎片。)
- 临时变量的存储分配:如果两个临时变量名的作用域不相交,则它们可以分配到同一单元中