第8章 符号表与错蔚捏处理.ppt

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 符号表与错蔚捏处理

第8章 符号表与错误处理 8.1 符号表 8.2 错误处理 (3) 有关符号表的操作: 判断一个给定的名字是否在表中; 在表中填入新的名字; 对给定的名字访问它在表中的有关信息; 对给定的名字填入或更新它在表中的某些信息; 从表中删去一个或一组无用的项。 1 符号表项的组织与内容 (1)符号表项的组织 符号表的基本结构如下: 名字 信息栏 2 非过程嵌套程序语言的符号表组织 (1)非过程嵌套语言: 每个可独立进行编译的程序单元是一个不包含有子模块的单一模块。如FORTRAN语言。 3 过程嵌套结构语言的符号表组织 (1) 过程嵌套的结构语言: 模块(过程)内可嵌入子模块(过程)。 (2) 标识符的作用域和基本处理方法: 作用域:根据最近嵌套作用域原则,标识 符局部于所定义的模块(最小模块)。 内层模块(过程)可引用外层模块(过程)中说明的名字, 反之则不行。 8.2 错 误 处 理 由于编译程序处理的源程序总是或多或少地包含有错误,因而一个好的编译程序应具有较强的查错或改错能力。所谓查错,是指编译程序在工作过程中能够准确、及时地将源程序中的各种错误查找出来,并以简明的形式报告错误的性质及出错位置。所谓改错,就是当编译程序发现源程序中的错误时,适当地做一些修补工作,使得编译工作不至于因此而中止,以便能够在一次编译过程中尽可能多地发现源程序中的错误。 然而,更正所发现的错误并不是一件容易的事,许多编译程序实际上并不做改正错误的工作,而只是对源程序中的错误进行适当的处理并跳过错误所在的语法成分,如单词、说明、表达式或语句等,然后继续对源程序的后继部分进行编译。 源程序中的错误通常分为语法错误和语义错误两类。所谓语法错误,是指编译程序在词法分析阶段和语法分析阶段所发现的错误,如关键字拼写错误、语法成分不符合语法规则等等。一般来说,编译程序查找此类错误比较容易,并且也能准确地确定出错位置。至于语义错误, 则主要来源于对源程序中某些量的不正确使用,如使用了未经说明的变量,某些变量被重复说明或不符合有关作用域的规定,运算的操作数类型不相容、实参与形参在种属或类型上不一致等等,都是典型的语义错误,这些错误也能被编译程序查出。此外,由于编译实现的技术原因,或为目标计算机的资源条件所限,在实现某一程序语言时,编译系统对语言的使用又提出了进一步的限制,例如对各类变量数值范围的限制,对数组维数、形参个数、循环嵌套层数的限制等。对于违反这些限制而出现的语义错误,多半要到目标程序运行时才能查出,但这时源程序已被翻译成目标代码程序,要确定源程序中的错误位置就比较困难。 8.2.1 语法错误的校正 对源程序错误的处理通常有两类不同方法:一类是对错误进行适当的修补,以便编译工作能够继续下去;另一类是跳过有错误的那个语法成分,以便把错误限制在一个尽可能小的局部范围内,从而减少因某一错误而引起的一连串假错。第二类方法又称为错误的局部化法。 1.单词错误的校正 词法分析的主要任务是把字符串形式的源程序转换为一个单词系列。由于每一类单词都可以用某一正规式表示,因而在识别源程序中的单词符号时,通常采用一种匹配最长子串的策略。如果在识别单词的过程中发现当前余留的输入字符串的任何前缀都不能和所有词型相匹配, 则调用单词出错程序进行处理。然而,由于词法分析阶段不能收集到足够的源程序信息,因此让词法分析程序担负校正单词错误的工作是不恰当的,事实上还没有一种适用于各种词法错误的校正方法。最直接的做法是,每当发现一个词法错误时,就跳过其后的字符直到出现下一个单词为止。 单词中的错误多数属于字符拼写错误,通常采用一种“最小海明距离法”来纠正单词中的错误。当发现源程序中的一个单词错误时,试图将错误单词的字符串修改成一个合法的单词。 我们以插入、删除和改变字符个数最小为准则考虑下面几种情况: (1) 若知道下一步是处理一个关键字,但当前扫描的余留输入字符串的头几个字符却无法构成一个关键字,此时可查关键字表并从中选出一个与此开头若干字符最接近的关键字来替换。 (2) 如果源程序中某标识符有拼写错误,则以此标识符查符号表,并用符号表中与之最接近的标识符取代它。 在多数编译程序中不是采用“最小海明距离法”来校正错误,而是采用一种更为简单、有效的方法。这种方法的依据是程序中所有错误多半属于下面几种情况之一:

文档评论(0)

ayangjiayu5 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档