Ch7语义分析及中间代码产生.ppt

  1. 1、本文档共127页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Ch7.语义分析和中间代码产生 第七章 语义分析和中间代码产生 本章在编译程序中的地位 CH.7 语义分析和中间代码的产生 本章将把上一章所介绍的语法制导翻译方法和技术应用于程序语言典型结构的语义分析和中间代码的生成中。 应用到的主要方法技术有: 1.属性文法和翻译模式,翻译为中间代码。 2.一遍扫描的语法制导翻译方法(结合自下而上语法分析)。 3.引进标记非终结符及ε产生式,实现在自下而上分析过程中计算属性值。 4.改变基础文法,以避免使用继承属性。 语义分析和中间代码的产生 基本过程: 1. 先分析欲翻译的语言语句的结构以及欲翻译得到的中间代码的结构; 2. 在分析的基础之上,设计语言语句的属性文法或翻译模式; 3. 设计的属性文法或翻译模式能结合自下而上语法分析进行一遍扫描的语法制导翻译, 产生需要的中间代码。 静态语义检查 语义分析和中间代码生成阶段,编译程序要做的工作是进行静态语义检查和翻译。把经过语 法分析和语义分析而获得的源程序中间表示翻译为中间代码表示。 静态语义检查通常包括:参见P166. 1. 类型检查; 参见7.7 类型检查 2. 控制流检查; 3. 一致性检查; 4. 相关名字检查; 5. 其他检查,如名字的作用域分析,等。 静态语义检查和中间代码的地位, 参见图7.1 教学要求 掌握: 1. 逆波兰式, DAG图, 抽象语法树, 三地址代码, 三元式, 四元式等中间代码表示; 2. 简单赋值语句的翻译, 带数组元素引用的赋值句的翻译; 3. 布尔表达式的翻译, 控制语句中布尔表达式的翻译; 4. 控制语句的翻译。 了解理解:说明语句的翻译,过程调用和参数的处理。 教学内容 7.1 中间语言 后缀式,DAG,三地址码(四元式,三元式,间接三元式) *7.2 说明语句的翻译 7.3 赋值语句的翻译,数组元素引用的翻译 7.4 布尔表达式的翻译 求布尔式值的翻译,作为控制条件的翻译 7.5 控制语句的翻译 if , while , goto , case 7.6 过程调用的处理, 参数传递的处理 *7.7 类型检查(不作要求,不讲) 7.1 中间语言 要掌握几种中间语言的基本结构: 逆波兰表示即后缀式 图表示法(抽象语法树、DAG图表示) 三地址代码(四元式、三元式、间接三元式) 7.1.1 后缀式 后缀式表示法又称逆波兰表示法。这种方法是,把运算量(操作数)写在算符的前面,把算符写在运算量的后面(后缀)。 后缀式的定义(P167.) 一个表达式的后缀式可以如下定义: 1. 如果E是一个变量或常量,则E的后缀式是E自身。 2. 如果E是 E1 op E2 形式的表达式,这里op是任何二元操作符,则E的后缀式为 E1’E2’op,这里E1’ 和E2’分别为E1和E2的后缀式。 3. 如果E是(E1)形式的表达式,则E1的后缀式就是E的后缀式。 要求会正确写出表达式的后缀式。 后缀式:例 写表达式的后缀式要点: 1.后缀式中运算量的顺序与中缀式的相同; 2.算符出现的次序即表达式的运算次序; 3.不使用括号。 例:a+b ab+ a*(b+c) abc+* (a+b)*(c+d) ab+cd+* -a+b*c a?bc*+ a/b**c-d*e abc**/de*- ?(A=0∧B≠0) A0=B0≠∧? 写后缀式:练习 写出下列各式的逆波兰表示: (1) -a-(b*c/(c-d) + (-b)*a) (2) -A+B*C↑ (D/E)/F (3) x := a-b/(c+d) 把表达式翻译为后缀式的 语义规则描述(属性文法) P167.表7.1: 7.1.2 图表示法 图表示法包括DAG与抽象语法树。两者都可以描述源程序的自然层次结构。DAG更加紧凑,可以标识出公共子表达式。 抽象语法树,在6.2.4节已讲过。 语法制导产生表达式的抽象语法树: P146.表6.4的S-属性文法 P155.图6.17的L-属性文法及翻译模式 P157.图6.20的递归下降构造抽象语法树的翻译器程序 图表示法:DAG 无循环有向图(Directed Acyclic Graph , 简称 DAG )。 是抽象语法树的改造。 与抽象语法树一样, 对于表达式中的每个子表达式, DAG图中都有一个结点。一个内部结点代表一个操作符, 它的子结点代表操作数。 与

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档