符号表管理及错误诊断8.ppt
- 文档编号:2122586
- 上传时间:2022-10-27
- 格式:PPT
- 页数:16
- 大小:158KB
符号表管理及错误诊断8.ppt
《符号表管理及错误诊断8.ppt》由会员分享,可在线阅读,更多相关《符号表管理及错误诊断8.ppt(16页珍藏版)》请在冰豆网上搜索。
第八章第八章符号表管理及错误诊断符号表管理及错误诊断本章主要内容:
本章主要内容:
n符号表的作用符号表的作用n符号表的主要属性符号表的主要属性n符号表的组织及管理符号表的管理符号表的组织及管理符号表的管理n词法、语法、语义错误处理词法、语法、语义错误处理10/27/20221第五章:
语法制导翻译和中间代码8.18.1符号表的作用符号表的作用n符号表符号表有多种(如保留字表、运算符表、常数表等),在这里主要关注标识符表,标识符表用来记录标识符的特征属性n粗略地说,编译的分析阶段收集和更新符号表中信息,综合阶段从符号表中获取信息n符号表的作用:
符号表的作用:
n收集标识符的属性信息如类型信息n语义检查的依据如类型检查n代码生成时地址分配的依据n相对位置OFFSETn存储区域标志(如C语言中的extern、static、auto)n目标代码生成之后,符号表就无用了10/27/20222第五章:
语法制导翻译和中间代码8.28.2符号表的主要属性符号表的主要属性n标识符名标识符名n是一个变量、函数或过程的唯一标识,在符号表中符号名作为表项的唯一区别,一般不允许重名n标识符的类型标识符的类型n过程无类型n函数、变量有数据类型n标识符的存储类别标识符的存储类别nFortran语言nCOMMON公共存储区nSAVE函数或过程内部静态存储区nC语言nStatic文件或函数内部的静态存储nRegist寄存器存储10/27/20223第五章:
语法制导翻译和中间代码8.28.2符号表的主要属性符号表的主要属性n标识符的存储类别往往决定变量的作用域n变量的作用域:
一个变量在程序中起作用的范围n如:
(1)inta
(2)intfunc(a,b)(3)floata;(4)intb(5)(6)a(7)(8)在(6)这一点上,不是inta的作用域,而是floata的作用域,引用的是floata,而不是inta10/27/20224第五章:
语法制导翻译和中间代码8.28.2符号表的主要属性符号表的主要属性n标识符的存储分配信息标识符的存储分配信息n如OFFSETn数组的内情向量数组的内情向量n维数及每维的长度n记录型变量的成员信息记录型变量的成员信息n成员所占总空间及成员排列顺序n函数或过程的形参函数或过程的形参n形参个数、排列次序、形参类型10/27/20225第五章:
语法制导翻译和中间代码8.38.3符号表的组织符号表的组织n总体组织总体组织n符号不同,属性信息不同n有的差别大,如保留字和变量标识符n有的差别较大,如变量符号和函数符号n有的差别较小,如不同的变量标识符(简单变量和数组、记录)n编译程序对符号表的总体组织方式有三种:
n1、属性相同的符号组织在一起空间效率高,但表多,难管理n2、所有符号组织在一张表中只有一张表,管理集中统一,但管理复杂,空间开销大n3、根据属性相似程度分类组织成若干张表,每张表中记录的符号都有比较多的相同属性10/27/20226第五章:
语法制导翻译和中间代码8.38.3符号表的组织符号表的组织n单张符号表的组织单张符号表的组织n线性方式n用一个线性表来存储符号信息,线性表中的每一个元素是一个记录,包含一个符号的属性信息n具体实现可以是数组、链表等n线性表又可分为有序和无序,各有优缺点n散列方式n用一个散列表来存储符号信息,散列表中的每一个元素是一个记录,包含一个符号的属性信息n散列函数h(s):
s是符号,返回一个0m-1的整数,n是符号各数,m是散列表的大小,一般n=mn例子:
见P314图6.2810/27/20227第五章:
语法制导翻译和中间代码8.48.4符号表的管理符号表的管理n符号表的初始化符号表的初始化n初始化方法与符号表的组织方式有关n线性方式:
表尾和表头的位置相同n散列方式:
清除表中的所有表项值n符号的查找符号的查找n无序线性表:
折半查找n有序线性表:
顺序查找n散列表:
散列查找n符号的登录符号的登录n先查找,再登录n无序线性表:
在线性表尾部增加一个表项n有序线性表:
将增加的表项插入到线性表的相应位置n散列表:
根据散列函数寻找插入位置10/27/20228第五章:
语法制导翻译和中间代码8.48.4符号表的管理符号表的管理n嵌套过程或分程序结构中符号表的管理嵌套过程或分程序结构中符号表的管理n对于具有嵌套过程或分程序结构的语言,不同层次程序中定义的标识符有不同的作用域和可视性规则n一般有两种组织符号表的方式,一是为每个过程或分程序建立独立的符号表;一是把各分程序符号组织在一张符号表中n1、分表结构n编译程序在扫描到嵌套过程或分程序的开始时,建立一张对应的符号表n2、单表结构n在符号表中设立一个属性域用来登录符号所在分程序的层次n用下推链来组织同名标识符:
下推链组织要求在进入一个内层分程序并发生重名标识符定义时,将当前符号表中外层的该符号表项下推到下推链中而在符号表被下推的表项处建立内层的同名标识符表项,推出分程序时,恢复下推链10/27/20229第五章:
语法制导翻译和中间代码8.48.4符号表的管理符号表的管理n下推链中存放的是嵌套分程序中同名标识符的外层定义属性,这种结构不但符合作用域规则,也实现了可视性规则n例子:
inta;floatb,d;intc;floata;intd;floatc;floatd;a=b+c+d;10/27/202210第五章:
语法制导翻译和中间代码8.58.5错误诊断概述错误诊断概述n错误的种类:
错误的种类:
n词法错误:
源程序中的拼写错误,主要在词法分析阶段发现(单词符号不符合词法规则)n关键字拼写错n分界符错n标识符错n语法错误:
语法分析阶段发现的源程序错误(语法结构不符合语法规则)nBEGIN与END不匹配n(和)不匹配nIF与ELSE之间缺少THEN等n变量未说明或重定义n语义错误:
n静态语义错误:
编译时刻发现的语义错误如类型不一致或不相容n动态语义错误:
运行时刻发现的语义错误(逻辑或算法上的错误)10/27/202211第五章:
语法制导翻译和中间代码8.58.5错误诊断概述错误诊断概述n编译器中的查错和改错编译器中的查错和改错n查错:
编译程序能在编译时刻准确及时地发现源程序中的错误,并能以简明的方式向用户(程序书写者)报告错误的性质和出现的确切位置n不能一发现问题就停下来,而应在一次编译中发现尽可能多的错误n株连信息的遏止:
株连信息是因为某个错误而导致编译程序向用户(程序书写者)发出的虚假错误信息,如:
将P(a,b)写成了P(a.b),则有可能报错,1、是不合法符号(假设删除.);2、标识符未定义(ab);3、参数个数少n重复信息的遏止:
重复信息是指同一个错误在源程序的多处发生,如:
一个未定义的标识符号,在每次引用时都报错,其实只需报错一次即可n改错(校正):
是指编译程序在其翻译过程中发现源程序的错误时能适当地对源程序作修正10/27/202212第五章:
语法制导翻译和中间代码8.68.6词法错误处理词法错误处理n词法错误词法错误主要是拼写错误,如拼错一个字符、遗漏一个字符、多拼一个字符等n单词符号用正规式表示,用有限自动机识别,在识别单词时,通常采用最长子串匹配策略,如果当前的余留输入字符序列的任何前缀不能与所有的词型相匹配,则表明存在错误n词法错误的校正:
n一般不能在词法分析阶段校正,可在以后的分析阶段进行校正n如:
IFbTHEM知道在b后应接关键字,因此到关键字表中去寻找一个最接近THEM的关键字(THEN)代替THEMn又如:
x:
=sim(a)在符号表中找不到sim,于是用sin代替sim10/27/202213第五章:
语法制导翻译和中间代码8.78.7语法错误处理语法错误处理n程序设计语言的语法用上下文无关文法描述,源程序可由基于某种分析技术的识别程序来精确地识别,源程序中的语法错误总可以自动地查出n不同的分析技术发现错误的手段和方式是不同的nLL
(1)、LR分析技术都是当栈顶状态与当前输入符号配对所对应的分析表元素为空白时发现错误n算符优先分析,是当前栈顶符号和当前输入符号之间不存在优先关系时发现错误10/27/202214第五章:
语法制导翻译和中间代码8.78.7语法错误处理语法错误处理n语法错误的校正:
语法错误的校正:
n在语法分析部分已经介绍了预测分析法和算符优先分析法的出错处理(P134P156)n发现错误,根据错误类别,调用错误处理子程序nLR分析的出错处理:
n例:
i:
=i+);扫描到+时进入状态Sk,ACTION(Sk,)为出错(空白),这时调用错误处理子程序,删除当前字符,给出出错信息,“不合法的输入符号:
)”,继续扫描,ACTION(Sk,;),出错,调用另一错务处理子程序,将一假想的标识符号i及相应状态Sl推入栈中,并给出出错信息,“缺少运算分量”,语句最终被校正为i:
=i+i;10/27/202215第五章:
语法制导翻译和中间代码8.88.8语义错误处理语义错误处理n主要考虑在编译时发现的静态语义错误n错误实例:
n数组变量进行加法运算n实型变量进行MOD运算n实型变量与字符型变量进行加法运算n由循环外控制转移到循环内n转向语句把控制转移到一个构造语句(如条件语句)n语义错误检查:
n语义分析采用的是语法制导翻译n通过语法制导定义和翻译方案可以实现类型一致性检查和某些控制流静态语义检查(见语义分析部分的相关内容)n除了类型不一致或不相容,其他语义错误的校正是非常困难的10/27/202216第五章:
语法制导翻译和中间代码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 符号 管理 错误 诊断