第八章语法制导翻译和中间代码生成 8.1概述 8.2属性文法和语法制导翻译 8.3语义分析 8.4中间代码 8.5一些语句的翻译
第八章语法制导翻译和中间代码生成 8.1概述 8.2属性文法和语法制导翻译 8.3语义分析 8.4中间代码 8.5一些语句的翻译
概述 语义处理 语法分析后的源程序→ 语义处理 。程序设计语言的语义 ·静态语义是对程序约束的描述,这些约束无法通过抽 象语法规则来妥善地描述,实质上就是语法规则的良 形式条件,它可以分为类型规则和作用域/可见性规则 两大类类型相容性变量先声明后引用名称相关要 求 动态语义程序单位描述的计算 ·编译程序的语义处理工作静态语义审查解释执行动 态语义(计算)生成代码
概述 语义处理 • 程序设计 语言的语义 • 静态语义是对程序约束的描述,这些约束无法通过抽 象语法规则来妥善地描述,实质上就是语法规则的良 形式条件,它可以分为类型规则和作用域/可见性规则 两大类 类型相容性 变量先声明后引用 名称相关要 求 动态语义 程序单位描述的计算 • 编译程序的语义处理工作 静态语义审查 解释执行动 态语义(计算)生成代码... 语 法 分 析 后 的 源 程 序 语义处理
概述 语义形式化语义建模 ·文法模型。属性文法 ·命令式或操作式模型--操作语义学 。应用式模型指称语义学 ·公理式模型--公理语义学
概述 语义形式化 语义建模 • 文法模型---- 属性文法 • 命令式或操作式模型 ----- 操作语义学 • 应用式模型-----指称语义学 • 公理式模型-----公理语义学
属性文法 表达式文法E一>T+TT or T T>nb E→T1+T2 Tl.type int T2.type=TI.type E.type :=int E→T10rT2 TI.type bool T2.type=TI.type E.type =bool) T→n T.type :int} T→b T.type bool}
属性文法 表达式文法 E—>T+T| T or T T—>n | b E→T 1 + T2 { T1.type = int T 2.type= T1.type E.type :=int} E →T 1 or T2 { T1.type = bool T 2.type= T1.type E.type :=bool} T → n { T.type := int} T → b { T.type := bool}
操作语义 描述一段程序的含义是通过执行该段程序所改变的计 算机(虚拟计算机)状态来反映。这个计算机的状态与 程序执行时的状态相对应:包括变量的所有值,可执行 程序本身,各种系统定义的内部数据结构。计算机里所 有的寄存器的值和存储单元的值作为计算机的状态,用 一组形式定义的操作来说明执行一条指令相应的状态怎 样变化。 For (expr1;expr2;expr3){ exprl; Loop:if expr2=0 goto out … expr3; goto loop 0ut:…
操作语义 描述一段程序的含义是通过执行该段程序所改变的计 算机(虚拟计算机)状态来反映。这个计算机的状态与 程序执行时的状态相对应:包括变量的所有值,可执行 程序本身,各种系统定义的内部数据结构。计算机里所 有的寄存器的值和存储单元的值作为计算机的状态,用 一组形式定义的操作来说明执行一条指令相应的状态怎 样变化。 For (expr1;expr2;expr3){ expr1; ... Loop:if expr2=0 goto out } … expr3; goto loop out: