编译原理06符号表组织和管理.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文档。上传文档
查看更多
第6章 符号表的组织与管理;知识结构;6.1 符号表的作用;二.符号表的功能;例如: ┇ int i[3,5]; ┇ float i[4,2]; ┇ int i[3,5]; ┇;3.作为目标代码生成阶段地址分配的依据 除语言中规定的临时分配存储的变量i外,每个符号变量  在目标代码生成时需要确定其在存储分配的位置(主要  是相对位置) 符号变量由它被定义的存储类别或被定义的位置来确定 首先要确定其被分配的区域 其次是根据变量出现的次序 而有关区域的标志及相对位置都是作为该变量的语义信息  被收集在该变量的符号表属性中;符号的主要属性及作用;2.符号的类型: 除过程标识符之外函数和变量标识符都具有数据类型属性 对于函数的数据类型指的是该函数值的数据类型。基本数  据类型有整型、实型、字符型、逻辑型及位组型等,符号  的类型属性是在语言程序中该符号的定义中得到 变量符号的类型属性决定了该变量的数据在存储空间的存  储格式,还决定了该变量上可以施加的运算操作 例如t*2n、a+b;3.符号的存储类别: 一种是用关键字指定,例如在FORTRAN中用COMMAN来  定义公共存储区变量,用SAVE来定义函数或过程的内部静  态存储变量,在C语言中用static定义是属于文件的静态存  储变量或属性函数内部的静态存储变量,用regist定义使用  寄存器存储的变量;另一种方式是根据定义变量说明在程序中的位置来决定,  例如在C语言中,在函数体外默认存储类关键字所定义的  变量是外部变量,即程序的公共存储变量,而在函数体内  默认存储类关键字所定义的变量是内部变量,即属性该函  数所独有的私有存储变量;4.符号的作用域及可视性: 一个符号变量在程序中起作用的范围,称为它的作用域 一般来说,定义该符号的位置及存储类关键字决定了该符  号的作用域 C语言中一个外部变量的作用域是整个程序 FORTRAN语言中的公共变量的作用域并不是整个语言程  序,而仅是那些定义说明了它所在公共块的函数及过程。  除非程序中所有函数及过程中全部说明了该公共块时,该  公共变量的作用域才是整个程序;C语言中,函数外说明的定义的静态变量的作用域是定义该  静态变量的文件,而在函数内部定义的静态变量与  FORTRAN的SAVE变量一样,其作用域仅仅是该变量定义  所在的函数或过程中 一般来说,一个变量的作用域就是该变量可以出现的场合  ,也就是说在某个变量作用域范围内该变量是可引用的,  这就是变量可视性的作用域规则。但是变量可视性不仅仅  取决于它的作用域,还有两种情况影响到一个变量的可视性;(1)函数的形式参数:通常函数的形式参数是作为函数的内   部变量处理的。例如: int a; int func(a,b) float a; int b; { ┇ …a… ┇ //引用float a };上例改写为: int a; int func(a,b) float a; int b; { ┇ …a… //引用float a …::a… //引用int a };(2)复合语句分程序结构:在一个函数中可以建立一个程序  块,该程序块中有自己的说明部分和执行部分,且这程序  块还可以具层次的嵌套结构,例如: ┇ {int a;  ┇ {char a; ┇ {float a; ┇ }┇ …a… //引用char a;    }}} 符号表属性中除了需要符号的存储类别之外还需要表示该  符号在程序结构上被定义的层次;5.符号变量的存储分配信息: 根据符号变量的存储类别定义及它们出现的位置和次序来  确定每一个变量应分配的存储区及在该区中的具体位置;(1)静态存储区:该存储区单元经定义分配后成为静态单  元,即在整个语言程序运行过程中是不可改变的。作静态  分配的符号变量是具有整个程序运行过程的生命周期。分  为:公共静态区、若干个局部静态区;(2)动态存储区:根据变量的局部定义和分程序结构,编  译程序设置动态存储区来适应这些局部变量的生存和消亡  。通常在符号表中存放具体位置的信息是按该变量的存储  区类分别依出现先后的次序排列下相对该存储区表头的相  对位移量来表示的;例如,对于外部量(C语言为例): ┇ int a; ┇ float b; ┇ struct cc {int d; float e; ┇ }c; ┇;其中a,b,c是3个外部量,

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档