电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOC文档下载
分享到微信 分享到微博 分享到QQ空间

编译原理教程课后习题答案——第四章

  • 资源ID:88914778       资源大小:60.50KB        全文页数:6页
  • 资源格式: DOC        下载积分:15金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要15金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

编译原理教程课后习题答案——第四章

第四章 语义分析和中间代码生成 4.1 完成下列选择题:(1) 四元式之间的联系是通过 实现的。 a. 指示器 b. 临时变量 c. 符号表 d. 程序变量(2) 间接三元式表示法的优点为 。 a. 采用间接码表,便于优化处理 b. 节省存储空间,不便于表的修改 c. 便于优化处理,节省存储空间 d. 节省存储空间,不便于优化处理(3) 表达式(AB)(CD)的逆波兰表示为 。 a. ABCD b. ABCDc. ABCD d. ABCD(4) 有一语法制导翻译如下所示: SbAb print1A(B print2Aa print3BAa) print4若输入序列为b(aa)a)a)b,且采用自下而上的分析方法,则输出序列为 。a. 32224441 b. 34242421 c. 12424243 d. 34442212【解答】 (1) b (2) a (3) b (4) b 4.2 何谓“语法制导翻译”?试给出用语法制导翻译生成中间代码的要点,并用一简例予以说明。【解答】 语法制导翻译(SDTS)直观上说就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并且在语法分析的同时执行这些子程序。也即在语法分析过程中,当一个产生式获得匹配(对于自上而下分析)或用于归约(对于自下而上分析)时,此产生式相应的语义子程序进入工作,完成既定的翻译任务。用语法制导翻译(SDTS)生成中间代码的要点如下:(1) 按语法成分的实际处理顺序生成,即按语义要求生成中间代码。(2) 注意地址返填问题。(3) 不要遗漏必要的处理,如无条件跳转等。例如下面的程序段: if (i>0) a=i+e-b*d; else a=0;在生成中间代码时,条件“i>0”为假的转移地址无法确定,而要等到处理“else”时方可确定,这时就存在一个地址返填问题。此外,按语义要求,当处理完(i>0)后的语句(即“i>0”为真时执行的语句)时,则应转出当前的if语句,也即此时应加入一条无条件跳转指令,并且这个转移地址也需要待处理完else之后的语句后方可获得,就是说同样存在着地址返填问题。对于赋值语句a=i+e-b*d,其处理顺序(也即生成中间代码顺序)是先生成i+e的代码,再生成b*d的中间代码,最后才产生“-”运算的中间代码,这种顺序不能颠倒。4.3 令S.val为文法GS生成的二进制数的值,例如对输入串101.101,则S.val=5.625。按照语法制导翻译方法的思想,给出计算S.val的相应的语义规则,G(S)如下:GS: SL.L|L LLB|B B0|1 【解答】 计算S.val的文法GS及语义动作如下: 产生式 语义动作 GS:SS print(S.val) SL1·L2 S.val:=L1.val + L2.val/2L2.length SL S.val:=L.val LL1B L.val:=L1.val*2 + B.val L.length:=L1.length +1 LB L.val:=B.val L.length:=2 B1 B.val:=1 B0 B.val:=04.4 下面的文法生成变量的类型说明:Did LL,id L|:TTinteger|real试构造一个翻译方案,仅使用综合属性,把每个标识符的类型填入符号表中(对所用到的过程,仅说明功能即可,不必具体写出)。【解答】 此题只需要对说明语句进行语义分析而不需要产生代码,但要求把每个标识符的类型填入符号表中。对D、L、T,为其设置综合属性type,而过程enter(name,type)用来把名字name填入到符号表中,并且给出此名字的类型type。翻译方案如下:Did Lenter (id.name, L.type);L,id L(1)enter (id.name, L(1).type);L.type=L(1).type;L:T L.type=T.type;TintegerT.type=integer;TrealT.type=real;4.5 写出翻译过程调用语句的语义子程序。在所生成的四元式序列中,要求在转子指令之前的参数四元式par按反序出现(与实现参数的顺序相反)。此时,在翻译过程调用语句时,是否需要语义变量(队列)queue?【解答】 为使过程调用语句的语义子程序产生的参数四元式par按反序方式出现,过程调用语句的文法为 Scall i(arglist) arglistE arglistarglist(1),E按照该文法,语法制导翻译程序不需要语义变量队列queue,但需要一个语义变量栈STACK,用来实现按反序记录每个实在参数的地址。翻译过程调用语句的产生式及语义子程序如下:(1) arglistE 建立一个arglist.STACK栈,它仅包含一项E.place(2) arglistarglist(1),E 将E.place压入arglist(1). STACK栈,arglist. STACK=arglist(1).STACK(3) Scall i (arglist) while arglist.STACKnull do begin 将arglist.STACK栈顶项弹出并送入p单元之中; emit (par,_ ,_ ,p); end;emit (call,_ ,_ , entry (i);4.6 设某语言的while语句的语法形式为S while E do S(1)其语义解释如图4-1所示。 (1) 写出适合语法制导翻译的产生式; (2) 写出每个产生式对应的语义动作。图4-1 习题4.6的语句结构图【解答】 本题的语义解释图已经给出了翻译后的中间代码结构。在语法制导翻译过程中,当扫描到while时,应记住E的代码地址;当扫描到do时,应对E的“真出口”进行回填,使之转到S(1)代码的入口处;当扫描到S(1)时,除了应将E的入口地址传给S(1).chain之外,还要形成一个转向E入口处的无条件转移的四元式,并且将E.fc继续传下去。因此,应把Swhile E do S(1) 改写为如下的三个产生式:WwhileAW E doSA S(1)每个产生式对应的语义子程序如下:Wwhile W.quad=nxq;AW E do Backpatch(E.tc,nxq);A.chain=E.fc;A.quad=W.quad;SA S(1) Backpatch(S(1).chain,A.quad);emit(j,_,_,A.quad);S.chain=A.chain;4.7 改写布尔表达式的语义子程序,使得i(1) rop i(2)不按通常方式翻译为下面的相继两个四元式: (jrop, i(1), i(2), 0) (j ,_ ,_ , 0 )而是翻译成如下的一个四元式: (jnrop, i(1), i(2), 0)使得当i(1) rop i(2)为假时发生转移,而为真时并不发生转移(即顺序执行下一个四元式),从而产生效率较高的四元式代码。【解答】 按要求改造描述布尔表达式的语义子程序如下:(1) Ei E.tc=null;E.fc=nxq;emit(jez,entry(i),_ ,0); (2) Ei(1) rop i(2) E.tc=null;E.fc=nxq;emit(jnrop,entry(i(1),entry(i(2);) /* nrop表示关系运算符与rop相反*/(3) E(E(1) E.tc=E(1).tc; E.fc=E(1).fc; (4) EE(1) E.fc=nxq;emit(j,_ ,_ ,0);Backpatch(E(1).fc,nxq); (5) EAE(1) EA.fc=E(1).fc; (6) EEAE(2) E.tc=E(2).tc;E.fc=merg(EA.fc,E(2).fc);(7) E0E(1) E0.tc=nxq;emit(j,_ ,_ ,0);Backpatch(E(1).fc,nxq); (8) EE0E(2) E.fc=E(2).fc;Backpatch(E0.tc,nxq);4.8 按照三种基本控制结构文法将下面的语句翻译成四元式序列:while (A<CB<D) if (A1) C=C+1; else while (AD) A=A+2; 【解答】 该语句的四元式序列如下(其中E1、E2和E3分别对应ACBD、A1和AD,并且关系运算符优先级高):100 (j<,A,C,102)101 (j,_,_,113) /*E1为F*/102 (j<,B,D,104) /*E1为T*/103 (j,_,_,113) /*E1为F*/104 (j=,A,1,106) /*E2为T*/105 (j,_,_,108) /*E2为F*/106 (+, C, 1, C) /*C:=C+1*/107 (j,_,_,112) /*跳过else后的语句*/108 (j,A,D,110) /*E3为T*/109 (j,_,_,112) /*E3为F*/110 (+, A, 2, A

注意事项

本文(编译原理教程课后习题答案——第四章)为本站会员(jiups****uk12)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.