- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章 语法制导翻译和中间代码生成 学习目标: 掌握: 常见语法成分的中间代码形式; 常见语法成分的属性文法或翻译方法 理解: 属性文法、语法制导翻译方法 主要内容 属性文法和语法制导翻译: 属性文法 语法制导翻译基本思想 中间代码的表示形式(逆波兰式、四元式、三元式、间接三元式、树结构等等) 简单算术表达式和赋值语句的翻译 布尔表达式到四元式的翻译 控制结构翻译成四元式 语义分析基础 语义分析的内容 主要是类型相容检查,有以下几种: 各种条件表达式的类型是不是boolean型? 运算符的分量类型是否相容? 赋值语句的左右部的类型是否相容? 形参和实参的类型是否相容? 下标表达式的类型是否为所允许的类型? 函数说明中的函数类型和返回值的类型是否一致? 语义分析基础-语义分析的内容(续) 其它语义检查: V[E]中的V是不是变量,而且是数组类型? V.i中的V是不是变量,而且是记录类型?i是不是该记录的域名? x+f(…)中的f是不是函数名?形参个数和实参个数是否一致? 每个使用性标识符是否都有声明?有无标识符的重复声明? 语义分析基础 在语义分析同时产生中间代码,在这种模式下,语义分析的主要功能如下: 语义审查 在扫描声明部分时构造标识符的符号表 在扫描语句部分时产生中间代码 中间代码:独立于机器,复杂性介于源语言和机器语言之间,十分接近目标机器指令的一种表示形式。 对于中间代码的产生,是很困难的,因为语义形式化比语法形式化难得多。目前普遍采用的 语义分析方法——语法制导翻译方法 使用属性文法为工具来说明程序设计语言的语义。 6.1属性文法(Attribute Grammar) 属性 对文法的每一个符号,引进一些属性,这些属性代表与文法符号相关的信息,如类型、值、存储位置等。 语义规则 为文法的每一个产生式配备的计算属性的计算规则,称为语义规则。 属性文法是带属性的一种文法 它的主要思想: 首先对于每个文法符号引进相关的属性符号; 其次对于每个产生式写出计算属性值的语义规则 6.1 属性文法(续) 属性文法的形式定义 一个属性文法是一个三元组,A=(G, V, F) G是一个上下文无关文法; V是属性的有穷集; F是关于属性的断言的有穷集。 说明: 每个属性与文法符号相联,N.t表示文法符号N的属性t。属性值又称语义值。存储属性值的变量又称语义变量。 每个断言与文法的某个产生式相联,写在{ }内。属性的断言又称语义规则,它所描述的工作可以包括属性计算、静态语义检查、符号表的操作、代码生成等,有时写成函数或过程段。 6.1 属性文法(续) 例 完成类型检查的属性文法 E→T1+T2 {T1.t=int AND T2.t=int} E→T1 or T2 {T1.t=bool AND T2.t=bool} T→num {T.t :=int} T→true {T.t :=bool} T→false {T.t :=bool}? 6.1 属性文法(续) 属性的分类: 综合属性: 从语法树的角度来看,如果一个结点的某一属性值是由该结点的子结点的属性值计算来的,则称该属性为综合属性。 内在属性是综合属性。 用于“自下而上”传递信息 6.1 属性文法(续) 继承属性 从语法树的角度来看,若一个结点的某一属性值是由该结点的兄弟结点和(或)父结点的属性值计算来的,则称该属性为继承属性。 用于“自上而下”传递信息 特别说明: 终结符只有综合属性,它们由词法分析器提供 非终结符既有综合属性也有继承属性,但文法开始符没有继承属性 6.1 属性文法(续) 例 简单算术表达式求值的属性文法 L→E { 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 }? 6.2 语法制导翻译概论 语法制导翻译 基本思想: 在语法分析过程中,随着分析的步步进展,每当使用一条产生式进行推导(对于自上而下分析)或归约(对于自下而上分析),就执行该产生式所对应的语义动作(语义子程序),完成相应的翻译工作(产生中间代码)。 语法制导翻译法不论对自上而下分析或自下而上分析都适用。 6.3 中间代码的形式 定义: 中间代码是独立于机器,复杂性介于源语言和机器语言之间,十分接近目标机器指令的一种表示形式。 使用中间代码的好处: 中间代码与具体机器无关,便于编译程序改变目标机 便于对中间代码进行与机器无关的优化 表示形式: 逆波兰式、
文档评论(0)