胡元义版编译原理课后习题答案_第1页
胡元义版编译原理课后习题答案_第2页
胡元义版编译原理课后习题答案_第3页
胡元义版编译原理课后习题答案_第4页
胡元义版编译原理课后习题答案_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

胡元义版编译原理课后习题答案 (2)在目标代码生成阶段,符号表用于

。 a.目标代码生成b.语义检查

c.语法检查d.地址分配 (3)错误的局部化是指

。 a.把错误理解成局部的错误

b.对错误在局部范围内进行纠正 c.当发现错误时,跳过错误所在的语法单位继续分析下去 d.当发现错误时立即停止编译,待用户改正错误后再继续编译 【解答】

(1)b(2)d(3)c 8.2在编译过程中为什么要建立符号表? 【解答】

在编译过程中始终要涉及到对一些语法符号的处理,这就需要用到语法符号的相关属性。为了在需要时能找到这些语法成分及其相关属性,就必须使用一些表格来保存这些语法成分及其属性,这些表格就是符号表。 8.3对出现在各个分程序中的标识符,扫描时是如何处理的?

【解答】

对扫描到各分程序中的标识符的处理方法如下: (1)当在一个分程序首部某说明中扫描到一个标识符时,就以此标识符查找相应于本层分程序的符号表。如果符号表中已有此名字的登记项,则表明此标识符已被重复说明(定义),应按语法错误进行处理;否则,在符号表中新登记一项并将此标识符及有关信息(种属、类型、所分配的内存单元地址等)填入。 (2)当在一分程序的语句中扫描到一个标识符时,首先在该层分程序的符号表中查找此标识符;若查不到,则继续在其外层分程序的符号表中查找。如此下去,一旦在某一外层分程序的符号表中找到标识符,则从表中取出有关的信息并作相应的处理;如果查遍所有外层分程序的符号表都无法找到此标识符,则表明程序中使用了一个未经说明(定义)的标识符,此时可按语法错误予以处理。 8.4对下列程序,当编译程序编译到箭头所指位置时,画出其层次表(分程序索引表)和符号表: programstack(output); varm,n:integer; r:real; proceduresetup(ns:integer,check:real); vark,l:integer; functiontotal(varat:integer,nt:integer):integer; vari,sum:integer;

beginfori:=1tontdosum:=sum+at[i];total:=sum;end; beginl:=27+total(a,ns);<-----------------end; beginn:=4;setup(n,5.75)end. 【解答】

编译程序编译到箭头所指位置时,其层次表(分程序索引表)和符号表如图8-1所示。图8-1分程序索引表和符号表示意图

8.5已知文法G[S]:S→while(e)SS→{L}S→a/*a代表赋值句*/L→S;LL→S 构造该文法的LR型的错误校正分析程序。【解答】

首先将文法G[S]拓广为G[S′]:(0)S′→S(1)S→whileedoS(2)S→beginLend(3)S→a(4)L→S(5)L→S;L

则文法G[S′]的LR(0)项目集示范族为 I0:S′→·SI4:S→a·I10:L→S;·LS→·whileedoSI5:S→whilee·dos L→·SS→·beginLendI6:S→beginL·end L→·S;LS→·aI7:L→S· S→·whileedoSI1:S′→S·L→S·

;L S→·beginLendI2:S→while·edosI8:S→whileedo·S S→·a I3:S→begin·LendS→·whileedos I11:S→whileedoS·L→·S S→·beginLend I12:L→S;L·L→·S;L S→·aS→·whileedosI9:S→beginLend·S→·beginLendS→·a 将这些项目集的转换函数GO表示为如图8-2所示的DFA。图8-2习题8.5中文法G[S′]的DFA 在LR(0)项目集规范族中,只有I7含有“移进”/“归约”冲突,且该冲突可用SLR(1)方法解决。为此计算文法G[S′]中每个非终结符的FOLLOW集如下:FOLLOW(S′)={#}FOLLOW(S)={end,;,#}FOLLOW(L)={end} 由此构造出包括错误校正处理子程序的SLR(1)分析表如表8-1所示。表8-1习题8.5的SLR(1)分析表

由表中可以看出,在状态7面对输入符号为“;”时移进,而面对输入符号为“end”时为归约。表中ei(i=1~7)代表不同的错误处理子程序,其含义和功能分别如下: (1)输出符号错处理程序e0:删除当前输入符号,显示出错信息“输入符号错”。 (2)输入不匹配

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论