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