符号表管理和错误处理

符号表管理和错误处理

ID:39341199

大小:330.31 KB

页数:26页

时间:2019-07-01

符号表管理和错误处理_第1页
符号表管理和错误处理_第2页
符号表管理和错误处理_第3页
符号表管理和错误处理_第4页
符号表管理和错误处理_第5页
资源描述:

《符号表管理和错误处理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、S.PO.P语义分析、生成中间代码生成目标程序代码优化语法分析程序词法分析程序错误处理符号表管理第6章 符号表管理和错误处理明确符号表的作用、内容、组织明确错误处理的两种方法:错误校正和局部化处理教学目标6.1符号表管理6.2错误处理6.3PL/0编译程序的错误处理教学内容编译程序中使用最多的数据结构是表源程序中的各种信息,以便查询或修改在这些表中,尤以符号表最为重要生存期最长使用最为频繁6.1符号表管理6.1.1符号表的作用和内容作用:(1)收集符号的各种信息(2)语义检查的依据(3)目标代码生成阶段地址分

2、配的依据内容:名字栏+信息栏6.1.2符号表的组织操作:(1)向表中填入一个新标识符。(2)对于给定一个标识符:①查找是否在表中;②访问它在表中的相关信息;③在表中填写或更新它的某些信息。(3)更新或删除一个或一组无用的项。6.1.2符号表的组织符号表的总体组织:(1)多张(2)一张(3)前两种的折中符号表项的组织:(1)线性组织(2)排序组织(3)散列组织:效率高,为多数编译程序采用Hash表的基本思想是:为符号表设置一个足够大的空间M为符号构造一个散列函数Hash(Ki),使得0≤Hash(Ki)≤M-1

3、,i=1,2,…,n这样查找Ki时,Hash(Ki)就决定了Ki在符号表中的位置构造Hash函数的方法:将标识符中的每个字符转换为一个非负整数将得到的各个整数组合成一个整数(可以将第一个、中间的和最后一个字符值加在一起,也可以将所有字符的值加起来)将结果数调整到0~M-1范围内,可以利用取模的方法,Ki%M(M为素数)解决地址冲突的方法:由于用户定义标识符的随机性,Hash函数值在0~M-1范围内不一定唯一若两个标识符具有相同的函数值,则可用开放地址法或链地址法解决冲突,有关内容可以参考《数据结构》的教材。词

4、法错误语法错误语义错误违反了语言的环境限制数组维数太大循环嵌套层数太多6.2 错误处理词法错误、语法错误和语义错误词法错误:不合法单词例:mian(){int3sum;…语法错误:源程序在语法上不符合文法例:A[x,y=B+*C超越系统限制:(计算机系统和编译系统)1.数据溢出错误,常数太大,计算结果溢出。2.符号表、静态存储分配数据区溢出。3.动态存储分配数据区溢出。语义规则标识符先说明后引用标识符引用要符合作用域规定过程调用时实参与形参类型一致参与运算的操作数类型一致下标变量的下标不能越界语义错误主要包括

5、:程序不符合语义规则或超越具体计算机系统的限制错误处理方法有两种:错误校正法:根据文法进行错误改正错误局部化法:把错误的影响限制在一个局部的范围,避免错误扩散和影响程序其他部分的分析错误局部化法词法分析:发现不合法字符,显示错误,并跳过该标识符(单词)继续往下分析。语法语义分析:跳过所在的语法成分(短语或语句),一般是跳到语句右界符,然后从新语句继续往下分析。错误局部化处理的实现(递归下降分析法)err:全局变量,存放错误信息。用递归下降分析时,如果发现错误,便将有关错误信息(字符串或者编号)送err,然后转

6、错误处理程序;出错程序先打印或显示出错位置以及出错信息,然后跳出一段源程序,直到跳到语句的右界符或正在分析的语法成分的合法后继符号为止,然后再往下分析。if_statement(){getsym();/*读下个单词符号*/C();/*表达式处理程序*/ifnotsym=“then”{err:=“缺then”;error();/*出错处理程序*/}else{getsym();statement();}ifsym=“else”{getsym();statement();}}ifthen

7、[else];error(){printf(linecnt,err);dogetsym();while(sym!=“;”orsym!=“end”)}发现错误立即跳到语句结尾处(语句右界符;或end),这样处理较粗糙,将跳过太多;上例中,缺then,就将跳过整个条件语句,使得then后的语句都被跳过而不分析,其中有错误就发现不了(3)提高错误局部化程度的方法设S1:合法后继符号集(某语法成分的后继符号)S2:停止符号集(跳读必须停止的符号集)error(S1,S2){printf(line

8、cnt,err);dogetsym();while(symnotinS1ornotinS2)}若有错,则可跳到then若statement有错,则可跳到elseifthen[else];6.3PL/0编译程序的错误处理错误局部化处理遵循以下两条原则。(1)镇定原则(2)关键字原则在进入某个语法单位时,调用test检查当前符号是否属于该语法单位的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。