第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:19for循环翻译:E1, E2, E3, S四部分,四个标号36:03控制流嵌套(for嵌套for+if)43:51switch-case多分支翻译:2N个标号方案vs N+1方案57:29数组说明:符号表+内情向量表01:06:29数组元素引用:类型检查、下标越界检查、地址计算01:09:02数组存储:行优先vs列优先01:11:19N维数组地址计算公式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:51for嵌套for+if标号逐层展开01:01:00-01:06:29数组符号表与内情向量表填充01:19:22-01:21:53A[X][Y]地址计算完整示例
省流
语句翻译深入(拉链反填/条件短路/if/while/for/switch/数组/函数)+运行环境(存储分配/AR/SL/DL)。⚠️ 还剩3-4次课,目标代码生成不考,运行环境主要帮理解实验。