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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Ch7语义分析的和中间代码产生

编译原理;本章在编译程序中的地位;CH.7 语义分析和中间代码的产生;语义分析和中间代码的产生;静态语义检查;教学要求;教学内容; 7.1 中间语言 ; 后缀式的定义(P167.); 后缀式:例;写后缀式:练习; 把表达式翻译为后缀式的 语义规则描述(属性文法); 7.1.2 图表示法; 图表示法:DAG; 抽象语法树 公共子表达式 重复出现;(b) DAG 公共子表达式只出现一次,一个结点可以有多个父结点; 后缀式与抽象语法树(DAG)的关系;表7.2 产生赋值语句的抽象语法树 的属性文法(P169.);抽象语法树或DAG的表示法: 图7.4; 上次课主要内容(1); 7.1.3 三地址代码;三地址代码:说明;例, P170.图7.5,是相应于P168.图7.3的抽象语法树和DAG的三地址代码: (a) 对应抽象语法树的代码 (b) 对应DAG的代码 T1 := -c T1 := -c T2 := b* T1 T2 := b*T1 T3 := -c T5 := T2+T2 T4 := b* T3 a := T5 T5 := T2+T4 a := T5 注: 临时变量的名字对应抽象语法树的内部结点(算符结点), 表达式中的每个运算都要引入一个新的临时变量存放计算结果, 要多少引入多少。;(1) 赋值语句 x := y op z ; op是二元算术或逻辑运算符 (2) 赋值语句 x := op y ; op是一元算符,如取负、逻辑非、移位及类型转换 (3) 复制语句 x := y; (4) 无条件转移语句 goto L; 符号标号 L 代表存放中间代码的数组中三地址代码语句的下标 (5) 条件转移语句 if x relop y goto L ; if a goto L ; relop是关系运算符; a是布尔量;(6) 过程调用语句 param x; x是实参数 call p, n ; p过程名, n实参个数 过程返回语句 return y; y返回值, 可有可无 (7) 索引赋值 x := y[i]; =[ ]变址取数 x[i] := y ; [ ]=变址存数 (8) 地址和指针赋值 x := &y; x := * y; * x := y; 注:选择适当的算符集合是中间代码设计的重要问题,应该不大不小,足以实现源语言的操作运算。;1. 赋值语句的三地???代码结构: 对表达式E求值的三地址语句序列 ① id := E T := E的值 id.place := T ② id := y 只一个三地址语句 id.place := y 2. 为赋值语句生成三地址代码的S-属性文法定义 见P171.表7.3;(1) E.place 表示存放E值的名字。 (2) E.code 表示对E求值的三地址语句序列。 (3) S.code 表示赋值句S的三地址语句序列。 (4) 函数 newtemp 产生一个新的临时变量。 (5) 过程 gen( , , , , ) 产生一个三地址语句。 例如 gen(x, ‘:=’, y, ‘+’, z) 生成 x := y + z 注:实际实现中,三地址语句序列往往是被存放到一个输出文件中,而不是将三地址语句序列置入code属性之中。参见P179.图7.10的翻译模式。;例. 翻译赋值语句 a:=b*-c+b*-c 为三地址代码 自下而上语法制导翻译,结

文档评论(0)

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

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

版权声明书
用户编号:6212135231000003

1亿VIP精品文档

相关文档