编译原理课件_____第7章_语义分析和中间代码的产生.pptVIP

编译原理课件_____第7章_语义分析和中间代码的产生.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理课件_____第7章_语义分析和中间代码的产生

Ch7.语义分析和中间代码产生 本章在编译程序中的地位 语义分析和中间代码的产生 语义分析的概念: 源程序经过词法分析、语法分析后,表明该源程序书写正确、符合程序语言所规定的语法,但语法分析并未对程序内部的逻辑含义加以分析,因此编译程序接着进行语义分析,即审查每个语法成分的静态语义。如果静态语义正确,则生成与该语言成分等效的中间代码,或直接生成目标代码。 教学要求 掌握: 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 后缀式 波兰逻辑学家卢卡西维奇(Lukasiewicz)发明的一种表示法,又称逆波兰式表示法。 后缀式这种方法是,把运算量(操作数)写在算符的前面,把算符写在运算量的后面(后缀)。 后缀式的定义(P167.) 一个表达式的后缀式可以如下定义: 1. 如果E是一个变量或常量,则E的后缀式是E自身。 2. 如果E是 E1 op E2 形式的表达式,这里op是任何二元操作符,则E的后缀式为 E1’E2’op,这里E1’ 和E2’分别为E1和E2的后缀式。 3. 如果E是(E1)形式的表达式,则E1的后缀式就是E的后缀式。 要求会正确写出表达式的后缀式。 后缀式求值 可以使用一个栈来求值 求值过程: 从左到右扫描后缀式,每碰到运算量就把它 推进栈,每碰到k目运算符就把它作用于栈顶 的k个项,弹出这k项,并用运算结果来代替这 k个项 后缀式:例 写表达式的后缀式要点: 1.后缀式中运算量的顺序与中缀式的相同; 2.算符出现的次序即表达式的运算次序; 3.不使用括号。 例:a+b ab+ a*(b+c) abc+* (a+b)*(c+d) -a+b*c a?bc*+ a/b*c-d*e x := a-b/(c+d) 用 ?表示取负算符(uminus) := 表示赋值算符(assign) 7.1.2 抽象语法树 语法制导翻译以语法树作基础, 实际上, 语法树可以作为一种合适的中间语言形式。 现在对语法树进行改造,去掉那些对翻译不必要的信息,将语法树进行抽象 --- 抽象语法树。 在表达式的抽象语法树中,运算符、关键字不作叶子结点而作为内部结点,叶子结点只是运算量。 抽象语法树也可以属性化,给结点加上属性变成带附注的抽象语法树。 语法制导翻译既可以基于语法分析树也可以基于抽象语法树进行,采用的基本方法是一样的。 抽象语法树:简例 例,为下面文法的句子 a-4+c 建立抽象语法树。 E? E+T | E-T | T T? (E) T? id | num 为每个运算量或运算符号都建立一个结点。 可以根据表达式的运算顺序自下而上的构造 --- 手工构造。 7.1.3 DAG图表示法: 无循环有向图(DAG ) 与语法树一样,对于表达式中的每个子表达式,DAG图中都有一个结点: 一个内部结点代表一个操作符,它的孩子代表操作数; ??两者不同的是 在DAG图中代表公共子表达式的结点具有多个父结点; 在一棵抽象语法树中公共子表达式被表示为重复的子树; 例如赋值语句的语法树与DAG图:a:=b * - c+b * -c 后

文档评论(0)

cgtk187 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档