编译原理复习

背记内容

Posted by XDong on June 23, 2022

编译原理复习

第1章 编译概述

编译原理结构框图

编译程序结构框图

第6章 符号表的作用与管理

符号表的作用

  1. 收集符号属性;(词法分析)
  2. 上下文语义的合法性检查的依据;(语法分析)
  3. 作为目标代码生成阶段地址分配的依据;(语义分析)

符号表的组织方式

  1. 直接方式:在符号表中直接填入源程序中定义的标识符及其相关信息
  2. 间接方式:单独设置一个字符串数组
  3. 另一类组织方式是按标识符的种属,如简单变量、数组、过程等,同一种属的标识符建立一张符号表

第7章 代码优化

代码优化的目的和意义

代码优化是提高代码质量的关键技术,其实质是对代码进行等价变换,使得变换后代码运行结果与变换前的代码运行结果相同,但运行速度加快或占用空间少,即执行效率有明显提高

代码优化的方法

  1. 删除公共子表达式
  2. 代码外提
  3. 强度削弱
  4. 变换循环控制条件(删除归纳变量)
  5. 合并已知量
  6. 复写传播
  7. 删除无用赋值

代码优化的分类

  1. 全局优化
  2. 循环优化
  3. 局部优化
  4. 窥孔优化

第8章 运行时存储组织与管理

运行时存储组织策略(简单版)

  1. 静态存储分配策略
  2. 动态存储分配策略:分为栈式存储分配(分为简单栈式存储分配和嵌套过程中的栈式存储分配)和堆式存储分配
  3. 临时变量的存储分配:如果两个临时变量名的作用于不相交,则它们可以分配到同一单元中

运行时存储组织策略(钱总内卷版)

  1. 静态存储分配策略:在编译时就能确定目标程序运行中所需要的全部数据空间的大小
  2. 动态存储分配策略:分为栈式存储分配(分为简单栈式存储分配(允许递归调用,不允许嵌套)和嵌套(允许嵌套,允许递归)过程中的栈式存储分配)和堆式存储分配(可以自由申请内存与释放,但容易产生碎片。)
  3. 临时变量的存储分配:如果两个临时变量名的作用域不相交,则它们可以分配到同一单元中

运行时存储空间的划分

运行时存储空间的划分