- 1、本文档共47页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)