第4章类型检查 语法 中间 分析 语 法 类型 语 法 树 代码 中间 树 生成 表 器 器 器 本章内容 简要介绍语法制导的翻译 介绍静态检查中最典型的部分一类型检查 忽略其他的静态检查:控制流检查、唯一性检查、 关联名字检查等
第4章 类 型 检 查 语法 类型 中间 记号 语法 语 法 语 法 中间 分析 器 类型 检查 器 代码 生成 语 法 树 语 法 树 中间 表示 记号 流 器 器 生成 器 树 本章内容 –简要介绍语法制导的翻译 – 介绍静态检查中最典型的部分 —— 类型检查 忽略其他的静态检查:控制流检查、唯一性检查、 关联名字检查等
4.1语法制导的翻译 4.1.1翻译方案 ·例简单台式计算器的语法制导定义 产生式 语义动作 L->En print (E.val) E→E,+T E.yal E.val Tyal E→T E.val Tyal T→T*F Tval=T .val Eval T→F Tyal Eyal F→(E) Eyal E.val F→digit Eval digit.lexval
4 1. 语法制导的翻译 4.1.1 翻译方案 • 例 简单台式计算器的语法制导定义 产 生 式 语 义 动 作 L E n print (E.val) E E1 + T E.val = E1 .val + T.val E T E.val = T.val T T1 F T.val = T1.val F.val T F T.val = F.val F (E) F.val = E.val F digit F.val = digit.lexval
4.1语法制导的翻译 语法制导的翻译方案的形式 -基础文法 每个文法符号有一组属性 每个文法产生式A→a有一组形式为 b=f(c,c2...,ck) 的语义动作,其中b是A的属性,C,C2,,C是产 生式右部文法符号的属性或A的其他属性,f是函 数 属性可以表示任何东西:串、数值、类型、表引 用,或其他想表示的东西
4 1. 语法制导的翻译 • 语法制导的翻译方案的形式 – 基础文法 – 每个文法符号有一组属性 – 每个文法产生式A 有一组形式为 b = f (c c c ) 1, c2, …, ck ) 的语义动作,其中b 是A 的属性,c1, c2, …, c 1 2 k 是产 生式右部文法符号的属性或 A 的其他属性,f 是函 数 – 属性可以表示任何东西:串、数值、类型、表引 用,或其他想表示的东西
4.1语法制导的翻译 ·例8+5*2n的注释分析树 L E.ya7=18 E.val 8 T.yal 10 T.val 8 T.yal 5 米 F.val 2 F.yal 8 Fval-5 digit.lexval 2 digit.lexval 8 digit.lexval 5
4 1. 语法制导的翻译 • 例 8+5*2 n的注释分析树 L E l 18 n .val = 18 n E.val = 8 + T.val = 10 T.val = 8 T.val = 5 + F.val = 2 digit.lexval = 2 T.val 8 F.val = 8 T.val 5 F.val 8 F.val = 5 g digit.lexval = 8 digit.lexval = 5
4.1语法制导的翻译 分析树各结点属性的计算可以自下而上地完成 L E.val 18 E.val 8 T.yal 10 T.val 8 T.yal 5 米 F.val 2 F.val 8 F.d=5 digit.lexval 2 digit.lexval 8 digit.lexval 5
4 1. 语法制导的翻译 分析树各结点属性的计算可以自下而上地完成 L E l 18 n .val = 18 n E.val = 8 + T.val = 10 T.val = 8 T.val = 5 + F.val = 2 digit.lexval = 2 T.val 8 F.val = 8 T.val 5 F.val 8 F.val = 5 g digit.lexval = 8 digit.lexval = 5
4.1语法制导的翻译 分析树各结点属性的计算可以自下而上地完成 L E.val 18 E.val 8 T.yal 10 T.val 8 T.yal 5 米 F.val 2 F.yal 8 F.d=5 digit.lexval 2 digit.lexval =8 digit.lexval 5
4 1. 语法制导的翻译 分析树各结点属性的计算可以自下而上地完成 L E l 18 n .val = 18 n E.val = 8 + T.val = 10 T.val = 8 T.val = 5 + F.val = 2 digit.lexval = 2 T.val 8 F.val = 8 T.val 5 F.val 8 F.val = 5 g digit.lexval = 8 digit.lexval = 5
4.1语法制导的翻译 分析树各结点属性的计算可以自下而上地完成 L E.val 18 E.val 8 T.yal 10 T.val 8 T.yal 5 米 F.val 2 F.yal 8 F.d=5 digit.lexval 2 digit.lexval 8 digit.lexval 5
4 1. 语法制导的翻译 分析树各结点属性的计算可以自下而上地完成 L E l 18 n .val = 18 n E.val = 8 + T.val = 10 T.val = 8 T.val = 5 + F.val = 2 digit.lexval = 2 T.val 8 F.val = 8 T.val 5 F.val 8 F.val = 5 g digit.lexval = 8 digit.lexval = 5
4.1语法制导的翻译 分析树各结点属性的计算可以自下而上地完成 L E.val 18 E.val 8 T.yal 10 T.yal 8 T.yal 5 米 F.val 2 F.val 8 Fval-5 digit.lexval 2 digit.lexval 8 digit.lexval 5
4 1. 语法制导的翻译 分析树各结点属性的计算可以自下而上地完成 L E l 18 n .val = 18 n E.val = 8 + T.val = 10 T.val = 8 T.val = 5 + F.val = 2 digit.lexval = 2 T.val 8 F.val = 8 T.val 5 F.val 8 F.val = 5 g digit.lexval = 8 digit.lexval = 5
4.1语法制导的翻译 分析树各结点属性的计算可以自下而上地完成 L E.val 18 E.yal 8 T.yal 10 T.yal 8 T.yal 5 米 F.val 2 F.val 8 digit.lexval 2 digit.lexval 8 digit.lexval 5
4 1. 语法制导的翻译 分析树各结点属性的计算可以自下而上地完成 L E l 18 n .val = 18 n E.val = 8 + T.val = 10 T.val = 8 T.val = 5 + F.val = 2 digit.lexval = 2 T.val 8 F.val = 8 T.val 5 F.val 8 F.val = 5 g digit.lexval = 8 digit.lexval = 5
4.1语法制导的翻译 分析树各结点属性的计算可以自下而上地完成 L E.val 18 E.yal 8 T.yal 10 T.yal 8 T.yal 5 米 F.val 2 F.val 8 digit.lexval 2 digit.lexyal 8 digit.lexyal 5
4 1. 语法制导的翻译 分析树各结点属性的计算可以自下而上地完成 L E l 18 n .val = 18 n E.val = 8 + T.val = 10 T.val = 8 T.val = 5 + F.val = 2 digit.lexval = 2 T.val 8 F.val = 8 T.val 5 F.val 8 F.val = 5 g digit.lexval = 8 digit.lexval = 5