第6章 中间代码生成
把DAG、三地址码、SSA、类型/声明、表达式、控制流、回填、switch和过程翻译成统一IR;用编译流水线、状态轨迹和等价性验证门交付AST/DAG、类型证明、CFG、SSA定义—使用链与回填日志
学习目标
- 能说明“第6章 中间代码生成”如何把DAG、三地址码、SSA、类型/声明、表达式、控制流、回填、switch和过程翻译成统一IR,并区分Pearson英文第二版、中文译本、现代工具和本站重写
- 能先预测“源级类型、值、地址和控制边怎样在IR中保持可验证语义?”会改变哪一个输入、表示、栈/图状态、IR、目标代码或验证结果,再操作三类交互证据
- 能只注入“回填列表连接到错误基本块,短路表达式执行了本应跳过的副作用”,定位首个偏离“类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致”的状态,并从同一快照完成恢复
为什么从这个问题开始
“第6章 中间代码生成”围绕“源级类型、值、地址和控制边怎样在IR中保持可验证语义?”建立贯穿任务:把含数组、短路布尔、循环、switch和调用的程序降到SSA式IR。先写下哪个输入、表示、栈/图状态、IR、目标代码或验证结果会最先变化,再运行参考、故障和恢复路径;运行后补理由不算预测。只有守住“类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致”并交付AST/DAG、类型证明、CFG、SSA定义—使用链与回填日志,编译成功、分析收敛、目标码长度或基准加速才构成机制证据。
原版书目、556个正式坐标与访问边界
“第6章 中间代码生成”以Pearson官方书页核对Alfred V. Aho、Monica S. Lam、Ravi Sethi、Jeffrey D. Ullman著 Compilers: Principles, Techniques, and Tools, Second Edition:英文精装ISBN 9780321486813,2006年版;Pearson明确列出12章与两个附录,并说明第10章“指令级并行”、第11章“并行与局部性优化”、第12章“过程间分析”是第二版新增重点。Pearson官方目录继续核对版本与章/附录框架。
“第6章 中间代码生成”再以中文版完整目录与高校馆藏书目核对赵建华、郑滔、戴新宇译《编译原理(第2版)》,机械工业出版社,2009年,631页,ISBN 9787111251217。正式分母计入12个章标题、2个附录标题、533个数字编号节/小节和附录A的9个编号节,合计556个核心目录层级;章末总结、练习、参考文献和索引不重复计为知识节点。
原书与译本均受版权保护,“第6章 中间代码生成”不复制、翻译或改写原文、图表、算法伪码和练习,只把官方目录当作范围坐标;中文讲解、状态轨迹、反例、交互、练习与答案均为独立教学重写。本页独立核对 1、本页独立核对 2只用于核对现代IR、工具或实验边界,不反向证明原书采用本站表述。
原版目录层级与可验证机制
第6章 中间代码生成
↡中间代码生成对应正式目录坐标“第6章 中间代码生成”,在“第6章 中间代码生成”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 1/43。 原版目录键 第6章 中间代码生成。在“第6章 中间代码生成”的第1个正式坐标中,「第6章 中间代码生成」通过声明阶段接口、名字/类型/状态角色和源—目标语义映射推进中间表示、类型与控制流;复核者保存阶段快照、符号表、类型、IR谱系、诊断和源位置,出现阶段边界丢失绑定、类型、控制依赖或源位置就撤回结论。
6·1 语法树的变体
↡语法树的变体对应正式目录坐标“6.1 语法树的变体”,在“第6章 中间代码生成”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 2/43。 原版目录键 6.1 语法树的变体。围绕“源级类型、值、地址和控制边怎样在IR中保持可验证语义?”,“第6章 中间代码生成”在坐标2把「6·1 语法树的变体」落实为让产生式、推导、分析选择、语义动作和树/IR状态逐步对应;只有文法版本、分析栈、输入指针、树、属性和动作日志可重放且反例排除分析选择或语义动作时点与文法依赖不一致,本节点才算掌握。
6·1·1 表达式的DAG
↡表达式的DAG对应正式目录坐标“6.1.1 表达式的DAG”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 3/43。 原版目录键 6.1.1 表达式的DAG。“第6章 中间代码生成”的目录节点3「6·1·1 表达式的DAG」不能停在术语或伪码:它要把源级值、地址、类型、控制边和定义—使用关系编码为IR,交付AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,并把类型、phi输入、控制边、地址或定义—使用关系错位设为单一反事实。
6·1·2 构造DAG的值编码方法
↡构造DAG的值编码方法对应正式目录坐标“6.1.2 构造DAG的值编码方法”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 4/43。 原版目录键 6.1.2 构造DAG的值编码方法。对“第6章 中间代码生成”而言,「6·1·2 构造DAG的值编码方法」在第4次检查中改变可观察状态,因为它负责把源级值、地址、类型、控制边和定义—使用关系编码为IR;AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表必须与“类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致”对齐,不能接受类型、phi输入、控制边、地址或定义—使用关系错位。
6·2 三地址代码
↡三地址代码对应正式目录坐标“6.2 三地址代码”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 5/43。 原版目录键 6.2 三地址代码。在“第6章 中间代码生成”的第5个正式坐标中,「6·2 三地址代码」通过把源级值、地址、类型、控制边和定义—使用关系编码为IR推进中间表示、类型与控制流;复核者保存AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,出现类型、phi输入、控制边、地址或定义—使用关系错位就撤回结论。
6·2·1 地址和指令
↡地址和指令对应正式目录坐标“6.2.1 地址和指令”,在“第6章 中间代码生成”中用于在IR、寄存器、内存和目标指令间满足定义—使用、调用约定和代价,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 6/43。 原版目录键 6.2.1 地址和指令。围绕“源级类型、值、地址和控制边怎样在IR中保持可验证语义?”,“第6章 中间代码生成”在坐标6把「6·2·1 地址和指令」落实为在IR、寄存器、内存和目标指令间满足定义—使用、调用约定和代价;只有基本块DAG、活跃区间、干涉图、指令匹配和差分执行可重放且反例排除别名、寄存器类、调用约定或目标副作用被忽略,本节点才算掌握。
6·2·2 四元式
↡四元式对应正式目录坐标“6.2.2 四元式”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 7/43。 原版目录键 6.2.2 四元式。“第6章 中间代码生成”的目录节点7「6·2·2 四元式」不能停在术语或伪码:它要把源级值、地址、类型、控制边和定义—使用关系编码为IR,交付AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,并把类型、phi输入、控制边、地址或定义—使用关系错位设为单一反事实。
6·2·3 三元式
↡三元式对应正式目录坐标“6.2.3 三元式”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 8/43。 原版目录键 6.2.3 三元式。对“第6章 中间代码生成”而言,「6·2·3 三元式」在第8次检查中改变可观察状态,因为它负责把源级值、地址、类型、控制边和定义—使用关系编码为IR;AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表必须与“类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致”对齐,不能接受类型、phi输入、控制边、地址或定义—使用关系错位。
6·2·4 静态单赋值形式
↡静态单赋值形式对应正式目录坐标“6.2.4 静态单赋值形式”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 9/43。 原版目录键 6.2.4 静态单赋值形式。在“第6章 中间代码生成”的第9个正式坐标中,「6·2·4 静态单赋值形式」通过把源级值、地址、类型、控制边和定义—使用关系编码为IR推进中间表示、类型与控制流;复核者保存AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,出现类型、phi输入、控制边、地址或定义—使用关系错位就撤回结论。
6·3 类型和声明
↡类型和声明对应正式目录坐标“6.3 类型和声明”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 10/43。 原版目录键 6.3 类型和声明。围绕“源级类型、值、地址和控制边怎样在IR中保持可验证语义?”,“第6章 中间代码生成”在坐标10把「6·3 类型和声明」落实为把源级值、地址、类型、控制边和定义—使用关系编码为IR;只有AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表可重放且反例排除类型、phi输入、控制边、地址或定义—使用关系错位,本节点才算掌握。
6·3·1 类型表达式
↡类型表达式对应正式目录坐标“6.3.1 类型表达式”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 11/43。 原版目录键 6.3.1 类型表达式。“第6章 中间代码生成”的目录节点11「6·3·1 类型表达式」不能停在术语或伪码:它要把源级值、地址、类型、控制边和定义—使用关系编码为IR,交付AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,并把类型、phi输入、控制边、地址或定义—使用关系错位设为单一反事实。
6·3·2 类型等价
↡类型等价对应正式目录坐标“6.3.2 类型等价”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 12/43。 原版目录键 6.3.2 类型等价。对“第6章 中间代码生成”而言,「6·3·2 类型等价」在第12次检查中改变可观察状态,因为它负责把源级值、地址、类型、控制边和定义—使用关系编码为IR;AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表必须与“类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致”对齐,不能接受类型、phi输入、控制边、地址或定义—使用关系错位。
6·3·3 声明
↡声明对应正式目录坐标“6.3.3 声明”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 13/43。 原版目录键 6.3.3 声明。在“第6章 中间代码生成”的第13个正式坐标中,「6·3·3 声明」通过把源级值、地址、类型、控制边和定义—使用关系编码为IR推进中间表示、类型与控制流;复核者保存AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,出现类型、phi输入、控制边、地址或定义—使用关系错位就撤回结论。
6·3·4 局部名字的存储布局
↡局部名字的存储布局对应正式目录坐标“6.3.4 局部名字的存储布局”,在“第6章 中间代码生成”中用于追踪栈帧、非局部绑定、根集、堆对象和收集阶段,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 14/43。 原版目录键 6.3.4 局部名字的存储布局。围绕“源级类型、值、地址和控制边怎样在IR中保持可验证语义?”,“第6章 中间代码生成”在坐标14把「6·3·4 局部名字的存储布局」落实为追踪栈帧、非局部绑定、根集、堆对象和收集阶段;只有活动记录、访问链、根集、对象图、写屏障与暂停统计可重放且反例排除生命周期、根集或屏障错误导致悬垂引用、泄漏或误回收,本节点才算掌握。
6·3·5 声明的序列
↡声明的序列对应正式目录坐标“6.3.5 声明的序列”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 15/43。 原版目录键 6.3.5 声明的序列。“第6章 中间代码生成”的目录节点15「6·3·5 声明的序列」不能停在术语或伪码:它要把源级值、地址、类型、控制边和定义—使用关系编码为IR,交付AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,并把类型、phi输入、控制边、地址或定义—使用关系错位设为单一反事实。
6·3·6 记录和类中的字段
↡记录和类中的字段对应正式目录坐标“6.3.6 记录和类中的字段”,在“第6章 中间代码生成”中用于把“记录和类中的字段”放进中间表示、类型与控制流的输入—状态—变换—验证链,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 16/43。 原版目录键 6.3.6 记录和类中的字段。对“第6章 中间代码生成”而言,「6·3·6 记录和类中的字段」在第16次检查中改变可观察状态,因为它负责把“记录和类中的字段”放进中间表示、类型与控制流的输入—状态—变换—验证链;第6章 中间代码生成的输入角色、中间状态、输出、反例与等价性证据必须与“类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致”对齐,不能接受只复述“记录和类中的字段”名称而没有可观察状态、单故障和恢复验证。
6·4 表达式的翻译
↡表达式的翻译对应正式目录坐标“6.4 表达式的翻译”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 17/43。 原版目录键 6.4 表达式的翻译。在“第6章 中间代码生成”的第17个正式坐标中,「6·4 表达式的翻译」通过把源级值、地址、类型、控制边和定义—使用关系编码为IR推进中间表示、类型与控制流;复核者保存AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,出现类型、phi输入、控制边、地址或定义—使用关系错位就撤回结论。
6·4·1 表达式中的运算
↡表达式中的运算对应正式目录坐标“6.4.1 表达式中的运算”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 18/43。 原版目录键 6.4.1 表达式中的运算。围绕“源级类型、值、地址和控制边怎样在IR中保持可验证语义?”,“第6章 中间代码生成”在坐标18把「6·4·1 表达式中的运算」落实为把源级值、地址、类型、控制边和定义—使用关系编码为IR;只有AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表可重放且反例排除类型、phi输入、控制边、地址或定义—使用关系错位,本节点才算掌握。
6·4·2 增量翻译
↡增量翻译对应正式目录坐标“6.4.2 增量翻译”,在“第6章 中间代码生成”中用于把“增量翻译”放进中间表示、类型与控制流的输入—状态—变换—验证链,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 19/43。 原版目录键 6.4.2 增量翻译。“第6章 中间代码生成”的目录节点19「6·4·2 增量翻译」不能停在术语或伪码:它要把“增量翻译”放进中间表示、类型与控制流的输入—状态—变换—验证链,交付第6章 中间代码生成的输入角色、中间状态、输出、反例与等价性证据,并把只复述“增量翻译”名称而没有可观察状态、单故障和恢复验证设为单一反事实。
6·4·3 数组元素的寻址
↡数组元素的寻址对应正式目录坐标“6.4.3 数组元素的寻址”,在“第6章 中间代码生成”中用于以迭代域、访问关系和依赖约束证明循环变换、并行与局部性,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 20/43。 原版目录键 6.4.3 数组元素的寻址。对“第6章 中间代码生成”而言,「6·4·3 数组元素的寻址」在第20次检查中改变可观察状态,因为它负责以迭代域、访问关系和依赖约束证明循环变换、并行与局部性;迭代空间、依赖关系、调度、缓存复用、同步与边界测试必须与“类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致”对齐,不能接受变换违反跨迭代依赖或只在样例尺寸上偶然正确。
6·4·4 数组引用的翻译
↡数组引用的翻译对应正式目录坐标“6.4.4 数组引用的翻译”,在“第6章 中间代码生成”中用于以迭代域、访问关系和依赖约束证明循环变换、并行与局部性,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 21/43。 原版目录键 6.4.4 数组引用的翻译。在“第6章 中间代码生成”的第21个正式坐标中,「6·4·4 数组引用的翻译」通过以迭代域、访问关系和依赖约束证明循环变换、并行与局部性推进中间表示、类型与控制流;复核者保存迭代空间、依赖关系、调度、缓存复用、同步与边界测试,出现变换违反跨迭代依赖或只在样例尺寸上偶然正确就撤回结论。
6·5 类型检查
↡类型检查对应正式目录坐标“6.5 类型检查”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 22/43。 原版目录键 6.5 类型检查。围绕“源级类型、值、地址和控制边怎样在IR中保持可验证语义?”,“第6章 中间代码生成”在坐标22把「6·5 类型检查」落实为把源级值、地址、类型、控制边和定义—使用关系编码为IR;只有AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表可重放且反例排除类型、phi输入、控制边、地址或定义—使用关系错位,本节点才算掌握。
6·5·1 类型检查规则
↡类型检查规则对应正式目录坐标“6.5.1 类型检查规则”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 23/43。 原版目录键 6.5.1 类型检查规则。“第6章 中间代码生成”的目录节点23「6·5·1 类型检查规则」不能停在术语或伪码:它要把源级值、地址、类型、控制边和定义—使用关系编码为IR,交付AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,并把类型、phi输入、控制边、地址或定义—使用关系错位设为单一反事实。
6·5·2 类型转换
↡类型转换对应正式目录坐标“6.5.2 类型转换”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 24/43。 原版目录键 6.5.2 类型转换。对“第6章 中间代码生成”而言,「6·5·2 类型转换」在第24次检查中改变可观察状态,因为它负责把源级值、地址、类型、控制边和定义—使用关系编码为IR;AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表必须与“类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致”对齐,不能接受类型、phi输入、控制边、地址或定义—使用关系错位。
6·5·3 函数和运算符的重载
↡函数和运算符的重载对应正式目录坐标“6.5.3 函数和运算符的重载”,在“第6章 中间代码生成”中用于把“函数和运算符的重载”放进中间表示、类型与控制流的输入—状态—变换—验证链,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 25/43。 原版目录键 6.5.3 函数和运算符的重载。在“第6章 中间代码生成”的第25个正式坐标中,「6·5·3 函数和运算符的重载」通过把“函数和运算符的重载”放进中间表示、类型与控制流的输入—状态—变换—验证链推进中间表示、类型与控制流;复核者保存第6章 中间代码生成的输入角色、中间状态、输出、反例与等价性证据,出现只复述“函数和运算符的重载”名称而没有可观察状态、单故障和恢复验证就撤回结论。
6·5·4 类型推导和多态函数
↡类型推导和多态函数对应正式目录坐标“6.5.4 类型推导和多态函数”,在“第6章 中间代码生成”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 26/43。 原版目录键 6.5.4 类型推导和多态函数。围绕“源级类型、值、地址和控制边怎样在IR中保持可验证语义?”,“第6章 中间代码生成”在坐标26把「6·5·4 类型推导和多态函数」落实为让产生式、推导、分析选择、语义动作和树/IR状态逐步对应;只有文法版本、分析栈、输入指针、树、属性和动作日志可重放且反例排除分析选择或语义动作时点与文法依赖不一致,本节点才算掌握。
6·5·5 一个合一算法
↡一个合一算法对应正式目录坐标“6.5.5 一个合一算法”,在“第6章 中间代码生成”中用于把“一个合一算法”放进中间表示、类型与控制流的输入—状态—变换—验证链,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 27/43。 原版目录键 6.5.5 一个合一算法。“第6章 中间代码生成”的目录节点27「6·5·5 一个合一算法」不能停在术语或伪码:它要把“一个合一算法”放进中间表示、类型与控制流的输入—状态—变换—验证链,交付第6章 中间代码生成的输入角色、中间状态、输出、反例与等价性证据,并把只复述“一个合一算法”名称而没有可观察状态、单故障和恢复验证设为单一反事实。
6·6 控制流
↡控制流对应正式目录坐标“6.6 控制流”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 28/43。 原版目录键 6.6 控制流。对“第6章 中间代码生成”而言,「6·6 控制流」在第28次检查中改变可观察状态,因为它负责把源级值、地址、类型、控制边和定义—使用关系编码为IR;AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表必须与“类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致”对齐,不能接受类型、phi输入、控制边、地址或定义—使用关系错位。
6·6·1 布尔表达式
↡布尔表达式对应正式目录坐标“6.6.1 布尔表达式”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 29/43。 原版目录键 6.6.1 布尔表达式。在“第6章 中间代码生成”的第29个正式坐标中,「6·6·1 布尔表达式」通过把源级值、地址、类型、控制边和定义—使用关系编码为IR推进中间表示、类型与控制流;复核者保存AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,出现类型、phi输入、控制边、地址或定义—使用关系错位就撤回结论。
6·6·2 短路代码
↡短路代码对应正式目录坐标“6.6.2 短路代码”,在“第6章 中间代码生成”中用于把“短路代码”放进中间表示、类型与控制流的输入—状态—变换—验证链,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 30/43。 原版目录键 6.6.2 短路代码。围绕“源级类型、值、地址和控制边怎样在IR中保持可验证语义?”,“第6章 中间代码生成”在坐标30把「6·6·2 短路代码」落实为把“短路代码”放进中间表示、类型与控制流的输入—状态—变换—验证链;只有第6章 中间代码生成的输入角色、中间状态、输出、反例与等价性证据可重放且反例排除只复述“短路代码”名称而没有可观察状态、单故障和恢复验证,本节点才算掌握。
6·6·3 控制流语句
↡控制流语句对应正式目录坐标“6.6.3 控制流语句”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 31/43。 原版目录键 6.6.3 控制流语句。“第6章 中间代码生成”的目录节点31「6·6·3 控制流语句」不能停在术语或伪码:它要把源级值、地址、类型、控制边和定义—使用关系编码为IR,交付AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,并把类型、phi输入、控制边、地址或定义—使用关系错位设为单一反事实。
6·6·4 布尔表达式的控制流翻译
↡布尔表达式的控制流翻译对应正式目录坐标“6.6.4 布尔表达式的控制流翻译”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 32/43。 原版目录键 6.6.4 布尔表达式的控制流翻译。对“第6章 中间代码生成”而言,「6·6·4 布尔表达式的控制流翻译」在第32次检查中改变可观察状态,因为它负责把源级值、地址、类型、控制边和定义—使用关系编码为IR;AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表必须与“类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致”对齐,不能接受类型、phi输入、控制边、地址或定义—使用关系错位。
6·6·5 避免冗余的goto指令
↡避免冗余的goto指令对应正式目录坐标“6.6.5 避免冗余的goto指令”,在“第6章 中间代码生成”中用于在IR、寄存器、内存和目标指令间满足定义—使用、调用约定和代价,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 33/43。 原版目录键 6.6.5 避免冗余的goto指令。在“第6章 中间代码生成”的第33个正式坐标中,「6·6·5 避免冗余的goto指令」通过在IR、寄存器、内存和目标指令间满足定义—使用、调用约定和代价推进中间表示、类型与控制流;复核者保存基本块DAG、活跃区间、干涉图、指令匹配和差分执行,出现别名、寄存器类、调用约定或目标副作用被忽略就撤回结论。
6·6·6 布尔值和跳转代码
↡布尔值和跳转代码对应正式目录坐标“6.6.6 布尔值和跳转代码”,在“第6章 中间代码生成”中用于把“布尔值和跳转代码”放进中间表示、类型与控制流的输入—状态—变换—验证链,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 34/43。 原版目录键 6.6.6 布尔值和跳转代码。围绕“源级类型、值、地址和控制边怎样在IR中保持可验证语义?”,“第6章 中间代码生成”在坐标34把「6·6·6 布尔值和跳转代码」落实为把“布尔值和跳转代码”放进中间表示、类型与控制流的输入—状态—变换—验证链;只有第6章 中间代码生成的输入角色、中间状态、输出、反例与等价性证据可重放且反例排除只复述“布尔值和跳转代码”名称而没有可观察状态、单故障和恢复验证,本节点才算掌握。
6·7 回填
↡回填对应正式目录坐标“6.7 回填”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 35/43。 原版目录键 6.7 回填。“第6章 中间代码生成”的目录节点35「6·7 回填」不能停在术语或伪码:它要把源级值、地址、类型、控制边和定义—使用关系编码为IR,交付AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,并把类型、phi输入、控制边、地址或定义—使用关系错位设为单一反事实。
6·7·1 使用回填的一趟式代码生成
↡使用回填的一趟式代码生成对应正式目录坐标“6.7.1 使用回填的一趟式代码生成”,在“第6章 中间代码生成”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 36/43。 原版目录键 6.7.1 使用回填的一趟式代码生成。对“第6章 中间代码生成”而言,「6·7·1 使用回填的一趟式代码生成」在第36次检查中改变可观察状态,因为它负责声明阶段接口、名字/类型/状态角色和源—目标语义映射;阶段快照、符号表、类型、IR谱系、诊断和源位置必须与“类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致”对齐,不能接受阶段边界丢失绑定、类型、控制依赖或源位置。
6·7·2 布尔表达式的回填
↡布尔表达式的回填对应正式目录坐标“6.7.2 布尔表达式的回填”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 37/43。 原版目录键 6.7.2 布尔表达式的回填。在“第6章 中间代码生成”的第37个正式坐标中,「6·7·2 布尔表达式的回填」通过把源级值、地址、类型、控制边和定义—使用关系编码为IR推进中间表示、类型与控制流;复核者保存AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,出现类型、phi输入、控制边、地址或定义—使用关系错位就撤回结论。
6·7·3 控制转移语句
↡控制转移语句对应正式目录坐标“6.7.3 控制转移语句”,在“第6章 中间代码生成”中用于把“控制转移语句”放进中间表示、类型与控制流的输入—状态—变换—验证链,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 38/43。 原版目录键 6.7.3 控制转移语句。围绕“源级类型、值、地址和控制边怎样在IR中保持可验证语义?”,“第6章 中间代码生成”在坐标38把「6·7·3 控制转移语句」落实为把“控制转移语句”放进中间表示、类型与控制流的输入—状态—变换—验证链;只有第6章 中间代码生成的输入角色、中间状态、输出、反例与等价性证据可重放且反例排除只复述“控制转移语句”名称而没有可观察状态、单故障和恢复验证,本节点才算掌握。
6·7·4 break、continue和goto语句
↡break、continue和goto语句对应正式目录坐标“6.7.4 break、continue和goto语句”,在“第6章 中间代码生成”中用于把“break、continue和goto语句”放进中间表示、类型与控制流的输入—状态—变换—验证链,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 39/43。 原版目录键 6.7.4 break、continue和goto语句。“第6章 中间代码生成”的目录节点39「6·7·4 break、continue和goto语句」不能停在术语或伪码:它要把“break、continue和goto语句”放进中间表示、类型与控制流的输入—状态—变换—验证链,交付第6章 中间代码生成的输入角色、中间状态、输出、反例与等价性证据,并把只复述“break、continue和goto语句”名称而没有可观察状态、单故障和恢复验证设为单一反事实。
6·8 switch语句
↡switch语句对应正式目录坐标“6.8 switch语句”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 40/43。 原版目录键 6.8 switch语句。对“第6章 中间代码生成”而言,「6·8 switch语句」在第40次检查中改变可观察状态,因为它负责把源级值、地址、类型、控制边和定义—使用关系编码为IR;AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表必须与“类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致”对齐,不能接受类型、phi输入、控制边、地址或定义—使用关系错位。
6·8·1 switch语句的翻译
↡switch语句的翻译对应正式目录坐标“6.8.1 switch语句的翻译”,在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 41/43。 原版目录键 6.8.1 switch语句的翻译。在“第6章 中间代码生成”的第41个正式坐标中,「6·8·1 switch语句的翻译」通过把源级值、地址、类型、控制边和定义—使用关系编码为IR推进中间表示、类型与控制流;复核者保存AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,出现类型、phi输入、控制边、地址或定义—使用关系错位就撤回结论。
6·8·2 switch语句的语法制导翻译
↡switch语句的语法制导翻译对应正式目录坐标“6.8.2 switch语句的语法制导翻译”,在“第6章 中间代码生成”中用于沿依赖图安排属性求值、语义动作和栈位置,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 42/43。 原版目录键 6.8.2 switch语句的语法制导翻译。围绕“源级类型、值、地址和控制边怎样在IR中保持可验证语义?”,“第6章 中间代码生成”在坐标42把「6·8·2 switch语句的语法制导翻译」落实为沿依赖图安排属性求值、语义动作和栈位置;只有属性依赖图、拓扑序、栈快照、值与副作用日志可重放且反例排除属性未就绪、循环依赖或副作用错序,本节点才算掌握。
6·9 过程的中间代码
↡过程的中间代码对应正式目录坐标“6.9 过程的中间代码”,在“第6章 中间代码生成”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,并受源程序、表示、规则、目标机、代价与验证边界约束。正式坐标 43/43。 原版目录键 6.9 过程的中间代码。“第6章 中间代码生成”的目录节点43「6·9 过程的中间代码」不能停在术语或伪码:它要声明阶段接口、名字/类型/状态角色和源—目标语义映射,交付阶段快照、符号表、类型、IR谱系、诊断和源位置,并把阶段边界丢失绑定、类型、控制依赖或源位置设为单一反事实。
先预测,再操作三个章专属实验
1. 输入、表示与翻译流水线
为“第6章 中间代码生成”选择正式目录坐标,在参考流水线与单一故障间切换,逐阶段核对输入、变换、输出和不变量。
输入—表示—翻译流水线
第6章 中间代码生成
选择正式目录坐标,再比较参考编译合同与单一故障的首个状态分岔。
阶段 1/4
第6章 中间代码生成 · 输入与表示
- 输入
- 把含数组、短路布尔、循环、switch和调用的程序降到SSA式IR
- 变换
- 冻结中间表示、类型与控制流所需的源程序、文法/IR/机器版本、shape和符号角色
- 输出证据
- 第6章 中间代码生成的输入合同、版本表与基线快照
- 不变量检查
- 第6章 中间代码生成的源位置、名字、类型、控制/数据依赖和可见性没有越界
第6章 中间代码生成的可重放协议
| 阶段 | 允许动作 | 必留证据 | 拒绝条件 |
|---|---|---|---|
| 第6章 中间代码生成 · 输入与表示 | 冻结中间表示、类型与控制流所需的源程序、文法/IR/机器版本、shape和符号角色 | 第6章 中间代码生成的输入合同、版本表与基线快照 | 未满足“第6章 中间代码生成的源位置、名字、类型、控制/数据依赖和可见性没有越界” |
| 第6章 中间代码生成 · 状态变换 | 执行把DAG、三地址码、SSA、类型/声明、表达式、控制流、回填、switch和过程翻译成统一IR的最小算法并保存每一步状态 | 第6章 中间代码生成的参考轨迹、故障轨迹与首个状态分岔 | 未满足“第6章 中间代码生成每一步可由同一输入、规则、版本和顺序复算” |
| 第6章 中间代码生成 · 输出与代价 | 比较变换前后IR/目标状态、诊断、资源或分析精度 | 第6章 中间代码生成的前后差、语义映射、代价和恢复路径 | 未满足“第6章 中间代码生成没有把编译成功、分析收敛或单一基准加速当作完整正确性” |
| 第6章 中间代码生成 · 独立验证 | 重放预测、单故障、恢复和不适用边界 | 第6章 中间代码生成的接受、回退或拒绝理由 | 未满足“第6章 中间代码生成满足“类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致”” |
unit: "dbc-unit-06"
question: "源级类型、值、地址和控制边怎样在IR中保持可验证语义?"
scenario: "把含数组、短路布尔、循环、switch和调用的程序降到SSA式IR"
invariant: "类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致"
fault: "回填列表连接到错误基本块,短路表达式执行了本应跳过的副作用"
evidence: "AST/DAG、类型证明、CFG、SSA定义—使用链与回填日志"
reset: restore_concept_mode_stage_trace_step_case_gates_and_artifact“第6章 中间代码生成”要求从同一源程序、文法/IR/机器版本、规则、预算和执行顺序重放参考、故障与恢复路径。重置后若目录选择、模式、阶段、轨迹步骤、案例、证据门或交付包没有回到基线,本次比较已经混入状态泄漏。
本页回顾
掌握“第6章 中间代码生成”不是背术语、表格或伪码,而是围绕“源级类型、值、地址和控制边怎样在IR中保持可验证语义?”重建输入、表示、状态变换、输出、代价和独立验证,并用“类型、定义—使用、基本块、控制边、phi输入、地址计算与源位置一致”拒绝“回填列表连接到错误基本块,短路表达式执行了本应跳过的副作用”。最终交付为AST/DAG、类型证明、CFG、SSA定义—使用链与回填日志。
练习与答案
练习
- 问题 1:编译合同。 “第6章 中间代码生成”为什么必须先冻结源程序、文法/IR/机器版本、规则、预算和验证口径?
- 问题 2:目录逐项覆盖。 怎样证明“第6章 中间代码生成”的正式目录坐标已经进入机制、交互和练习?
- 问题 3:故障恢复。 怎样证明“回填列表连接到错误基本块,短路表达式执行了本应跳过的副作用”已经被修正?
名词解释
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 中间代码生成
检索键 dbc-A 对应正式目录坐标「第6章 中间代码生成」;在“第6章 中间代码生成”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 语法树的变体
检索键 dbc-B 对应正式目录坐标「6·1 语法树的变体」;在“第6章 中间代码生成”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 表达式的DAG
检索键 dbc-C 对应正式目录坐标「6·1·1 表达式的DAG」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 构造DAG的值编码方法
检索键 dbc-D 对应正式目录坐标「6·1·2 构造DAG的值编码方法」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 三地址代码
检索键 dbc-E 对应正式目录坐标「6·2 三地址代码」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 地址和指令
检索键 dbc-F 对应正式目录坐标「6·2·1 地址和指令」;在“第6章 中间代码生成”中用于在IR、寄存器、内存和目标指令间满足定义—使用、调用约定和代价,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 四元式
检索键 dbc-G 对应正式目录坐标「6·2·2 四元式」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 三元式
检索键 dbc-H 对应正式目录坐标「6·2·3 三元式」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 静态单赋值形式
检索键 dbc-I 对应正式目录坐标「6·2·4 静态单赋值形式」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 类型和声明
检索键 dbc-J 对应正式目录坐标「6·3 类型和声明」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 类型表达式
检索键 dbc-K 对应正式目录坐标「6·3·1 类型表达式」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 类型等价
检索键 dbc-L 对应正式目录坐标「6·3·2 类型等价」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 声明
检索键 dbc-M 对应正式目录坐标「6·3·3 声明」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 局部名字的存储布局
检索键 dbc-N 对应正式目录坐标「6·3·4 局部名字的存储布局」;在“第6章 中间代码生成”中用于追踪栈帧、非局部绑定、根集、堆对象和收集阶段,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 声明的序列
检索键 dbc-O 对应正式目录坐标「6·3·5 声明的序列」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 记录和类中的字段
检索键 dbc-P 对应正式目录坐标「6·3·6 记录和类中的字段」;在“第6章 中间代码生成”中用于把“记录和类中的字段”放进中间表示、类型与控制流的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 表达式的翻译
检索键 dbc-Q 对应正式目录坐标「6·4 表达式的翻译」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 表达式中的运算
检索键 dbc-R 对应正式目录坐标「6·4·1 表达式中的运算」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 增量翻译
检索键 dbc-S 对应正式目录坐标「6·4·2 增量翻译」;在“第6章 中间代码生成”中用于把“增量翻译”放进中间表示、类型与控制流的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 数组元素的寻址
检索键 dbc-T 对应正式目录坐标「6·4·3 数组元素的寻址」;在“第6章 中间代码生成”中用于以迭代域、访问关系和依赖约束证明循环变换、并行与局部性,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 数组引用的翻译
检索键 dbc-U 对应正式目录坐标「6·4·4 数组引用的翻译」;在“第6章 中间代码生成”中用于以迭代域、访问关系和依赖约束证明循环变换、并行与局部性,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 类型检查
检索键 dbc-V 对应正式目录坐标「6·5 类型检查」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 类型检查规则
检索键 dbc-W 对应正式目录坐标「6·5·1 类型检查规则」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 类型转换
检索键 dbc-X 对应正式目录坐标「6·5·2 类型转换」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 函数和运算符的重载
检索键 dbc-Y 对应正式目录坐标「6·5·3 函数和运算符的重载」;在“第6章 中间代码生成”中用于把“函数和运算符的重载”放进中间表示、类型与控制流的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 类型推导和多态函数
检索键 dbc-Z 对应正式目录坐标「6·5·4 类型推导和多态函数」;在“第6章 中间代码生成”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 一个合一算法
检索键 dbc-AA 对应正式目录坐标「6·5·5 一个合一算法」;在“第6章 中间代码生成”中用于把“一个合一算法”放进中间表示、类型与控制流的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 控制流
检索键 dbc-AB 对应正式目录坐标「6·6 控制流」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 布尔表达式
检索键 dbc-AC 对应正式目录坐标「6·6·1 布尔表达式」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 短路代码
检索键 dbc-AD 对应正式目录坐标「6·6·2 短路代码」;在“第6章 中间代码生成”中用于把“短路代码”放进中间表示、类型与控制流的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 控制流语句
检索键 dbc-AE 对应正式目录坐标「6·6·3 控制流语句」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 布尔表达式的控制流翻译
检索键 dbc-AF 对应正式目录坐标「6·6·4 布尔表达式的控制流翻译」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 避免冗余的goto指令
检索键 dbc-AG 对应正式目录坐标「6·6·5 避免冗余的goto指令」;在“第6章 中间代码生成”中用于在IR、寄存器、内存和目标指令间满足定义—使用、调用约定和代价,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 布尔值和跳转代码
检索键 dbc-AH 对应正式目录坐标「6·6·6 布尔值和跳转代码」;在“第6章 中间代码生成”中用于把“布尔值和跳转代码”放进中间表示、类型与控制流的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 回填
检索键 dbc-AI 对应正式目录坐标「6·7 回填」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 使用回填的一趟式代码生成
检索键 dbc-AJ 对应正式目录坐标「6·7·1 使用回填的一趟式代码生成」;在“第6章 中间代码生成”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 布尔表达式的回填
检索键 dbc-AK 对应正式目录坐标「6·7·2 布尔表达式的回填」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 控制转移语句
检索键 dbc-AL 对应正式目录坐标「6·7·3 控制转移语句」;在“第6章 中间代码生成”中用于把“控制转移语句”放进中间表示、类型与控制流的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- break、continue和goto语句
检索键 dbc-AM 对应正式目录坐标「6·7·4 break、continue和goto语句」;在“第6章 中间代码生成”中用于把“break、continue和goto语句”放进中间表示、类型与控制流的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- switch语句
检索键 dbc-AN 对应正式目录坐标「6·8 switch语句」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- switch语句的翻译
检索键 dbc-AO 对应正式目录坐标「6·8·1 switch语句的翻译」;在“第6章 中间代码生成”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- switch语句的语法制导翻译
检索键 dbc-AP 对应正式目录坐标「6·8·2 switch语句的语法制导翻译」;在“第6章 中间代码生成”中用于沿依赖图安排属性求值、语义动作和栈位置,需要连接原版范围、状态轨迹、等价性证据和不适用边界。
- 过程的中间代码
检索键 dbc-AQ 对应正式目录坐标「6·9 过程的中间代码」;在“第6章 中间代码生成”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,需要连接原版范围、状态轨迹、等价性证据和不适用边界。