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

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

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

属性文法 属性文法举例 属性文法定义 属性的分类 ◆综合属性 ◆继承属性 2025/4/2 章节目绿刁4
2025/4/2 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→T1F T.val 15 F.val 4 5.T→F 6. F→(E) 7.F→i TL val* F.val 5 i.lexval 4 3 4 ■要解决的问题 F.val 3 i.lexval 5 ◆表达式求值 5 综合属性自下 i.lexval 3 而上传递信息 2025/4/2 3 ☒☑5
2025/4/2 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.vaD:=E1.val+T.val 非终结符设有 3.E→T E.val:=T.val 综合属性,代 4.T→T1*F( ①.va):=T1.val*p.val 表表达式的值 5.T→F T.val:F.val 6.F→(E) F.val:=E.val 终结符i设有综 7.F→i F.val:i.lexval 合属性,其值由 词法分析器提供 2025/4/2 6
2025/4/2 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 依赖关系164 ⑧ 拓扑排序 E1.val=15 T.val=4 自下而上 ⑤什 ⑦f T.val=15 F.val=4 ⑥t TL val=3 F.val=5 i.lexval=4 ②It ③1t F.val=3 i.lexval=5 of 依赖图 i.lexval=3 202542 I 7
2025/4/2 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 ①.iy:=T.type 2. T→int T.type:=integer 3. T→real T.type real 综合属性 4. L→Ll,idLl.in:=L.in addtype(id.entry,L.in 5. L→id addtype(id.entry,L.in entry 单词id的属性,id在符号表的入口 addtype在符号表中为变量添加类型信息 2025/4/2 节目绿 8
2025/4/2 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 idl,.id2,id3 说明语句的文法 1.D→ TL T.type .in 类型2. 个 real real int 描述3. T real real 变量4. Li,id Li.in id3 real 表5. real id ■ 要解决的问题 L2.in id2 ◆记录标识符的类型 real real ◆类型信息传递 idi 继承属性自上 real 而下传递信息 2025/412 I 9
2025/4/2 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的语法树和属性计算 依赖关系 4 ⑤ 拓扑排序 T.type-real.→+ in=real real real Li.in=real id.e®y addtype real ⑨ 8 L2 n=real, id2 entr 自下而上无 addtype real 法直接实现 10 自上而下存在左 idi.entry 递归,可改造 1 2025/4/2 节目绿
2025/4/2 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 ④ ⑤ ⑦ ⑥ ⑨ ⑧ ① ② ③ ⑩ 节目录