编译原理第七章中间代码生成.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文档。上传文档
查看更多

中国科大第七章中间代码生成本章内容介绍几种常用的中间表示:后缀表示、图形表示和三地址代码用语法制导定义和翻译方案的方法来说明程序设计语言的结构怎样被翻译成中间形式7.1中间语言抽象语法树后缀式DAG图表示三地址代码(包括三元式、四元式、间接三元式)后缀式后缀式表示又称逆波兰表示法。这种表示法是:把运算量(操作数)写在前面,把算符写在后面(后缀)。一个表达式的后缀形式可以如下定义:如果E是一个变量或常量,则E的后缀式是E自身如果E是E1opE2形式的表达式,这里op是任何二元操作符,则E的后缀式为E1’E2’op。这里E1’和E2’分别是E1和E2的后缀式。如果E是(E1)形式的表达式,则E1的后缀式就是E的后缀式只要知道每个算符的目数,对于后缀式,无论从那一端进行扫描,都能对它正确的进行唯一分解后缀式表达式翻译为后缀式的语义规则描述:其中E.code表示E的后缀式,op表示任何二元操作符,“||”表示后缀形式的连接图表示法图表示法主要包括DAG(DirectedAcyclicGraph)与抽象语法树语法树描述了源程序的自然层次结构。DAG以更紧凑的形式给出了相同的信息。两者不同的是:在一个DAG中代表公共子表达式的结点具有多个父结点在一颗抽象语法树中公共子表达式被表示为重复的子树。抽象语法树构造赋值语句语法树的语法制导定义:如果函数mknode(op,child)和mknode(op,left,right)尽可能返回一个指向已经存在结点的指针以代替建立新的结点,那么就会生成DAG图。抽象语法树的表示形式三地址代码三地址代码是下列形式的语句序列x=yopz其中,x、y和z是名字,常量或编译器生成的临时变量op代表任何操作符(定点运算符、浮点运算符、逻辑运算符等)像x+y*z这样的表达式要翻译为:T1=y*zT2=x+T1其中T1,T2为编译时产生的临时变量。三地址语句的类型三地址语句类似于汇编语言代码。语句可以有符号标号,而且存在各种控制流语句。本书中使用的三地址语句:形如x=yopz的赋值语句,其中op为二元算术算符或逻辑算符形如x=opy的赋值语句,其中op为一元算符。形如x=y的赋值语句,将y的值赋给x形如gotoL的无条件跳转语句,即下一条将被执行的语句是带有标号L的三地址语句三地址语句的类型形如ifxrelopygotoL或ifagotoL的条件跳转语句。第一种形式使用关系运算符号relop(,等)第二种a为布尔变量或常量用于过程调用的语句paramx和callp,n,以及返回语句returny。源程序中的过程调用p(x1,x2,…,xn):paramx1paramx2……paramx2callp,nn表示实参个数。returny中y为过程返回的一个值形如x=y[i]及x[i]=y的索引赋值。形如x=y,x=*y和*x=y的地址和指针赋值。三地址语句的实现三地址语句是中间代码的一种抽象形式。这些语句可以以带有操作符和操作数域的记录来实现。四元式、三元式及间接三元式是三种这样的表示。四元式 一个四元式是带有四个域的记录结构,这四个域分别称为op,arg1,arg2及result。域op包含一个代表运算符的内部码三地址语句x=yopz通过将y放入arg1,z放入arg2,并且将x放入result,=为算符。像x=y或x=-y这样的一元操作符语句不使用arg2像param这样的运算符仅使用arg1域。条件和无条件语句将目标标号存入result域。临时变量也要填入符号表中。三元式为了避免把临时变量填入符号表,可以通过计算临时值语句的位置来引用该临时变量。这样三地址代码的记录只需要三个域op,arg1和arg。对于单目运算符op,arg1和arg2只需用其一。四元式/三元式举例三元式举例间接三元式为了便于代码优化处理,有时不直接使用三元式表,而是另设一张指示器(称为间接码表),它将运算的先后顺序列出有关三元式在三元表中的位置。即,用一张间接码表辅以三元式表来表示中间代码。这种表示方法称为间接三元式。间接三元式举例X=(A+B)*CY=D^(A+B)7.2声明语句为局部名字建立符号表条目为它分配存储单元符号表中包含名字的类型和分配给它的存储单元的相对地址等信息7.2声明语句7.2.1过程中的声明计算被声明名字的类型和相对地址P? {

文档评论(0)

182****1276 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档