第12周 星期二 第2大节

  • 视频:screen_编译原理与设计_第12周_星期二_第2大节.mp4
  • 字幕:transcripts/第12周_星期二_第2大节.srt

时间轴

  • 05:27 复习:声明语句填符号表不产生中间代码
  • 09:14 赋值语句目标结构:计算E值+赋值操作
  • 10:16 控制流语句翻译:所有跳转通过jump实现(J, JP, JF)
  • 14:56 拉链反填技术详细演示
  • 16:56 条件语句翻译:if(两个标号)、if-else(三个标号)、while(三个标号)
  • 20:52 条件短路(short-circuit):true标号不能省略
  • 28:10 条件短路示例:if (A>B && B>C)
  • 31:19 for循环翻译:E1, E2, E3, S四部分,四个标号
  • 36:03 控制流嵌套(for嵌套for+if)
  • 43:51 switch-case多分支翻译:2N个标号方案vs N+1方案
  • 57:29 数组说明:符号表+内情向量表
  • 01:06:29 数组元素引用:类型检查、下标越界检查、地址计算
  • 01:09:02 数组存储:行优先vs列优先
  • 01:11:19 N维数组地址计算公式
  • 01:21:53 动态数组:编译时分配空间,运行时计算体积
  • 01:24:49 函数说明与调用翻译:填表(形参、局部量、返回类型)
  • 01:30:27 函数调用:检查存在性+参数匹配、分配活动记录、传参、保存返回地址
  • 01:34:10 ⚠️ 进度通知:还剩3-4次课,之后复习课+划重点
  • 01:41:00 运行环境:活动(activity)、绑定(binding)、存储分配
  • 01:46:29 静态性质vs动态性质(声明vs绑定、作用域vs生存期)
  • 01:52:17 三种运行环境:完全静态(Fortran)、基于栈(C/C++)、完全动态(Lisp)
  • 01:53:10 存储空间划分:目标代码区、静态数据区、栈、堆
  • 02:05:06 活动记录AR内容(实参空间、局部数据、临时变量、机器状态、返回地址、存取链+控制链)
  • 02:11:31 栈式存储分配
  • 02:12:25 嵌套过程非局部量引用:静态链(SL)与动态链(DL)
  • 02:16:16 活动记录栈生长与收缩

关键点

考勤/签到/小测

无。

作业

  • 01:34:10 还剩3-4次课→复习课→考试
  • 实验需配合函数翻译部分理解

考试/复习重点

  • 01:35:14 目标代码生成考试不做要求
  • 拉链反填技术细节(链头/链尾/反填次序)(14:56
  • 条件短路:true标号不可省略(20:52
  • for循环4标号方案(31:19
  • switch-case中break的作用(53:54
  • 数组地址计算:A₀+V(可变部分)+C(不变部分)(01:14:29
  • 环境(environment) vs 状态(state)区分(01:50:09
  • 活动记录AR、存取链(SL)、控制链(DL)(02:05:06

其他需要回看的片段

  • 14:56-16:08 拉链反填三跳转链构建全过程
  • 28:10-31:00 条件短路和if-else中间代码实例
  • 36:03-43:51 for嵌套for+if标号逐层展开
  • 01:01:00-01:06:29 数组符号表与内情向量表填充
  • 01:19:22-01:21:53 A[X][Y]地址计算完整示例

省流

语句翻译深入(拉链反填/条件短路/if/while/for/switch/数组/函数)+运行环境(存储分配/AR/SL/DL)。⚠️ 还剩3-4次课,目标代码生成不考,运行环境主要帮理解实验。