符号表管理和错误处理.pptVIP

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
符号表管理和错误处理

* * * * 编 译 原 理 * S.P O.P 语义分析、生成中间代码 生成目标程序 代码优化 语法分析程序 词法分析程序 错 误 处 理 符 号 表 管 理 第6章 符号表管理和错误处理 明确符号表的作用、内容、组织 明确错误处理的两种方法:错误校正和局部化处理 教学目标 6.1 符号表管理 6.2 错误处理 6.3 PL/0编译程序的错误处理 教学内容 编译程序中使用最多的数据结构是表 源程序中的各种信息,以便查询或修改 在这些表中,尤以符号表最为重要 生存期最长 使用最为频繁 6.1 符号表管理 6.1.1 符号表的作用和内容 作用: (1)收集符号的各种信息 (2)语义检查的依据 (3)目标代码生成阶段地址分配的依据 内容:名字栏+信息栏 6.1.2 符号表的组织 操作: (1)向表中填入一个新标识符。 (2)对于给定一个标识符: ① 查找是否在表中; ② 访问它在表中的相关信息; ③ 在表中填写或更新它的某些信息。 (3)更新或删除一个或一组无用的项。 6.1.2 符号表的组织 符号表的总体组织: (1)多张 (2) 一张 (3)前两种的折中 符号表项的组织: (1)线性组织 (2)排序组织 (3)散列组织:效率高,为多数编译程序采用 Hash表的基本思想是: 为符号表设置一个足够大的空间M 为符号构造一个散列函数Hash(Ki),使得0≤ Hash(Ki) ≤M-1,i=1,2,…,n 这样查找Ki时,Hash(Ki)就决定了Ki在符号表中的位置 构造Hash函数的方法: 将标识符中的每个字符转换为一个非负整数 将得到的各个整数组合成一个整数(可以将第一个、中间的和最后一个字符值加在一起,也可以将所有字符的值加起来) 将结果数调整到0~M-1范围内,可以利用取模的方法,Ki%M(M为素数) 解决地址冲突的方法: 由于用户定义标识符的随机性,Hash函数值在0~M-1范围内不一定唯一 若两个标识符具有相同的函数值,则可用开放地址法或链地址法解决冲突,有关内容可以参考《数据结构》的教材。 词法错误 语法错误 语义错误 违反了语言的环境限制 数组维数太大 循环嵌套层数太多 6.2 错误处理 词法错误、语法错误和语义错误 词法错误:不合法单词 例:mian( ){ int 3sum; … 语法错误:源程序在语法上不符合文法 例:A[x , y =B+*C 超越系统限制:(计算机系统和编译系统) 1. 数据溢出错误,常数太大,计算结果溢出。 2. 符号表、静态存储分配数据区溢出。 3. 动态存储分配数据区溢出。 语义规则 标识符先说明后引用 标识符引用要符合作用域规定 过程调用时实参与形参类型一致 参与运算的操作数类型一致 下标变量的下标不能越界 语义错误主要包括:程序不符合语义规则或 超越具体计算机系统的限制 错误处理方法有两种: 错误校正法: 根据文法进行错误改正 错误局部化法: 把错误的影响限制在一个局部的范围,避免错误扩散和影响程序其他部分的分析 错误局部化法 词法分析:发现不合法字符,显示错误,并跳 过该标识符(单词)继续往下分析。 语法语义分析:跳过所在的语法成分(短语或语 句),一般是跳到语句右界符, 然后从新语句继续往下分析。 错误局部化处理的实现(递归下降分析法) err: 全局变量,存放错误信息。 用递归下降分析时,如果发现错误,便将有关错误信息(字符串或者编号)送err,然后转错误处理程序; 出错程序先打印或显示出错位置以及出错信息,然后跳出一段源程序,直到跳到语句的右界符或正在分析的语法成分的合法后继符号为止,然后再往下分析。 if_ statement( ) { getsym( ); /*读下个单词符号*/ C( ) ; /*表达式处理程序*/ if not sym=“then” {err :=“缺then” ; error( ); /*出错处理程序*/ } else {getsym( ); statement( ); } if sym=“else” {ge

文档评论(0)

hello118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档