
cha7-8语法制导翻译和中间代码生成 引言 属性文法 语法制导翻译概论 ■ 中间代码形式(重点) 简单赋值语句的翻译(重点) ■ 布尔表达式的翻译(重点) 控制结构的翻译(重点难点) 说明语句的翻译(略) 数组和结构的翻译(略) 作业 2023/2/28 课程目录☑1
2023/2/28 1 cha7-8 语法制导翻译和中间代码生成 引言 属性文法 语法制导翻译概论 中间代码形式(重点) 简单赋值语句的翻译(重点) 布尔表达式的翻译(重点) 控制结构的翻译(重点 难点) 说明语句的翻译(略) 数组和结构的翻译(略) 作业 课程目录

语义分析的任务p160 ■静态语义检查 ◆验证语法结构合法的程序是否真正有意义。 ◆例:类型检查、控制流检查、一致性检查、 相关名字检查。 ■动态语义处理一一翻译 ◆对程序意义的解释,执行真正的翻译。 ◆例:变量的存储分配表达式的求值 例:语句的翻译(中间代码的生成) ■总目标 ◆生成等价的中间代码。 2023/2/28 ☑2
2023/2/28 2 语义分析的任务 p160 静态语义检查 动态语义处理——翻译 总目标 验证语法结构合法的程序是否真正有意义。 例:类型检查、控制流检查、一致性检查、 相关名字检查。 对程序意义的解释,执行真正的翻译。 例:变量的存储分配 表达式的求值 例:语句的翻译(中间代码的生成) 生成等价的中间代码

编译中的语义分析p160 ■描述方法—一属性文法 ◆利用属性文法描述如何将各种语句和表达式 翻译成中间代码 ◆为每个文法符号赋予相应属性,对应每一个 产生式编制一个语义子程序 工作方式一一语法制导翻译 ◆当一个产生式获得匹配时,调用相应的语义 子程序实现语义检查与翻译 ◆每识别出一个语法结构时,完成相应的语义 检查与中间代码生成 2023/2/28 章节目录☑心回3
2023/2/28 3 编译中的语义分析 p160 描述方法——属性文法 利用属性文法描述如何将各种语句和表达式 翻译成中间代码 为每个文法符号赋予相应属性,对应每一个 产生式编制一个语义子程序 工作方式——语法制导翻译 当一个产生式获得匹配时,调用相应的语义 子程序实现语义检查与翻译 每识别出一个语法结构时,完成相应的语义 检查与中间代码生成 章节目录

属性文法 1属性文法举例 属性文法定义 属性的分类 ◆综合属性 ◆继承属性 2023/2/28 章节目录☑心4
2023/2/28 4 属性文法 属性文法举例 属性文法定义 属性的分类 综合属性 继承属性 章节目录

简单计算器的设计 L显示19 例3*5+4n E.val 19 n ■ 表达式的文法 1.L→En 2.E→E1+T E1.val + T.val 4 3.E→T 15 4.T→T1*F T.val 15 F.val 4 5.T→F 6. F→(E) 7.F→i T1.val* F.val 5 i.lexval 4 3 4 ■要解决的问题 F.val 3 i.lexval 5 ◆表达式求值 5 综合属性自下 i.lexval 3 而上传递信息 2023/2/28 3 □5
2023/2/28 5 简单计算器的设计 例 3*5+4n 表达式的文法 1. L→En 2. E→E1+T 3. E→T 4. T→T1*F 5. T→F 6. F→(E) 7. F→i E n E1 + T T T1 * F F i 3 i 5 F i 4 要解决的问题 表达式求值 .val 3 .val 3 .val 5 .val 15 .val 15 .val 4 .val 4 .val 19 L 显示19 .lexval 3 .lexval 5 .lexval 4 综合属性自下 而上传递信息

属性文法举例 简单计算器 用语义规则描述表达式求值。 该属性文法描述如下: 产生式 语义规则(属性计算规则) 1.L→En print(E.val)(虚属性) 2.E→E1+T E.va少=E1.val+T.val 非终结符设有 3.E→T E.val:=T.val 综合属性,代 4.T→T1*P ①.va少=Ti.valF.val 表表达式的值 5.T→F T.val:-F.val 6.F→(E) F.val:=E.val 终结符i设有综 7.F→i F.val:-i.lexval 合属性,其值由 词法分析器提供 2023/2/28 ☒D 6
2023/2/28 6 属性文法举例——简单计算器 用语义规则描述表达式求值。 该属性文法描述如下: 产生式 语义规则(属性计算规则) 1. L→En print( E .val ) (虚属性) 2. E→E1+T E.val:=E1.val+T.val 3. E→T E.val:=T.val 4. T→T1*F T.val:=T1.val*F.val 5. T→F T.val:=F.val 6. F→(E) F.val:=E.val 7. F→i F.val:=i.lexval 非终结符设有 综合属性,代 表表达式的值 终结符i设有综 合属性,其值由 词法分析器提供

例3*5+4n的语 显示19 法树与属性计算 E.val=19 n 依赖关系164 拓扑排序 E1.val=15 十 T.val=4 自下而上 ⑦t T.val=15 F.val=4 有 ©f T1.val=3 F.val=5 i.lexval=4 ②It @1什 F.val=3 i.lexval=5 四f 依赖图 i.lexval=3 2023/2/28 ☒D
2023/2/28 7 ① 例 3*5+4n的语 法树与属性计算 L .val=3 E n E1 + T T T1 * F F i i F .val=3 .val=5 i .val=15 .val=15 .val=4 .val=4 .val=19 显示19 .lexval=3 .lexval=5 .lexval=4 依赖关系164 拓扑排序 自下而上 依赖图 ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨

说明语句的属性文法 ■用语义规则描述变量说明。 ■该属性文法描述如下: 产生式 语义规则(属性计算规则) 继承属性 1. D→TL L.in):=T.type 2. T→int T.type):=integer 3. T→real T.type :=real 综合属性 4. L→L1,id LI in :L.in addtype(id.entry,L.in 5. L→id addtype(id.entry,L.in entry 单词id的属性,id在符号表的入口 addtype在符号表中为变量添加类型信息 2023/2/28 节目录 ☒D 8
2023/2/28 8 1. D→TL L.in := T.type 2. T→int T .type := integer 3. T→real T.type := real 4. L→L1 ,id L1 .in := L.in addtype( id.entry, L.in ) 5. L→id addtype( id.entry, L.in ) entry 单词 id 的属性,id在符号表的入口 addtype 在符号表中为变量添加类型信息 用语义规则描述变量说明。 该属性文法描述如下: 产生式 语义规则(属性计算规则) 说明语句的属性文法 综合属性 继承属性 节目录

说明语句的设计 例real id1,id2,id3 说明语句的文法 1.①→TL T.type in 类型2.个 → int real real 描述3.① real real 变量4. Li,id L1.1n ids 表5. real real id ■要解决的问题 L2.in id2 ◆记录标识符的类型 real real ◆类型信息传递 idr 继承属性自上 real 而下传递信息 2023/2/28 ☒D 9
2023/2/28 9 说明语句的设计 例 real id1,id2,id3 说明语句的文法 1. D → T L 2. T → int 3. T → real 4. L → L1,id 5. L → id D T L real L1 , id3 L2 , id2 id1 要解决的问题 记录标识符的类型 类型信息传递 real real real .type real .in real .in real .in real 继承属性自上 而下传递信息 类型 描述 变量 表

例real id1,id2,id3的语法树和属性计算 D 依赖关系 (4) 拓扑排序 T.type2real一 in=real t in-rea addtype real ⑦ 6 real 1d3.e③ addtype rea」 9 ⑧ L2.in=real id2.entry 自下而上无 addtype real 法直接实现 ⑩ 自上而下存在左 idi. ntry 递归,可改造 2023/2/28 节目录 ☒☑10
2023/2/28 10 例real id1,id2,id3的语法树和属性计算 D T L real L1 , id3 L2 , id2 id1 addtype .type=real .in=real .in=real .in=real 依赖关系 拓扑排序 自下而上无 法直接实现 .entry .entry .entry 自上而下存在左 递归,可改造 real addtype real addtype real ④ ⑤ ⑦ ⑥ ⑨ ⑧ ① ② ③ ⑩ 节目录