第8章 符号表与错误处理课件.ppt

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 符号表与错误处理课件

第8章 符号表与错误处理 ;8.1 符 号 表 ;8.1.1 符号表的作用;8.1.1 符号表的作用;8.1.1 符号表的作用;8.1 符 号 表 ; 8.1.2 符号表的组织 ; 8.1.2 符号表的组织 一、直接方式 直接填入源程序中定义的标识符及相关信息,各栏的长度固定。 ;8.1.2 符号表的组织 ;三、按标识符的种属组织符号表 如简单变量名表、数组名表、过程名表等。 例如,下面的函数: int f(int a,int b) { int c; if(ab) c=1; else c=0; return c; }; 图8-3 按标识符种属组织的各种符号表 (a) 简单变量名表;(b) 常数表;(c) 函数入口名表;符号表信息栏的组织方式 固定信息内容:适合名字栏中的标识符按种属分类; 仅记录信息存放地址:适合符号表的名字不分种属;符号表外另设一组存储空间,并在符号表信息栏中放一指针来指向这个存储空间始址;图8-4 记录数组内情向量的符号表;8.1 符 号 表 ; 8.1.3 分程序结构语言的符号表建立 采用分层建立和处理符号表的方式(PASCAL程序) 方法: (1) 在分程序首部扫描到标识符时,查本层符号表,登记一项。 (2) 在分程序的语句中扫描到标识符时,查本层及其外层符号表。 ; 8.1.3 分程序结构语言的符号表建立 一、符号表的组织方式; 8.1.3 分程序结构语言的符号表建立 二、符号表的构建;例8.1 一示意性源程序如下: (1) PROGRAM PP (input,output); (2) COUNT norw=13; (3) VAR ll,kk:integer; (4) word:ARRAY[1..norw] OF char; (5)PROCEDURE getsym; (6) VAR i,j: integer; (7) PROCEDURE getch; (8) BEGIN END; {getch} (9) BEGIN (10) j:=1; kk:=i+j (11) END; {getsym} (12)BEGIN (13) END. {pp} ;回答以下问题: (1) 画出“扫描到getsym过程体之前”的栈符号表; (2) 画出“扫描完getsym过程说明(即扫描完END; {getsym})”时的栈符号表。 [解答] 假定所有的名字在数据区中都只需要一个单元。 ;图8-5 “扫描到getsym过程体之前”的栈符号表 ;图8-6 “扫描完getsym过程说明”的栈符号表 ;8.1 符 号 表 ; 8.1.4 常用符号表结构 1.线性符号表 2.有序符号表 3.散列符号表 ; 8.1.4 常用符号表结构 1.线性符号表 按标识符出现的先后次序建立符号表,查找效率较低.;2.有序符号表 把标识符按照一定的顺序进行排列。采用折半查找法, 不适合动态查找符号表;2.有序符号表 二叉排序树结构;3.散列符号表 适用于边填写边引用的动态查找符号表。 哈希函数(Hash)一般具有如下性质: (1) 函数值只依赖于对应的标识符; (2) 函数的计算简单且高效; (3) 函数值能比较均匀地分布在一定范围内。;8.2 错 误 处 理 ; 8.2.1 语法错误的校正 错误校正:对错误进行适当的修补,以便编译工作能够继续下去; 方法:局部化法:跳过有错误的那个语法成分,把错误限制在一个尽可能小的局部范围内,减少因某一错误而引起的一连串假错。; 1.单词错误的校正 (1)跳过错误单词 (2) “最小海明距离法” :试图将错误单词的字符串修改成一个合法的单词。 关键字:查关键字表,从中选出一个与此单词开头若干字符最接近的关键字来替换。 标识符:则以此标识符查符号表,并用符号表中与之最接近的标识符取代它。;错误情况: (1) 拼错了一个字符; (2) 遗漏了一个字符; (3) 多写了一个字符; (4) 相邻两字符颠倒了顺序。 检测与校正方法: (1) 从符号表中选出一个子集,使此子集包含所有那些可能被拼错的符号; (2) 检查此子集中的各个符号,看是

文档评论(0)

gm8099 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档