第9节 符号表.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1 1 图9.26表示编译程序扫描进入第2层分程序后单表结构的符  号表情况: 图9.27表示编译程序扫描进入第3层分程序后单表结构的符  号表情况: 图9.28表示编译程序扫描进入第4层分程序后单表结构的符  号表情况: 符号表在编译全过程的地位和重要作用 登录源程序中定义的标识符的所有属性。 对源程序中标识符的定义和引用,进行上下文合法性检查。 作为语义处理及代码生成的依据。 符号的作用域关系到标识符的生存期,符号的可视性关系  到标识的可引用性。两者密切相关,但又不完全相同。 标识符的数据类型通过类型声明来定义(默认除外)。而  标识符的存储类别不但取决于存储类别声明,而且还取决  于该标识符声明在程序构造中的位置。 【本章小结】 符号表总体组织的选择应考虑语言文本的复杂性(包括词法  结构、语法结构的复杂性),还应考虑到对于编译系统在  时间效率和空间效率方面的要求。 符号表中属性域的构造原则上是定长的。对于复杂属性可采  用索引扩展方式构造。 采用复合属性域组织,提高了符号表的空间效率,但增加了  表处理的复杂度。 采用单表结构时,下推链域的构造用来处理解决分程序构造  中同名标识符声明的可视性规则,采用分表结构不存在下  推问题。分表结构很适合基于对象的语言的编译系统。 第9章 作业题 P229: 2. 3. Subscrip1并不关系到数组的内情向量,而仅关系到该数组分配存储时的空间尺寸。在C语言中可以定义如下一个数组: type array[ ][subscrip2]…[subscripn] 例如,int abc[3][4][2]的排列和各种指针所指向的位置,如图9.14所示: 对于C语言中一个一般形式定义的数组: type array[s1][s2]…[sn] array 指针值addr     目标长l1 array[0] 指针值addr 目标长l2 array[0][0] 指针值addr 目标长l3 … … … array[0][0]…[0] 指针值addr 目标长ln 其中:addr是数组分配的地址,则有 lk=sk*sk+1*…sn*sizeof(type) k=1,2,…,n 而array[0][0]…[0]是该数组的第1个元素 有关指针值的计算是: array[i1]=array[0]+i1 array[i1][i2]=array[0][0]+(i1*s2+i2) array[i1][i2][i3]=array[0][0][0]+((i1*s2+i2)*s3+i3) … array[i1][i2]…[ik]=array[0]…[0]+(…(i1*s2+i2)*s3…+ik)  (k=1,2,…,n-1) 数组元素的地址计算:  array[i1][i2]…[in]=  array[0]…[0]+(…(i1*s2+i2)*s3…+in)*sizof(type) 在等长属性值域的组织中,讨论了用成员链来组织C语言的结构量符号。也可以用成员的索引结构来构造结构量。 用成员的索引结构来构造结构量,这时结构标志符号在符  号表项中设一个指向成员索引区的指针,索引区包含两  种属性信息:该结构的空间尺寸、成员索引信息 上述结构例子struct tag1的不等长索引结构可用图9.15所  示的组织 在一个符号表中若有若干个用位信息表示的属性时,可把  他们组织到一起,甚至可用一个整型数来表达这样的几  个位信息属性。这种组织与上述合并不同的是各属性有  各自的表项中的位置 例如,有下列的一些符号属性: ①该变量符号是否已初始化 ②该符号是否是结构成员 ③该符号是否是标号 ④该符号是否是保留字 这些属性都可用1个信息位表示,在符号表中可以把它们  组织在一个整型字段中作为一个属性域,而其中相应的  信息位置表示上述相应的属性,我们称这种域为复合属  性域,如图9.16所示: 在程序语言的结构中,分程序的分层结构允许同名标识符具有的生存期发生重叠。 为实现这种同名标识符的语义功能,符号表中需要设立下  推链域的组织 下推链域的组织要求在进入一个内层结构并发生重名标识  符定义时,需把当前符号表中外层的该符号表项下推到  下推链中而在符号表被下推的表项处建立内层的同名识  符的表项 例如,设有一个程序(C语言程序)如图9.17所示: 五.下推链域的组织 当逐个退出分程序时,下推链被逐次回推

文档评论(0)

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

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

1亿VIP精品文档

相关文档