好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

编译原理教程课后习题答案-第四章.doc

6页
  • 卖家[上传人]:re****.1
  • 文档编号:433189123
  • 上传时间:2023-06-22
  • 文档格式:DOC
  • 文档大小:58.91KB
  • / 6 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第四章 语义分析和中间代码生成 4.1 完成下列选择题: (1) 四元式之间的联系是通过 实现的 a. 指示器 b. 临时变量 c. 符号表 d. 程序变量 (2) 间接三元式表示法的优点为 a. 采用间接码表,便于优化处理 b. 节省存储空间,不便于表的修改 c. 便于优化处理,节省存储空间 d. 节省存储空间,不便于优化处理 (3) 表达式(┐A∨B)∧(C∨D)的逆波兰表示为 a. ┐AB∨∧CD∨ b. A┐B∨CD∨∧c. AB∨┐CD∨∧ d. A┐B∨∧CD∨ (4) 有一语法制导翻译如下所示: S→bAb {print″1″} A→(B {print″2″} A→a {print″3″} B→Aa) {print″4″} 若输入序列为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为文法G[S]生成的二进制数的值,例如对输入串101.101,则S.val=5.625按照语法制导翻译方法的思想,给出计算S.val的相应的语义规则,G(S)如下: G[S]: S→L.L|L L→LB|B B→0|1 【解答】 计算S.val的文法G′[S]及语义动作如下: 产生式 语义动作 G′[S]:S′→S {print(S.val)} S→L1·L2 {S.val:=L1.val + L2.val/2L2.length} S→L { S.val:=L.val } L→L1B {L.val:=L1.val*2 + B.val L.length:=L1.length +1} L→B {L.val:=B.val L.length:=2} B→1 {B.val:=1} B→0 {B.val:=0} 4.4 下面的文法生成变量的类型说明: D→id L L→,id L|:T T→integer|real 试构造一个翻译方案,仅使用综合属性,把每个标识符的类型填入符号表中(对所用到的过程,仅说明功能即可,不必具体写出)。

      解答】 此题只需要对说明语句进行语义分析而不需要产生代码,但要求把每个标识符的类型填入符号表中对D、L、T,为其设置综合属性type,而过程enter(name,type)用来把名字name填入到符号表中,并且给出此名字的类型type翻译方案如下: D→id L{enter (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;} T→integer {T.type=integer;} T→real {T.type=real;} 4.5 写出翻译过程调用语句的语义子程序在所生成的四元式序列中,要求在转子指令之前的参数四元式par按反序出现(与实现参数的顺序相反)此时,在翻译过程调用语句时,是否需要语义变量(队列)queue?【解答】 为使过程调用语句的语义子程序产生的参数四元式par按反序方式出现,过程调用语句的文法为 S→call i(arglist) arglist→E arglist→arglist(1),E 按照该文法,语法制导翻译程序不需要语义变量队列queue,但需要一个语义变量栈STACK,用来实现按反序记录每个实在参数的地址。

      翻译过程调用语句的产生式及语义子程序如下: (1) arglist→E { 建立一个arglist.STACK栈,它仅包含一项E.place} (2) arglist→arglist(1),E { 将E.place压入arglist(1). STACK栈,arglist. STACK=arglist(1).STACK} (3) S→call i (arglist) {while arglist.STACK≠null 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继续传下去因此,应把S→while E do S(1) 改写为如下的三个产生式: W→while A→W E do S→A S(1)每个产生式对应的语义子程序如下: W→while { W.quad=nxq;} A→W E do { Backpatch(E.tc,nxq); A.chain=E.fc; A.quad=W.quad;} S→A 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) E→i {E.tc=null;E.fc=nxq;emit(jez,entry(i),__ ,0);} (2) E→i(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) E→┐E(1) {E.fc=nxq;emit(j,__ ,__ ,0);Backpatch(E(1).fc,nxq);} (5) EA→E(1) ∧ {EA.fc=E(1).fc;} (6) E→EAE(2) {E.tc=E(2).tc;E.fc=merg(EA.fc,E(2).fc);} (7) E0→E(1)∨ {E0.tc=nxq;emit(j,__ ,__ ,0);Backpatch(E(1).fc,nxq);} (8) E→E0E(2) {E.fc=E(2).fc;Backpatch(E0.tc,nxq);}4.8 按照三种基本控制结构文法将下面的语句翻译成四元式序列: while (A

      点击阅读更多内容
      相关文档
      25秋国家开放大学《0-3岁婴幼儿的保育与教育》形考任务1-4参考答案.docx 25秋国家开放大学《0-3岁婴幼儿卫生与保育》形考任务1-3+期末大作业参考答案.docx 25秋国家开放大学《0-3岁婴幼儿教育学》期末大作业参考答案.docx 25秋国家开放大学《Android核心开发技术》形考任务1-7参考答案.docx 国开2025年秋季《形势与政策》大作业答案.docx 国开2025年秋季《形势与政策》专题测验1-5答案.docx 2025年辽宁普通高中学业水平选择性考试语文试卷(原卷+答案).doc 2025年广西普通高中学业水平选择性考试英语试卷(原卷+答案).doc 2025年6月浙江普通高中学业水平选择性考试地理试卷(原卷+答案).doc 2025年江西普通高中学业水平选择性考试英语试卷(原卷+答案).doc 2025年广东普通高中学业水平选择性考试数学试卷(原卷+答案).doc 2025年内蒙古普通高中学业水平选择性考试语文试卷(原卷+答案).doc 2025年贵州普通高中学业水平选择性考试英语试卷(原卷+答案).doc 2025年安徽普通高中学业水平选择性考试生物试卷(原卷+答案).doc 2025年辽宁普通高中学业水平选择性考试数学试卷(原卷+答案).doc 2025年广东普通高中学业水平选择性考试语文试卷(原卷+答案).doc 2025年1月云南省高考适应性测试物理试卷(原卷+答案).doc 2025年江苏普通高中学业水平选择性考试语文试卷(原卷+答案).doc 2025年甘肃普通高中学业水平选择性考试语文试卷(原卷+答案).doc 2025年陕西普通高中学业水平选择性考试生物试卷1(原卷+答案).doc
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.