网站大量收购闲置独家精品文档,联系QQ:2885784924

编译原理-何炎祥-第十章.pptVIP

  1. 1、本文档共22页,可阅读全部内容。
  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文档。上传文档
查看更多
第十章 符号表的组织和查找 为了检查语义的正确性和生成代码,需要知道源程序中所使用的各种标识符的属性,这些属性常常由编译程序集中起来并存放在一个标识符表或符号表中。本章讨论组织、构造和查找各种符号表的方法。 10.1 符号表的一般组织形式 符号表的每一项(称为表项)包含两个部分,即主目和值。表的主目通常即符号或标识符本身(变量的名字),值乃是它们的属性,包括种属(如简单变量、数组或过程等)和类型(如整型、实型、布尔型等)。 因为组成标识符的符号个数是不固定的。因此,常常不是直接将标识符本身存放在主目栏中,而是存放一个指向标识符的指示器,并在另一字符串表中存放这些标识符。 10.2 符号表中的数据 符号表是编译程序中的一个很重要的部分,应按方便获取信息和有效添加信息的方式建立符号表。值部分描述标识符的有关属性,因此也称为描述信息。 对于变量,其描述信息通常包括:类型、种类、精度、维数或维数之值、形参类型、连结其它分量的方式、标号的类型、是否在公用语句或等价语句中出现、它的说明是否处理过、它运行时的地址。 10.2 符号表中的数据 对于过程,其描述信息通常包括: ① 是否为函数过程?若是,则给出其函数类型。 ② 是否为形式参数过程? ③ 是否为程序的外部过程? ④ 是否为递归过程? ⑤ 是否有形参?若是,给出每个形参的描述信息。 ⑥ 其说明是否加工过? 10.3 符号表的构造与查找 符号表的构造(简称造表)是指把新的表项填入表中的过程。符号表的查找是指在符号表中搜索某一特定表项的过程。 10.3.1 线性查找 它按主目出现的先后顺序填写各个表项,而不做任何整理表项次序的工作。查表时,从表头开始朝表尾方向(或从已填表项的末端开始朝表头方向)逐个进行比较,直至找到所需表项或表中所有已填表项比较完毕(此时表明未找到所需要的表项)为止。 10.3 符号表的构造与查找 线性造表算法为 Procedure LINEARBUILD; begin for i:= n step –1 until 1 do if T[i] = x then return (error, 重名); n:= n+1; T[n]:= x; return; end; 10.3 符号表的构造与查找 线性查表算法为 Procedure LINEARSEARCH; begin for i:= n step –1 until 1 do if T[i] = x then return (?x?的信息), return (?表中不存在x表项?); return; end; 10.3.2 折半法 造表法是指按照表项主目的“大小”次序进行填写,“小”的排在前,“大”的排在后。 查表时,每次取当时表正中间(即对折)那个表项的主目与被查项进行比较;若被查项“小于”中间表项,则在前半表区重复折半法查找;若被查项“大于”中间表项,则在后半表区重复折半法查找(两者相同时,表示已查到所需要的表项)。重复这一过程,直到当时的表尾大于当时的表头为止。 10.3.2 折半法 折半查找算法为 Procedure BINARYSEARCH; begin i:= 1; j:= n; while i≤j do k:= (i + j) DIV 2 if T[k] = x then return (?x的信息?) else if T[k]? x then i:= k + 1 else j:= k – 1; return (?表中不存在x表项?); end; 10.3.3 杂凑技术 杂凑技术就是设计一杂凑函数h(x),其中x为任一标识符,它把x映象成表区中某一单元的地址,并要求当x y时,h(x) = h(y)的可能性尽量地小,即单元冲突的可能性尽量地小。这样,在利用杂凑法造表时,就能使要填入的标识符比较均匀地散列在整个表区中(因此,杂凑法也称散列法)。 10.3.3 杂凑技术 乘法公式 h (x) = [C*( (?*x) mod 1 )]*2 其中,x为标识符的机内编码;?=0.618033988747;C=2048=211是表容,即表区中允许存放的标识符的最大个数;a mod b的含义是a除以b的

文档评论(0)

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

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档