网站大量收购闲置独家精品文档,联系QQ:2885784924

编译原理教程04语义分析和中间代码生成.ppt

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

布尔表达式的翻译过程 : 1.画表达式的翻译图; 2.写出每个布尔变量或关系表达式的2个四元式 (四元式未完成,未填转移目标result); 3.待整个表达式的四元式写完,回填转移目标。 控制语句的翻译过程 : 1.画语句的代码结构图; 2.根据代码结构图,写四元式; (四元式未完成,未填转移目标result) 3.翻译过程(即扫描语句过程)中,伺机回填转移目标。   (4) 有一语法制导翻译如下所示:    S→bAb {print1}    A→(B {print2}    A→a {print3}    B→Aa) {print4}   若输入序列为b(((aa)a)a)b,且采用自下而上的分析方法,则输出序列为 。   a. b. c. d.  4.2 何谓“语法制导翻译”?试给出用语法制导翻译生成中间代码的要点,并用一简例予以说明。   4.3 令S.val为文法G[S]生成的二进制数的值,例如对输入串101.101,则S.val=5.625。按照语法制导翻译方法的思想,给出计算S.val的相应的语义规则,G[S]如下: ?? G[S]: S→L.L∣L L→LB∣B B→0∣1   4.4 下面的文法生成变量的类型说明: D→id L L→,id L∣:T T→integer∣real 试构造一个翻译方案,仅使用综合属性,把每个标识符的类型填入符号表中(对所用到的过程,仅说明功能即可,不必具体写出)。   4.5 写出翻译过程调用语句的语义子程序。在所生成的四元式序列中,要求在转子指令之前的参数四元式par按反序出现(与实现参数的顺序相反)。此时,在翻译过程调用语句时,是否需要语义变量(队列)queue?   4.6 设某语言的while语句的语法形式为 S→ while E do S(1) 其语义解释如图4–18所示。   (1) 写出适合语法制导翻译的产生式;   (2) 写出每个产生式对应的语义动作。  图4–18 习题4.6的语句结构图   4.7 改写4.4.2节中布尔表达式的语义子程序,使得i(1)rop i(2)不按通常方式翻译为下面的相继两个四元式: (jrop, i(1), i(2), 0) (j , _ , _ , 0 ) 而是翻译成如下的一个四元式: (jnrop, i(1), i(2), 0) 使得当i(1)rop i(2)为假时发生转移,而为真时并不发生转移(即顺序执行下一个四元式),从而产生效率较高的四元式代码。   4.8 按照4.5.3节的三种基本控制结构的文法将下面的语句翻译成四元式序列: while (AC∧BD) { if (A≥1) C=C+1; else while (A≤D) A=A+2; }   4.9 按照4.5.3节的三种基本控制结构的文法将下面的语句翻译成四元式序列: while (a∨b) if(xy) while(c∧d) k=k+1; else if(mn∧kq) m=k; else while(m≠k) m=m+1;   4.10 已知源程序如下: prod=0; i=1; while (i≤20) { prod=prod+a[i]*b[i]; i=i+1; } 试按语法制导翻译法将上述源程序翻译成四元式序列(设A是数组a的起始地址,B是数组b的起始地址;机器按字节编址,每个数组元素占四个字节)。   4.11 给出文法G[S]: S→SaA∣A ? A→AbB∣B ? B→cSd∣e   (1) 请证实AacAbcBaAdbed是文法G[S]的一个句型;   (2) 请写出该句型的所有短语、素短语以及句柄;   (3) 为文法G[S]的每个产生式写出相应的翻译子程序,使句型AacAbcBaAdbed经该翻译方案后,输出为131042521430。   注意:由(7)计算出的是数组元素A[I,J]的地址,即为I×列数长度(即d2=20)+J,而此处数组A的行、列下界值为1,即实际上多计算了一行一列,故应减去,则实际A[I,J]对应的地址是: A+(20?1)*I+J?1=A+20I+J?21   最后得到的赋值句X=A[I,J]的四元

文档评论(0)

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

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

1亿VIP精品文档

相关文档