编译原理及实现技术(张睿)精品课件8.pptVIP

编译原理及实现技术(张睿)精品课件8.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文档。上传文档
查看更多
函数声明中间代码生成实例 procedure Q( x: real ); var u : real ; function f(k:real):real; begin f := k +k end; begin u := f(50); y:= u * x end; (EntryQ,LabelQ,SizeQ,LQ) (Entryf,Labelf,Sizef,Lf) (ADDF, k, k, t0) (ASSIG, t0,f) (ENDFUNC,……) (VALACT, 50,?1,1) (CALL, Labelf,true,t1) (ASSIG, t1, u) (MULTF, u,x, t2) (ASSIG, t2, y) (ENDPROC, ……) 函数声明的中间代码的 语法制导生成方法 ProcFunDec → ProcDec | FunDec ProcDec → Procedure id (ParamList) Declaration$Entry ProgramBody$EndProc FunDec → Function id (ParamList): Type Declaration$Entry ProgramBody$EndFunc $Entry 给子程序Q分配新标号LevelQ,并将它填到Q的符号表项中 产生入口中间代码(ENTRY, LabelQ, SizeQ, LevelQ) $EndProc 和 $EndFunc 在遇到end时产生出口中间代码 (ENDPROC, _, _, _) 或 (ENDFUNC, _, _, _) 第七章 中间代码生成 中间语言 语法制导方法 简单表达式的中间代码生成 原子语句的中间代码生成 结构语句的中间代码生成 声明的中间代码 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 ?

文档评论(0)

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

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档