- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.1 完成下列选择题:(1) 符号表的组织方式中不包括 方式。 A.按标识符种属 B.按标识符名字 C.直接 D.间接(2) 分程序结构的高级语言中,编译程序使用 来区别标识符的作用域。 A.说明标识符的过程或函数名 B.说明标识符的过程或函数的静态层次 C.说明标识符的过程或函数的动态层次 D.标识符的行号 (3) 在常用的符号表构造和处理方法中, 符号表常把符号表组织成二叉树形式。 A.线性 B.无序 C.散列 D.有序(4) 在目标代码生成阶段,符号表用于 。 A.目标代码生成 B.语义检查 C.语法检查 D.地址分配(5) 错误的局部化是指 。 A.把错误理解成局部的错误 B.对错误在局部范围内进行纠正 C.当发现错误时,跳过错误所在的语法单位继续分析下去 D.当发现错误时立即停止编译,待用户改正错误后再继续编译 【解答】 (1) 符号表的组织方式中不包括按标识符名字方式。故选B。 (2) 选B。 (3) 在常用的符号表构造和处理方法中,有序符号表常把符号表组织成二叉树形式。故选D。 (4) 在目标代码生成时,编译程序将依据符号表中的符号名来分配目标地址。故选D。 (5) 错误的局部化法是跳过有错误的那个语法成分,以便把错误限制在一个尽可能小的局部范围内。因此选C。 8.2 在编译过程中为什么要建立符号表? 【解答】 在编译过程中始终要涉及到对一些语法符号的处理,这就需要用到语法符号的相关属性。为了在需要时能找到这些语法成分及其相关属性,就必须使用一些表格来保存这些语法成分及其属性,这些表格就是符号表。 8.3 对出现在各个分程序中的标识符,扫描时是如何处理的? 【解答】 对扫描到各分程序中的标识符的处理方法如下: (1) 当在一个分程序首部某说明中扫描到一个标识符时,就以此标识符查找相应于本层分程序的符号表。如果符号表中已有此名字的登记项,则表明此标识符已被重复说明(定义),应按语法错误进行处理;否则,在符号表中新登记一项并将此标识符及有关信息(种属、类型、所分配的内存单元地址等)填入。 (2) 当在一分程序的语句中扫描到一个标识符时,首先在该层分程序的符号表中查找此标识符;若查不到,则继续在其外层分程序的符号表中查找。如此下去,一旦在某一外层分程序的符号表中找到标识符,则从表中取出有关的信息并作相应的处理;如果查遍所有外层分程序的符号表都无法找到此标识符,则表明程序中使用了一个未经说明(定义)的标识符,此时可按语法错误予以处理。 图8-1 分程序索引表和符号表示意图 图8-2 习题8.5中文法G[S′]的DFA 由表中可以看出,在状态7面对输入符号为“;”时移进,而面对输入符号为“end”时为归约。表中ei(i=1~7)代表不同的错误处理子程序,其含义和功能分别如下: (1) 输出符号错处理程序e0:删除当前输入符号,显示出错信息“输入符号错”。 (2) 输入不匹配错误处理程序e1:去除栈顶状态和栈顶符号,显示出错信息“输入不匹配”。 (3) 缺语句错误处理程序e2:将假想符号a与状态4压栈,显示出错信息“缺少语句”。 (4) ?while语句缺少布尔量处理程序e3:将假想符号e与状态5压栈,显示出错信息“缺布尔量”。 (5) 缺少分号错误处理程序e4:将分号“;”插入未扫描的输入串首,显示出错信息“缺少分号”。 (6) ?while语句缺少do处理程序e5:将符号“do”与状态8压栈,显示出错信息“缺少do”。 (7) ?begin与end不配对,缺少end处理程序e6:将符号“end”与状态9压栈,显示出错信息“缺少end”。 (8) 缺少语句错误处理e7:将假想符号a插入未扫描的输入串首,显示出错信息“缺少语句”。 * 第八章 符号表与错误处理 第八章 符号表与错误处理 表8-1 习题8.5的SLR(1)分析表 * 第八章 符号表与错误处理
文档评论(0)