- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 符号表和错误处理
第8章 符号表与错误处理 ;(1)什么是符号表?
在编译过程中编译程序用于记录源程序中各种
名字的特性信息,所以也称为名字特性表。
名字:
程序名、过程名、函数名、用户定义类型、
变量名、符号名字
特性信息:
名字种类、类型、维数、参数个数及目标地址
(存储单元地址)等;(2) 建表和查表的必要性 (符号表在编译过程中的作用)
源程序中变量要先声明,然后才能引用。
用户通过声明语句,声明各种名字以及给出它们的类型、维数等信息。编译程序在出来这些声明语句时,将声明中的名字以及信息登录到符号表中,同时编译还要给变量分配存储单元。而存储单元地址也必须登录在符号表中。
当编译程序编译到引用所声明的变量时(赋值或引用其值)要进行语法、语义正确性检查(类型是否符合要求)和生成相应的目标程序,这就需要查符号表来取得相关信息。;美扬召炭携摆序渭馁剩拴已挂蝴梆何皑斟钡岁予礼娩披逝衬姜掀驴惹借见第8章 符号表和错误处理第8章 符号表和错误处理;(3) 有关符号表的操作:
判断一个给定的名字是否在表中;
在表中填入新的名字;
对给定的名字访问它在表中的有关信息;
对给定的名字填入或更新它在表中的某些信息;
从表中删去一个或一组无用的项。
; 1 符号表项的组织与内容;信息栏的组织:多个子域分别表示标识符的有关信息。
不同种类的符号有不同信息域。一般的名字可能
共有的信息域:
名字的种类:
可变量、函数、过程、数组、标号、参数等
类型: 如整型、浮点型、字符型、指针等
性质: 变量、形参等
地址: 变量所分配单元的首址或地址位移
大小: 所占的字节数;非共有信息域:
对于数组: 维数、上下界值、计算下标量地址所用的信息以 及数组元素类型等。
对于记录结构联合:
域的个数,每个域名、地 址位移、类型等。
对于过程或函数: 形参个数,所在层次、函数返回值类型、 局部变量所占空间大小等。
对于指针: 所指对象类型等。;(2)符号表的总体组织方式:
构造多少张符号表,哪些符号放在同一张表中。
1.统一符号表:不论什么名字都填入统一格式的符号表中
符号表表项应按信息量最大的名字设计,填表查表比较方 便,结构简单,但是浪费大量空间。
2.对于不同种类的名字分别建立各种符号表
节省空间,但是填表和查表不方便。
3.折中办法:大部分共同信息组成统一格式的符号表.特殊信息另设附表,两者用指针连接。;符号表的物理组织结构
线性符号表:按符号表项的扫描顺序建表,查表要逐项查找。查表操作的平均长度为N+1/2。
有序符号表:符号表按变量名进行字典式排序。
折半查表的平均长度为 LOG2N-1,插入效率低。
二叉排序树:查表的平均长度1+4lgN
散列符号表表: 符号表地址=HASH(标识符)
需解决冲突。;2 非过程嵌套程序语言的符号表组织;(2) 名字的作用域及基本处理办法
1.作用域:全局:子程序名、函数名和公共区名。
局部 :程序单元中定义的变量。
2.符号表的组织 :
3.基本处理办法
1 子程序、函数名和公共区变量填入全局名表;2 在声明部分读到标识符,造局部名表
3 在语句部分读到标识符,查表;4 程序单元(如:子程序)结束: 释放该程序单元的局部名表。5 程序编译完成: 释放全部符号表。;3 过程嵌套结构语言的符号表组织;船纵谆媳奏引猜矽七诗熟诊究车蔑待牵亏胶巳殖挤决监秃瓣俞司樊睫缸税第8章 符号表和错误处理第8章 符号表和错误处理;(3)过程嵌套结构程序语言的符号表的组织管理
基本思想是,所有过程中定义的标识符都集中在单张符号表中。为了实现过程构造中标识符的作用域和可视性规则的要求,在符号表中可设立一个属性域用来登录符号所在过程的层次。
进入过程时,层次要增加一层。在退出一个过程中时,层次降低一层,且需要把符号表中,所有在退出的过程中登录的符号项清除。
引入DISPLAY嵌套层次表。;8.2 错 误 处 理 ; 然而,更正所发现的错误并不是一件容易的事,许多编译程序实际上并不做改正错误的工作,而只是对源程序中的错误进行适当的处理并跳过错误所在的语法成分,如单词、说明、表达式或语句等,然后继续对源程序的后继部分进行编译。
源程序中的错误通常分为语法错误和语义错误两类。所谓语法错误,是指编译程序在词法分析阶段和语法分析阶段所发现的错误,如关键字拼写错误、语法成分不符合语法规则等等。一般来说,编译程序查找此类错误比较容易,并且也能准确地确定出错位置。至于语义错误, ; 则主要来源于对源程序中某些量的不正确使用,如使用了未经说明的变量,某些变量被重复说明或不符合有关作用域的规定,运算的操作数类型不相容、实参与形
原创力文档


文档评论(0)