第2章 一个简单的语法制导翻译器

从文法、推导、语法树、属性、翻译方案、预测分析、词法、符号表到三地址码构造完整小翻译器;用编译流水线、状态轨迹和等价性验证门交付token轨迹、预测栈、属性值、符号表与三地址码

学习目标

  • 能说明“第2章 一个简单的语法制导翻译器”如何从文法、推导、语法树、属性、翻译方案、预测分析、词法、符号表到三地址码构造完整小翻译器,并区分Pearson英文第二版、中文译本、现代工具和本站重写
  • 能先预测“一个词素怎样经过预测分析和语义动作变成可复算中间代码?”会改变哪一个输入、表示、栈/图状态、IR、目标代码或验证结果,再操作三类交互证据
  • 能只注入“语义动作移动到错误产生式位置,计算使用尚未就绪的属性”,定位首个偏离“token流、预测选择、语法树、属性、符号表和三地址码顺序一致”的状态,并从同一快照完成恢复

为什么从这个问题开始

“第2章 一个简单的语法制导翻译器”围绕“一个词素怎样经过预测分析和语义动作变成可复算中间代码?”建立贯穿任务:为带表达式、声明和控制流的小语言构造一趟翻译器。先写下哪个输入、表示、栈/图状态、IR、目标代码或验证结果会最先变化,再运行参考、故障和恢复路径;运行后补理由不算预测。只有守住“token流、预测选择、语法树、属性、符号表和三地址码顺序一致”并交付token轨迹、预测栈、属性值、符号表与三地址码,编译成功、分析收敛、目标码长度或基准加速才构成机制证据。

原版书目、556个正式坐标与访问边界

“第2章 一个简单的语法制导翻译器”以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官方目录继续核对版本与章/附录框架。

“第2章 一个简单的语法制导翻译器”再以中文版完整目录高校馆藏书目核对赵建华、郑滔、戴新宇译《编译原理(第2版)》,机械工业出版社,2009年,631页,ISBN 9787111251217。正式分母计入12个章标题、2个附录标题、533个数字编号节/小节和附录A的9个编号节,合计556个核心目录层级;章末总结、练习、参考文献和索引不重复计为知识节点。

原书与译本均受版权保护,“第2章 一个简单的语法制导翻译器”不复制、翻译或改写原文、图表、算法伪码和练习,只把官方目录当作范围坐标;中文讲解、状态轨迹、反例、交互、练习与答案均为独立教学重写。本页独立核对 1本页独立核对 2只用于核对现代IR、工具或实验边界,不反向证明原书采用本站表述。

原版目录层级与可验证机制

第2章 一个简单的语法制导翻译器

正式坐标 1/41。 原版目录键 第2章 一个简单的语法制导翻译器。在“第2章 一个简单的语法制导翻译器”的第1个正式坐标中,「第2章 一个简单的语法制导翻译器」通过让产生式、推导、分析选择、语义动作和树/IR状态逐步对应推进小型前端、语法制导动作与IR;复核者保存文法版本、分析栈、输入指针、树、属性和动作日志,出现分析选择或语义动作时点与文法依赖不一致就撤回结论。

2·1 引言

正式坐标 2/41。 原版目录键 2.1 引言。围绕“一个词素怎样经过预测分析和语义动作变成可复算中间代码?”,“第2章 一个简单的语法制导翻译器”在坐标2把「2·1 引言」落实为把“引言”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链;只有第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据可重放且反例排除只复述“引言”名称而没有可观察状态、单故障和恢复验证,本节点才算掌握。

2·2 语法定义

正式坐标 3/41。 原版目录键 2.2 语法定义。“第2章 一个简单的语法制导翻译器”的目录节点3「2·2 语法定义」不能停在术语或伪码:它要把“语法定义”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,交付第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据,并把只复述“语法定义”名称而没有可观察状态、单故障和恢复验证设为单一反事实。

2·2·1 文法定义

正式坐标 4/41。 原版目录键 2.2.1 文法定义。对“第2章 一个简单的语法制导翻译器”而言,「2·2·1 文法定义」在第4次检查中改变可观察状态,因为它负责让产生式、推导、分析选择、语义动作和树/IR状态逐步对应;文法版本、分析栈、输入指针、树、属性和动作日志必须与“token流、预测选择、语法树、属性、符号表和三地址码顺序一致”对齐,不能接受分析选择或语义动作时点与文法依赖不一致。

2·2·2 推导

正式坐标 5/41。 原版目录键 2.2.2 推导。在“第2章 一个简单的语法制导翻译器”的第5个正式坐标中,「2·2·2 推导」通过让产生式、推导、分析选择、语义动作和树/IR状态逐步对应推进小型前端、语法制导动作与IR;复核者保存文法版本、分析栈、输入指针、树、属性和动作日志,出现分析选择或语义动作时点与文法依赖不一致就撤回结论。

2·2·3 语法分析树

正式坐标 6/41。 原版目录键 2.2.3 语法分析树。围绕“一个词素怎样经过预测分析和语义动作变成可复算中间代码?”,“第2章 一个简单的语法制导翻译器”在坐标6把「2·2·3 语法分析树」落实为声明阶段接口、名字/类型/状态角色和源—目标语义映射;只有阶段快照、符号表、类型、IR谱系、诊断和源位置可重放且反例排除阶段边界丢失绑定、类型、控制依赖或源位置,本节点才算掌握。

2·2·4 二义性

正式坐标 7/41。 原版目录键 2.2.4 二义性。“第2章 一个简单的语法制导翻译器”的目录节点7「2·2·4 二义性」不能停在术语或伪码:它要让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,交付文法版本、分析栈、输入指针、树、属性和动作日志,并把分析选择或语义动作时点与文法依赖不一致设为单一反事实。

2·2·5 运算符的结合性

正式坐标 8/41。 原版目录键 2.2.5 运算符的结合性。对“第2章 一个简单的语法制导翻译器”而言,「2·2·5 运算符的结合性」在第8次检查中改变可观察状态,因为它负责让产生式、推导、分析选择、语义动作和树/IR状态逐步对应;文法版本、分析栈、输入指针、树、属性和动作日志必须与“token流、预测选择、语法树、属性、符号表和三地址码顺序一致”对齐,不能接受分析选择或语义动作时点与文法依赖不一致。

2·2·6 运算符的优先级

正式坐标 9/41。 原版目录键 2.2.6 运算符的优先级。在“第2章 一个简单的语法制导翻译器”的第9个正式坐标中,「2·2·6 运算符的优先级」通过让产生式、推导、分析选择、语义动作和树/IR状态逐步对应推进小型前端、语法制导动作与IR;复核者保存文法版本、分析栈、输入指针、树、属性和动作日志,出现分析选择或语义动作时点与文法依赖不一致就撤回结论。

2·3 语法制导翻译

正式坐标 10/41。 原版目录键 2.3 语法制导翻译。围绕“一个词素怎样经过预测分析和语义动作变成可复算中间代码?”,“第2章 一个简单的语法制导翻译器”在坐标10把「2·3 语法制导翻译」落实为沿依赖图安排属性求值、语义动作和栈位置;只有属性依赖图、拓扑序、栈快照、值与副作用日志可重放且反例排除属性未就绪、循环依赖或副作用错序,本节点才算掌握。

2·3·1 后缀表示

正式坐标 11/41。 原版目录键 2.3.1 后缀表示。“第2章 一个简单的语法制导翻译器”的目录节点11「2·3·1 后缀表示」不能停在术语或伪码:它要把“后缀表示”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,交付第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据,并把只复述“后缀表示”名称而没有可观察状态、单故障和恢复验证设为单一反事实。

2·3·2 综合属性

正式坐标 12/41。 原版目录键 2.3.2 综合属性。对“第2章 一个简单的语法制导翻译器”而言,「2·3·2 综合属性」在第12次检查中改变可观察状态,因为它负责沿依赖图安排属性求值、语义动作和栈位置;属性依赖图、拓扑序、栈快照、值与副作用日志必须与“token流、预测选择、语法树、属性、符号表和三地址码顺序一致”对齐,不能接受属性未就绪、循环依赖或副作用错序。

2·3·3 简单的语法制导定义

正式坐标 13/41。 原版目录键 2.3.3 简单的语法制导定义。在“第2章 一个简单的语法制导翻译器”的第13个正式坐标中,「2·3·3 简单的语法制导定义」通过沿依赖图安排属性求值、语义动作和栈位置推进小型前端、语法制导动作与IR;复核者保存属性依赖图、拓扑序、栈快照、值与副作用日志,出现属性未就绪、循环依赖或副作用错序就撤回结论。

2·3·4 树遍历

正式坐标 14/41。 原版目录键 2.3.4 树遍历。围绕“一个词素怎样经过预测分析和语义动作变成可复算中间代码?”,“第2章 一个简单的语法制导翻译器”在坐标14把「2·3·4 树遍历」落实为把“树遍历”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链;只有第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据可重放且反例排除只复述“树遍历”名称而没有可观察状态、单故障和恢复验证,本节点才算掌握。

2·3·5 翻译方案

正式坐标 15/41。 原版目录键 2.3.5 翻译方案。“第2章 一个简单的语法制导翻译器”的目录节点15「2·3·5 翻译方案」不能停在术语或伪码:它要把“翻译方案”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,交付第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据,并把只复述“翻译方案”名称而没有可观察状态、单故障和恢复验证设为单一反事实。

2·4 语法分析

正式坐标 16/41。 原版目录键 2.4 语法分析。对“第2章 一个简单的语法制导翻译器”而言,「2·4 语法分析」在第16次检查中改变可观察状态,因为它负责声明阶段接口、名字/类型/状态角色和源—目标语义映射;阶段快照、符号表、类型、IR谱系、诊断和源位置必须与“token流、预测选择、语法树、属性、符号表和三地址码顺序一致”对齐,不能接受阶段边界丢失绑定、类型、控制依赖或源位置。

2·4·1 自顶向下分析方法

正式坐标 17/41。 原版目录键 2.4.1 自顶向下分析方法。在“第2章 一个简单的语法制导翻译器”的第17个正式坐标中,「2·4·1 自顶向下分析方法」通过把“自顶向下分析方法”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链推进小型前端、语法制导动作与IR;复核者保存第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据,出现只复述“自顶向下分析方法”名称而没有可观察状态、单故障和恢复验证就撤回结论。

2·4·2 预测分析法

正式坐标 18/41。 原版目录键 2.4.2 预测分析法。围绕“一个词素怎样经过预测分析和语义动作变成可复算中间代码?”,“第2章 一个简单的语法制导翻译器”在坐标18把「2·4·2 预测分析法」落实为让产生式、推导、分析选择、语义动作和树/IR状态逐步对应;只有文法版本、分析栈、输入指针、树、属性和动作日志可重放且反例排除分析选择或语义动作时点与文法依赖不一致,本节点才算掌握。

2·4·3 何时使用空产生式

正式坐标 19/41。 原版目录键 2.4.3 何时使用空产生式。“第2章 一个简单的语法制导翻译器”的目录节点19「2·4·3 何时使用空产生式」不能停在术语或伪码:它要把“何时使用空产生式”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,交付第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据,并把只复述“何时使用空产生式”名称而没有可观察状态、单故障和恢复验证设为单一反事实。

2·4·4 设计一个预测语法分析器

正式坐标 20/41。 原版目录键 2.4.4 设计一个预测语法分析器。对“第2章 一个简单的语法制导翻译器”而言,「2·4·4 设计一个预测语法分析器」在第20次检查中改变可观察状态,因为它负责声明阶段接口、名字/类型/状态角色和源—目标语义映射;阶段快照、符号表、类型、IR谱系、诊断和源位置必须与“token流、预测选择、语法树、属性、符号表和三地址码顺序一致”对齐,不能接受阶段边界丢失绑定、类型、控制依赖或源位置。

2·4·5 左递归

正式坐标 21/41。 原版目录键 2.4.5 左递归。在“第2章 一个简单的语法制导翻译器”的第21个正式坐标中,「2·4·5 左递归」通过让产生式、推导、分析选择、语义动作和树/IR状态逐步对应推进小型前端、语法制导动作与IR;复核者保存文法版本、分析栈、输入指针、树、属性和动作日志,出现分析选择或语义动作时点与文法依赖不一致就撤回结论。

2·5 简单表达式的翻译器

正式坐标 22/41。 原版目录键 2.5 简单表达式的翻译器。围绕“一个词素怎样经过预测分析和语义动作变成可复算中间代码?”,“第2章 一个简单的语法制导翻译器”在坐标22把「2·5 简单表达式的翻译器」落实为让产生式、推导、分析选择、语义动作和树/IR状态逐步对应;只有文法版本、分析栈、输入指针、树、属性和动作日志可重放且反例排除分析选择或语义动作时点与文法依赖不一致,本节点才算掌握。

2·5·1 抽象语法和具体语法

正式坐标 23/41。 原版目录键 2.5.1 抽象语法和具体语法。“第2章 一个简单的语法制导翻译器”的目录节点23「2·5·1 抽象语法和具体语法」不能停在术语或伪码:它要让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,交付文法版本、分析栈、输入指针、树、属性和动作日志,并把分析选择或语义动作时点与文法依赖不一致设为单一反事实。

2·5·2 调整翻译方案

正式坐标 24/41。 原版目录键 2.5.2 调整翻译方案。对“第2章 一个简单的语法制导翻译器”而言,「2·5·2 调整翻译方案」在第24次检查中改变可观察状态,因为它负责把“调整翻译方案”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链;第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据必须与“token流、预测选择、语法树、属性、符号表和三地址码顺序一致”对齐,不能接受只复述“调整翻译方案”名称而没有可观察状态、单故障和恢复验证。

2·5·3 非终结符号的过程

正式坐标 25/41。 原版目录键 2.5.3 非终结符号的过程。在“第2章 一个简单的语法制导翻译器”的第25个正式坐标中,「2·5·3 非终结符号的过程」通过把源级值、地址、类型、控制边和定义—使用关系编码为IR推进小型前端、语法制导动作与IR;复核者保存AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,出现类型、phi输入、控制边、地址或定义—使用关系错位就撤回结论。

2·5·4 简化翻译器

正式坐标 26/41。 原版目录键 2.5.4 简化翻译器。围绕“一个词素怎样经过预测分析和语义动作变成可复算中间代码?”,“第2章 一个简单的语法制导翻译器”在坐标26把「2·5·4 简化翻译器」落实为让产生式、推导、分析选择、语义动作和树/IR状态逐步对应;只有文法版本、分析栈、输入指针、树、属性和动作日志可重放且反例排除分析选择或语义动作时点与文法依赖不一致,本节点才算掌握。

2·5·5 完整程序

正式坐标 27/41。 原版目录键 2.5.5 完整程序。“第2章 一个简单的语法制导翻译器”的目录节点27「2·5·5 完整程序」不能停在术语或伪码:它要把“完整程序”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,交付第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据,并把只复述“完整程序”名称而没有可观察状态、单故障和恢复验证设为单一反事实。

2·6 词法分析

正式坐标 28/41。 原版目录键 2.6 词法分析。对“第2章 一个简单的语法制导翻译器”而言,「2·6 词法分析」在第28次检查中改变可观察状态,因为它负责声明阶段接口、名字/类型/状态角色和源—目标语义映射;阶段快照、符号表、类型、IR谱系、诊断和源位置必须与“token流、预测选择、语法树、属性、符号表和三地址码顺序一致”对齐,不能接受阶段边界丢失绑定、类型、控制依赖或源位置。

2·6·1 删除空白和注释

正式坐标 29/41。 原版目录键 2.6.1 删除空白和注释。在“第2章 一个简单的语法制导翻译器”的第29个正式坐标中,「2·6·1 删除空白和注释」通过把“删除空白和注释”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链推进小型前端、语法制导动作与IR;复核者保存第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据,出现只复述“删除空白和注释”名称而没有可观察状态、单故障和恢复验证就撤回结论。

2·6·2 预读

正式坐标 30/41。 原版目录键 2.6.2 预读。围绕“一个词素怎样经过预测分析和语义动作变成可复算中间代码?”,“第2章 一个简单的语法制导翻译器”在坐标30把「2·6·2 预读」落实为把“预读”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链;只有第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据可重放且反例排除只复述“预读”名称而没有可观察状态、单故障和恢复验证,本节点才算掌握。

2·6·3 常量

正式坐标 31/41。 原版目录键 2.6.3 常量。“第2章 一个简单的语法制导翻译器”的目录节点31「2·6·3 常量」不能停在术语或伪码:它要把“常量”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,交付第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据,并把只复述“常量”名称而没有可观察状态、单故障和恢复验证设为单一反事实。

2·6·4 识别关键字和标识符

正式坐标 32/41。 原版目录键 2.6.4 识别关键字和标识符。对“第2章 一个简单的语法制导翻译器”而言,「2·6·4 识别关键字和标识符」在第32次检查中改变可观察状态,因为它负责把“识别关键字和标识符”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链;第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据必须与“token流、预测选择、语法树、属性、符号表和三地址码顺序一致”对齐,不能接受只复述“识别关键字和标识符”名称而没有可观察状态、单故障和恢复验证。

2·6·5 词法分析器

正式坐标 33/41。 原版目录键 2.6.5 词法分析器。在“第2章 一个简单的语法制导翻译器”的第33个正式坐标中,「2·6·5 词法分析器」通过声明阶段接口、名字/类型/状态角色和源—目标语义映射推进小型前端、语法制导动作与IR;复核者保存阶段快照、符号表、类型、IR谱系、诊断和源位置,出现阶段边界丢失绑定、类型、控制依赖或源位置就撤回结论。

2·7 符号表

正式坐标 34/41。 原版目录键 2.7 符号表。围绕“一个词素怎样经过预测分析和语义动作变成可复算中间代码?”,“第2章 一个简单的语法制导翻译器”在坐标34把「2·7 符号表」落实为声明阶段接口、名字/类型/状态角色和源—目标语义映射;只有阶段快照、符号表、类型、IR谱系、诊断和源位置可重放且反例排除阶段边界丢失绑定、类型、控制依赖或源位置,本节点才算掌握。

2·7·1 每个作用域一个符号表

正式坐标 35/41。 原版目录键 2.7.1 每个作用域一个符号表。“第2章 一个简单的语法制导翻译器”的目录节点35「2·7·1 每个作用域一个符号表」不能停在术语或伪码:它要声明阶段接口、名字/类型/状态角色和源—目标语义映射,交付阶段快照、符号表、类型、IR谱系、诊断和源位置,并把阶段边界丢失绑定、类型、控制依赖或源位置设为单一反事实。

2·7·2 符号表的使用

正式坐标 36/41。 原版目录键 2.7.2 符号表的使用。对“第2章 一个简单的语法制导翻译器”而言,「2·7·2 符号表的使用」在第36次检查中改变可观察状态,因为它负责声明阶段接口、名字/类型/状态角色和源—目标语义映射;阶段快照、符号表、类型、IR谱系、诊断和源位置必须与“token流、预测选择、语法树、属性、符号表和三地址码顺序一致”对齐,不能接受阶段边界丢失绑定、类型、控制依赖或源位置。

2·8 中间代码生成

正式坐标 37/41。 原版目录键 2.8 中间代码生成。在“第2章 一个简单的语法制导翻译器”的第37个正式坐标中,「2·8 中间代码生成」通过声明阶段接口、名字/类型/状态角色和源—目标语义映射推进小型前端、语法制导动作与IR;复核者保存阶段快照、符号表、类型、IR谱系、诊断和源位置,出现阶段边界丢失绑定、类型、控制依赖或源位置就撤回结论。

2·8·1 两种中间表示

正式坐标 38/41。 原版目录键 2.8.1 两种中间表示。围绕“一个词素怎样经过预测分析和语义动作变成可复算中间代码?”,“第2章 一个简单的语法制导翻译器”在坐标38把「2·8·1 两种中间表示」落实为把“两种中间表示”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链;只有第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据可重放且反例排除只复述“两种中间表示”名称而没有可观察状态、单故障和恢复验证,本节点才算掌握。

2·8·2 语法树的构造

正式坐标 39/41。 原版目录键 2.8.2 语法树的构造。“第2章 一个简单的语法制导翻译器”的目录节点39「2·8·2 语法树的构造」不能停在术语或伪码:它要让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,交付文法版本、分析栈、输入指针、树、属性和动作日志,并把分析选择或语义动作时点与文法依赖不一致设为单一反事实。

2·8·3 静态检查

正式坐标 40/41。 原版目录键 2.8.3 静态检查。对“第2章 一个简单的语法制导翻译器”而言,「2·8·3 静态检查」在第40次检查中改变可观察状态,因为它负责把“静态检查”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链;第2章 一个简单的语法制导翻译器的输入角色、中间状态、输出、反例与等价性证据必须与“token流、预测选择、语法树、属性、符号表和三地址码顺序一致”对齐,不能接受只复述“静态检查”名称而没有可观察状态、单故障和恢复验证。

2·8·4 三地址代码

正式坐标 41/41。 原版目录键 2.8.4 三地址代码。在“第2章 一个简单的语法制导翻译器”的第41个正式坐标中,「2·8·4 三地址代码」通过把源级值、地址、类型、控制边和定义—使用关系编码为IR推进小型前端、语法制导动作与IR;复核者保存AST/DAG、类型证明、CFG、SSA链、地址计算与回填列表,出现类型、phi输入、控制边、地址或定义—使用关系错位就撤回结论。

先预测,再操作三个章专属实验

分步1 / 3

1. 输入、表示与翻译流水线

为“第2章 一个简单的语法制导翻译器”选择正式目录坐标,在参考流水线与单一故障间切换,逐阶段核对输入、变换、输出和不变量。

输入—表示—翻译流水线

第2章 一个简单的语法制导翻译器

选择正式目录坐标,再比较参考编译合同与单一故障的首个状态分岔。

阶段 1/4

第2章 一个简单的语法制导翻译器 · 输入与表示

输入
为带表达式、声明和控制流的小语言构造一趟翻译器
变换
冻结小型前端、语法制导动作与IR所需的源程序、文法/IR/机器版本、shape和符号角色
输出证据
第2章 一个简单的语法制导翻译器的输入合同、版本表与基线快照
不变量检查
第2章 一个简单的语法制导翻译器的源位置、名字、类型、控制/数据依赖和可见性没有越界

第2章 一个简单的语法制导翻译器的可重放协议

阶段允许动作必留证据拒绝条件
第2章 一个简单的语法制导翻译器 · 输入与表示冻结小型前端、语法制导动作与IR所需的源程序、文法/IR/机器版本、shape和符号角色第2章 一个简单的语法制导翻译器的输入合同、版本表与基线快照未满足“第2章 一个简单的语法制导翻译器的源位置、名字、类型、控制/数据依赖和可见性没有越界”
第2章 一个简单的语法制导翻译器 · 状态变换执行从文法、推导、语法树、属性、翻译方案、预测分析、词法、符号表到三地址码构造完整小翻译器的最小算法并保存每一步状态第2章 一个简单的语法制导翻译器的参考轨迹、故障轨迹与首个状态分岔未满足“第2章 一个简单的语法制导翻译器每一步可由同一输入、规则、版本和顺序复算”
第2章 一个简单的语法制导翻译器 · 输出与代价比较变换前后IR/目标状态、诊断、资源或分析精度第2章 一个简单的语法制导翻译器的前后差、语义映射、代价和恢复路径未满足“第2章 一个简单的语法制导翻译器没有把编译成功、分析收敛或单一基准加速当作完整正确性”
第2章 一个简单的语法制导翻译器 · 独立验证重放预测、单故障、恢复和不适用边界第2章 一个简单的语法制导翻译器的接受、回退或拒绝理由未满足“第2章 一个简单的语法制导翻译器满足“token流、预测选择、语法树、属性、符号表和三地址码顺序一致””
unit: "dbc-unit-02"
question: "一个词素怎样经过预测分析和语义动作变成可复算中间代码?"
scenario: "为带表达式、声明和控制流的小语言构造一趟翻译器"
invariant: "token流、预测选择、语法树、属性、符号表和三地址码顺序一致"
fault: "语义动作移动到错误产生式位置,计算使用尚未就绪的属性"
evidence: "token轨迹、预测栈、属性值、符号表与三地址码"
reset: restore_concept_mode_stage_trace_step_case_gates_and_artifact

“第2章 一个简单的语法制导翻译器”要求从同一源程序、文法/IR/机器版本、规则、预算和执行顺序重放参考、故障与恢复路径。重置后若目录选择、模式、阶段、轨迹步骤、案例、证据门或交付包没有回到基线,本次比较已经混入状态泄漏。

本页回顾

掌握“第2章 一个简单的语法制导翻译器”不是背术语、表格或伪码,而是围绕“一个词素怎样经过预测分析和语义动作变成可复算中间代码?”重建输入、表示、状态变换、输出、代价和独立验证,并用“token流、预测选择、语法树、属性、符号表和三地址码顺序一致”拒绝“语义动作移动到错误产生式位置,计算使用尚未就绪的属性”。最终交付为token轨迹、预测栈、属性值、符号表与三地址码。

练习与答案

练习

  1. 问题 1:编译合同。 “第2章 一个简单的语法制导翻译器”为什么必须先冻结源程序、文法/IR/机器版本、规则、预算和验证口径?
  1. 问题 2:目录逐项覆盖。 怎样证明“第2章 一个简单的语法制导翻译器”的正式目录坐标已经进入机制、交互和练习?
  1. 问题 3:故障恢复。 怎样证明“语义动作移动到错误产生式位置,计算使用尚未就绪的属性”已经被修正?

名词解释

名词解释

本章出现的专业名词,用大白话再讲一遍。

一个简单的语法制导翻译器

检索键 dbc-A 对应正式目录坐标「第2章 一个简单的语法制导翻译器」;在“第2章 一个简单的语法制导翻译器”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

引言

检索键 dbc-B 对应正式目录坐标「2·1 引言」;在“第2章 一个简单的语法制导翻译器”中用于把“引言”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

语法定义

检索键 dbc-C 对应正式目录坐标「2·2 语法定义」;在“第2章 一个简单的语法制导翻译器”中用于把“语法定义”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

文法定义

检索键 dbc-D 对应正式目录坐标「2·2·1 文法定义」;在“第2章 一个简单的语法制导翻译器”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

推导

检索键 dbc-E 对应正式目录坐标「2·2·2 推导」;在“第2章 一个简单的语法制导翻译器”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

语法分析树

检索键 dbc-F 对应正式目录坐标「2·2·3 语法分析树」;在“第2章 一个简单的语法制导翻译器”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

二义性

检索键 dbc-G 对应正式目录坐标「2·2·4 二义性」;在“第2章 一个简单的语法制导翻译器”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

运算符的结合性

检索键 dbc-H 对应正式目录坐标「2·2·5 运算符的结合性」;在“第2章 一个简单的语法制导翻译器”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

运算符的优先级

检索键 dbc-I 对应正式目录坐标「2·2·6 运算符的优先级」;在“第2章 一个简单的语法制导翻译器”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

语法制导翻译

检索键 dbc-J 对应正式目录坐标「2·3 语法制导翻译」;在“第2章 一个简单的语法制导翻译器”中用于沿依赖图安排属性求值、语义动作和栈位置,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

后缀表示

检索键 dbc-K 对应正式目录坐标「2·3·1 后缀表示」;在“第2章 一个简单的语法制导翻译器”中用于把“后缀表示”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

综合属性

检索键 dbc-L 对应正式目录坐标「2·3·2 综合属性」;在“第2章 一个简单的语法制导翻译器”中用于沿依赖图安排属性求值、语义动作和栈位置,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

简单的语法制导定义

检索键 dbc-M 对应正式目录坐标「2·3·3 简单的语法制导定义」;在“第2章 一个简单的语法制导翻译器”中用于沿依赖图安排属性求值、语义动作和栈位置,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

树遍历

检索键 dbc-N 对应正式目录坐标「2·3·4 树遍历」;在“第2章 一个简单的语法制导翻译器”中用于把“树遍历”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

翻译方案

检索键 dbc-O 对应正式目录坐标「2·3·5 翻译方案」;在“第2章 一个简单的语法制导翻译器”中用于把“翻译方案”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

语法分析

检索键 dbc-P 对应正式目录坐标「2·4 语法分析」;在“第2章 一个简单的语法制导翻译器”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

自顶向下分析方法

检索键 dbc-Q 对应正式目录坐标「2·4·1 自顶向下分析方法」;在“第2章 一个简单的语法制导翻译器”中用于把“自顶向下分析方法”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

预测分析法

检索键 dbc-R 对应正式目录坐标「2·4·2 预测分析法」;在“第2章 一个简单的语法制导翻译器”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

何时使用空产生式

检索键 dbc-S 对应正式目录坐标「2·4·3 何时使用空产生式」;在“第2章 一个简单的语法制导翻译器”中用于把“何时使用空产生式”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

设计一个预测语法分析器

检索键 dbc-T 对应正式目录坐标「2·4·4 设计一个预测语法分析器」;在“第2章 一个简单的语法制导翻译器”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

左递归

检索键 dbc-U 对应正式目录坐标「2·4·5 左递归」;在“第2章 一个简单的语法制导翻译器”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

简单表达式的翻译器

检索键 dbc-V 对应正式目录坐标「2·5 简单表达式的翻译器」;在“第2章 一个简单的语法制导翻译器”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

抽象语法和具体语法

检索键 dbc-W 对应正式目录坐标「2·5·1 抽象语法和具体语法」;在“第2章 一个简单的语法制导翻译器”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

调整翻译方案

检索键 dbc-X 对应正式目录坐标「2·5·2 调整翻译方案」;在“第2章 一个简单的语法制导翻译器”中用于把“调整翻译方案”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

非终结符号的过程

检索键 dbc-Y 对应正式目录坐标「2·5·3 非终结符号的过程」;在“第2章 一个简单的语法制导翻译器”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

简化翻译器

检索键 dbc-Z 对应正式目录坐标「2·5·4 简化翻译器」;在“第2章 一个简单的语法制导翻译器”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

完整程序

检索键 dbc-AA 对应正式目录坐标「2·5·5 完整程序」;在“第2章 一个简单的语法制导翻译器”中用于把“完整程序”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

词法分析

检索键 dbc-AB 对应正式目录坐标「2·6 词法分析」;在“第2章 一个简单的语法制导翻译器”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

删除空白和注释

检索键 dbc-AC 对应正式目录坐标「2·6·1 删除空白和注释」;在“第2章 一个简单的语法制导翻译器”中用于把“删除空白和注释”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

预读

检索键 dbc-AD 对应正式目录坐标「2·6·2 预读」;在“第2章 一个简单的语法制导翻译器”中用于把“预读”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

常量

检索键 dbc-AE 对应正式目录坐标「2·6·3 常量」;在“第2章 一个简单的语法制导翻译器”中用于把“常量”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

识别关键字和标识符

检索键 dbc-AF 对应正式目录坐标「2·6·4 识别关键字和标识符」;在“第2章 一个简单的语法制导翻译器”中用于把“识别关键字和标识符”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

词法分析器

检索键 dbc-AG 对应正式目录坐标「2·6·5 词法分析器」;在“第2章 一个简单的语法制导翻译器”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

符号表

检索键 dbc-AH 对应正式目录坐标「2·7 符号表」;在“第2章 一个简单的语法制导翻译器”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

每个作用域一个符号表

检索键 dbc-AI 对应正式目录坐标「2·7·1 每个作用域一个符号表」;在“第2章 一个简单的语法制导翻译器”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

符号表的使用

检索键 dbc-AJ 对应正式目录坐标「2·7·2 符号表的使用」;在“第2章 一个简单的语法制导翻译器”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

中间代码生成

检索键 dbc-AK 对应正式目录坐标「2·8 中间代码生成」;在“第2章 一个简单的语法制导翻译器”中用于声明阶段接口、名字/类型/状态角色和源—目标语义映射,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

两种中间表示

检索键 dbc-AL 对应正式目录坐标「2·8·1 两种中间表示」;在“第2章 一个简单的语法制导翻译器”中用于把“两种中间表示”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

语法树的构造

检索键 dbc-AM 对应正式目录坐标「2·8·2 语法树的构造」;在“第2章 一个简单的语法制导翻译器”中用于让产生式、推导、分析选择、语义动作和树/IR状态逐步对应,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

静态检查

检索键 dbc-AN 对应正式目录坐标「2·8·3 静态检查」;在“第2章 一个简单的语法制导翻译器”中用于把“静态检查”放进小型前端、语法制导动作与IR的输入—状态—变换—验证链,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

三地址代码

检索键 dbc-AO 对应正式目录坐标「2·8·4 三地址代码」;在“第2章 一个简单的语法制导翻译器”中用于把源级值、地址、类型、控制边和定义—使用关系编码为IR,需要连接原版范围、状态轨迹、等价性证据和不适用边界。

讨论

评论区加载中…