电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

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

6页
  • 卖家[上传人]:jiups****uk12
  • 文档编号:88914778
  • 上传时间:2019-05-13
  • 文档格式:DOC
  • 文档大小:60.50KB
  • / 6 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、第四章 语义分析和中间代码生成 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)直观上说就是为每个产生式配上一个翻译子程序(称语义动作或语义子程序),并且在语法分析的同

      2、时执行这些子程序。也即在语法分析过程中,当一个产生式获得匹配(对于自上而下分析)或用于归约(对于自下而上分析)时,此产生式相应的语义子程序进入工作,完成既定的翻译任务。用语法制导翻译(SDTS)生成中间代码的要点如下:(1) 按语法成分的实际处理顺序生成,即按语义要求生成中间代码。(2) 注意地址返填问题。(3) 不要遗漏必要的处理,如无条件跳转等。例如下面的程序段: if (i0) a=i+e-b*d; else a=0;在生成中间代码时,条件“i0”为假的转移地址无法确定,而要等到处理“else”时方可确定,这时就存在一个地址返填问题。此外,按语义要求,当处理完(i0)后的语句(即“i0”为真时执行的语句)时,则应转出当前的if语句,也即此时应加入一条无条件跳转指令,并且这个转移地址也需要待处理完else之后的语句后方可获得,就是说同样存在着地址返填问题。对于赋值语句a=i+e-b*d,其处理顺序(也即生成中间代码顺序)是先生成i+e的代码,再生成b*d的中间代码,最后才产生“-”运算的中间代码,这种顺序不能颠倒。4.3 令S.val为文法GS生成的二进制数的值,例如对输入串101

      3、.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) SL1L2 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填入到符号表中

      4、,并且给出此名字的类型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) arglista

      5、rglist(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 d

      6、o 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

      7、=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 (ACBD) 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分享,可在线阅读,更多相关《编译原理教程课后习题答案——第四章》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.