中间代码生成 PPT课件.pptVIP

  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文档。上传文档
查看更多
中间代码生成 PPT课件

医学课件 * * * 医学课件 第七章 中间代码生成 中间语言 语法制导方法 简单表达式的中间代码生成 原子语句的中间代码生成 结构语句的中间代码生成 声明的中间代码 医学课件 7.1中间语言 后缀式----逆波兰式 特别是表达式的内部表示 图结构中间代码 抽象语法树 有向不循环图 三地址中间代码 三元式 四元式 医学课件 7.1.1后缀表达式相关 中缀变后缀算法 初始化一个空堆栈,将结果字符串变量置空。 从左到右读入中缀表达式,每次一个字符。 如果字符是操作数,将它添加到结果字符串。 如果字符是个操作符,弹出操作符,直至遇见开括号、优先级较低的操作符或者同一优先级的右结合符号。把这个操作符压入栈。 如果字符是个开括号,把它压入堆栈。 如果字符是个闭括号,在遇见开括号前,弹出所有操作符,然后把它们添加到结果字符串。 如果到达输入字符串的末尾,弹出所有操作符并添加到结果字符串。 后缀计算算法 医学课件 7.1.2抽象语法树AGT和 有向不循环图DAG 抽象语法树 表达式的AGT 中间节点:运算符 叶节点:操作数 推广到程序 有向不循环图 共享子树 医学课件 7.1.3三地址中间代码 三元式:i:(?,op1,op2) 四元式:(?,op1,op2,result) 如:a:= b×c+b×d 三元式 四元式 (1) (×, b, c) (1) (×, b, c, t1) (2) (×, b, d) (2) (×, b, d, t2) (3) (+, (1), (2)) (3) (+, t1, t2, t3) (4) (:=, (3), a) (4) (:=, t3, a, -) 医学课件 四元式操作符分类 算术、逻辑、关系运算符 IO操作 类型转换 赋值 (ASSIG,id1,n,id2) 地址加 (AADD,id1,id2,id3) 标号 (LABEL,-,-,label) 转移 过程调用 传送参数 医学课件 7.2语法制导方法 语法制导方法 基于文法结构,在每个产生式的右部增加语义动作,在语法分析过程中,如遇语义动作,就完成对应的语义处理。 医学课件 属性文法 属性直接与文法的符号相联系 若X为一文法符号,a为X的一个属性,用X.a表示与X关联的a的值 对于每个文法规则X0-X1…Xn,Xi的属性Xi.aj与规则的其他符号的属性a1,…,ak有关 Xi.aj =fij(X0.a1, …, Xn.ak) 医学课件 动作文法 文法规则与语义函数相联系 每个产生式的右部附着相应的语义动作 每个动作对应一个函数 动作文法的定义由语法分析的实现方式决定 医学课件 实例 VT = {0, 1, a} VN = {Z, L} S = Z P: { Z ? L L ? 0 L L ? 1 L L ? a } VT = {0, 1, a} VN = {Z,D,L} S = Z P: { Z ? InitLprint L ? DL D ? 1add1 D ? 0add0 L ? a } init() {sum0 = 0; sum1 =0;} add1() {sum1++;} print() {printf(sum0, sum1);} add0() {sum0++;} 医学课件 类型检查和类型转换 各种条件表达式的类型是否是布尔类型? 运算符的运算分量是否相容? 赋值语句的左、右部类型是否相容? 实参与形参的类型是否相容? 下标表达式的类型是否为所允许的类型? 函数说明中的函数类型与返回值的类型是否一致? 医学课件 中间代码生成中的几个问题 语义信息的获取与保存 标识符的语义信息?类型检查、转换 目标代码生成保留相关运算分量和结果的语义信息?地址表示 语义栈及其操作 用途:变量和表达式的处理时存放运算分量和结果的类型和语言信息(层数、偏移、访问方式等,用一个记录FORM表示) top、push(x)、pop(n) 医学课件 常用的语义子程序 申请存储单元 New_dir(t) New_indir(t) 存放中间代码 Generate(?,op1,op2,result) 生成中间代码 GenCode(?) 类型转换? 生成中间代码 清理语义栈 医学课件 7.3简单表达式的中间代码生成 E ? T Es //Es是一个符号 Es ? +T $GenCode(+) Es Es ? ? T ? PTs Ts ? *P $GenCode(×) Ts Ts ? ? P ? id $Push(id) P ? C $Push(C) //C表示常量 P ?(E)

文档评论(0)

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

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

1亿VIP精品文档

相关文档