- 19
- 0
- 约1.35万字
- 约 52页
- 2017-06-19 发布于湖北
- 举报
第8章 语法制导翻译和中间代码生成 马子睿 概述 程序设计语言的语义 静态语义——是对程序约束的描述,这些约束无法通过抽象语法规则来妥善地描述,实质上就是语法规则的良形式条件,它可以分为类型规则和作用域/可见性规则两大类 动态语义——程序单位描述的计算 编译程序的语义处理工作 静态语义审查 解释执行动态语义(计算)生成代码... 语义处理 静态语义分析:审查语法结构的静态语义 确定标识符的数据类型 类型检查和转换:检查运算对象的数据类型是否合法,必要时进行类型转换 一致性检查:一个对象只能被声明一次 作用域检查 控制流检查:控制语句转到合法的地方继续执行 翻译(若静态语义分析正确后才翻译) 概述 语义形式化 语义建模 文法模型——属性文法 命令式或操作式模型——操作语义学 应用式模型——指称语义学 公理式模型——公理语义学 属性文法 表达式文法 E—T+T| T or T T—n | b E ? T1 + T2 { T1.type = int T2.type= T1.type E.type :=int} E ? T1 or T2 { T1.type = bool T2.type= T1.type E.type :=bool} T ? n { T.type := int} T ? b { T.type := bool} 操作语义学 通过执行该段程序所改变的计算机状态来反映语义。 包括变量的所有值,可执行程序本身,各种系统定义的内部数据结构。用一组形式定义的操作来说明执行一条指令相应的状态怎样变化。 For (expr1;expr2;expr3) expr1; { Loop:if expr2=0 goto out 。。。 … } expr3; goto loop out: ... 指称语义学 基本概念是给每一段程序实体定义一个数学意义上的对象,和一个从实体实例向数学意义对象的映射的函数 特点:不但对全部程序赋予全文而且对程序设计语法 每一个语法成分短语(表达式,命令,声明…)都给予含义。 每一个语法成分(短语)的含义是以它的自身成分的含义的术语来定义的。 语义函数: 程序设计语言的语义利用映射函数来证明。语义函数将短语映射到它的指称。 Valuation[101] 表示把Valuation施用于101 Valuation[N] ------ 把它施用于N 定义: Valuation(用四个方程)因为有四个形式numeral Valuation[0] ?0 Valuation[1] ?1 Valuation[N0] ?2?Valuation [N] Valuation[N1] ?2?Valuation [N]+1 所以: Valuation[110]=2 ? Valuation[11] = 2 ? (2 ? Valuation[1]+1) =2 ?(2 ? 1+1) =6 公理语义学 一个语言的每个语法成分的含义定义为公理和演绎规则,用于推导出该成分执行的效果。 公理语义概念是随着程序正确性的证明而发展的。当正确性证明能构造时表明程序执行它的规格说明所描述的计算。在一个证明中,每一个语句之前之后都有一个逻辑表达式对程序的变量进行约束,以此说明这个语句的含义。 一般的记号
原创力文档

文档评论(0)