符号表与错误处理.pptxVIP

  1. 1、本文档共10页,可阅读全部内容。
  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文档。上传文档
查看更多

第8章符号表与错误处理8.1符号表8.2错误处理

8.1符号表 8.1.1符号表的作用 8.1.2符号表的组织 8.1.3分程序结构语言的符号表建立 8.1.4常用符号表结构

词法分析阶段:建立符号表,查找符号表;1语法分析阶段:获取单词属性信息;2语义分析时:符号表中的信息可以用于语义检查;3代码优化时:用符号表提供的信息选出恰当的代码进行优化;4目标代码生成时:编译程序将依据符号表中的符号名来分配目标地址。5作用:8.1.1符号表的作用

名字(标识符):相关信息:名字的种属(常数、变量、数组、标号等)名字的类型特征给此名字分配的存储单元地址、与此名语义有关的其它信息等12内容:8.1.1符号表的作用

基本操作:从表中删去一个或一组无用的项。0504对给定的名字填入或更新它在表中的某些信息;判断一个给定的名字是否在表中;01对给定的名字访问它在表中的有关信息;0302在表中填入新的名字;8.1.1符号表的作用

符号表的作用符号表的组织分程序结构语言的符号表建立常用符号表结构8.1符号表

01直接方式03按标识符的种属组织符号表02间接方式符号表的组织

符号表的组织一、直接方式直接填入源程序中定义的标识符及相关信息,各栏的长度固定。

BA单独设置一个字符串数组来存放所有的标识符在符号表的名字栏中设置指针和整数值间接方式:符号表的组织

按标识符的种属组织符号表01如简单变量名表、数组名表、过程名表等。02例如,下面的函数:03intf(inta,intb)04{05intc;06if(ab)c=1;07elsec=0;08returnc;09}10符号表的组织

图8-3按标识符种属组织的各种符号表简单变量名表;(b)常数表;(c)函数入口名表

21固定信息内容:适合名字栏中的标识符按种属分类;仅记录信息存放地址:适合符号表的名字不分种属;符号表外另设一组存储空间,并在符号表信息栏中放一指针来指向这个存储空间始址符号表信息栏的组织方式

图8-4记录数组内情向量的符号表

常用符号表结构分程序结构语言的符号表建立符号表的组织符号表的作用CBAD8.1符号表

8.1.3分程序结构语言的符号表建立采用分层建立和处理符号表的方式(PASCAL程序)方法:在分程序首部扫描到标识符时,查本层符号表,登记一项。在分程序的语句中扫描到标识符时,查本层及其外层符号表。

分程序结构语言的符号表建立1符号表的组织方式2分层组织符号表的登记项,使各分程序的符号表登记项连续地排列在一起。3建立“分程序表”,记录各层分程序符号表的有关信息。登记项由三个字段组成:4OUTERN:指明该分程序的直接外层分程序的编号;5COUNT:记录该分程序符号表登记项的个数;POINTER:指向该分程序符号表的起始位置。6

8.1.3分程序结构语言的符号表建立二、符号表的构建设置一个临时工作栈。每进入分程序,就在分程序表中登记一项,并使之成为当前的分程序。当扫描到定义性出现的标识符时,将名字及其有关信息填入临时工作栈的顶部,把当前分程序相应登记项的COUNT值加1。当分程序结束时,将临时工作栈中的本层分程序全部登记项移至正式的符号表中,退出本层分程序。重复步骤(2)--(4),直至扫描完整个源程序为止。

例8.1一示意性源程序如下:例8.1一示意性源程序如下:(1) PROGRAMPP(input,output);(2)COUNTnorw=13;(3)VARll,kk:integer;(4)word:ARRAY[1..norw]OFchar;(5)PROCEDUREgetsym;(6)VARi,j:integer;(7)PROCEDUREgetch;(8)BEGIN END;{getch}(9)BEGIN(10) j:=1; kk:=i+j(11) END;{getsym}(12)BEGIN(13)END.{pp}

画出“扫描到getsym过程体之前”的栈符号表;画出“扫描完getsym过程说明(即扫描完END;{getsym})”时的栈符号表。[解答]假定所有的名字在数据区中都只需要一个单元。0102回答以下问题:

图8-5“扫描到getsym过程体之前”的栈符号表

图8-6“扫描完getsym过程说明”的栈符号表

01符号表的作用02符号表的组织03分程序结构语言的符号表建立04常用符号表结构8.1符号表

常用符号表结构1.线性符号表2.有序符号表3.散列符号表

8.1.4常用符号表结构

文档评论(0)

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

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

1亿VIP精品文档

相关文档