- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
8.1.1 符号表的作用 在编译程序工作的过程中,需要不断收集、记录、查证和使用源程序中的一些语法符号(简称为符号)的类型和特征等相关信息。为方便起见,一般的做法是让编译程序在其工作过程中建立并保存一批表格,如常数表、变量名表、数组内情向量表、过程或子程序名表及标号表等,将它们统称为符号表或名字表。 符号表中的每一项包括两个部分:一部分填入名字(标识符);另一部分是与此名字有关的信息,这些信息将全面地反映各个语法符号的属性以及它们在编译过程中的特征,诸如名字的种属(常数、变量、数组、标号等)、名字的类型(整型、实型、逻辑型、字符型等)、特征(当前是定义性出现还是使用性出现等)、给此名字分配的存储单元地址及与此名语义有关的其他信息等。 根据编译程序工作阶段的不同划分,名字表中的各种信息将在编译程序工作过程中的适当时候填入。对于在词法分析阶段就建立符号表的编译程序,当扫描源程序识别出一个单词(名字)时,就以此名字查找符号表; 若表中无此名字的登记项,就将此名字填入符号表中;至于与此名字相关的其它信息,可视工作方便分别在语法分析、语义分析及中间代码生成等阶段陆续填入。在语义分析时,符号表中的信息可以用于语义检查;在代码优化时,编译程序则利用符号表提供的信息选出恰当的代码进行优化;而目标代码生成时,编译程序将依据符号表中的符号名来分配目标地址。几乎在编译程序工作的全过程中,都需要对符号表进行频繁的访问(查表或填表),其耗费的时间在整个编译过程中占有很大的比例。因此,合理地组织符号表并相应选择好的查、填表方法是提高编译程序工作效率的有效办法。 对于编译程序所用的符号表来说,它所涉及的基本操作大致可以归纳为五类: (1) 判断一个给定的名字是否在表中; (2) 在表中填入新的名字; (3) 对给定的名字访问它在表中的有关信息; (4) 对给定的名字填入或更新它在表中的某些信息; (5) 从表中删去一个或一组无用的项。 8.1.2 符号表的组织 由于处理对象的作用和作用域可以有多种,因而符号表也有多种组织方式。按照处理对象的特点,符号表的组织方式一般可分为直接方式和间接方式。 图8-1 直接组织方式的符号表 直接方式是指在符号表中直接填入源程序中定义的标识符及相关信息(如图8-1所示)。在图8-1所示的符号表中,Name(名字)栏的长度是固定的,这种栏目长度固定的表格易于组织、填写或查找,因而是最简单的一种符号表组织方式,它适合于规定标识符长度的程序语言。 然而,并不是所有高级语言都规定标识符的长度。如果对标识符长度不加限制,则上述定长方式必须按最大长度来定长,这显然浪费存储空间。因此,对不定长标识符一般采用间接方式来组织符号表。 间接方式是指单独设置一个字符串数组来存放所有的标识符,并在符号表的名字栏中设置两项内容:一是指针,用来指向标识符在数组中的起始位置;二是一整数值,用来表示该标识符的长度。图8-2给出了符号表的间接组织方式。 图8-2 间接组织方式的符号表 另一种组织方式是按标识符的种属,如简单变量、数组、过程等分别建立不同的符号表,如简单变量名表、数组名表、过程名表等。例如,下面的函数: int f(int a,int b) { int c; if(ab) c=1; else c=0; return c; } 图8-3 按标识符种属组织的各种符号表(a) 简单变量名表;(b) 常数表;(c) 函数入口名表 根据符号表名字栏的组织特点,符号表信息栏的组织方式也分为两类:固定信息内容和仅记录信息存放地址。 如果名字栏中的标识符按种属分类,则因同类标识符其基本特征一致,故可将这些信息一一记录在信息栏中。 如果符号表的名字不分种属,则由于不同种属的标识符其特征不一致,也即它们所需存储的信息不一致,因而不容易确定一个固定长度的空间来统一安排。这时,可在符号表外另设一组存储空间,并在符号表信息栏中放一指针来指向这个存储空间起始地址。 例如,对数组标识符需要存储有关数组维数,每维上、下界值,数组类型及数组存放的起始地址等信息。如果将信息与名字一起全部放在符号表中,则因维数不同而使记录该信息的空间大小不易确定,因此,通常给它们另外安排一个内情向量表来记录数组的全部信息,同时在符号表的信息栏设置一指针指向内情向量的入口地址(见图8-4)。此外,对像函数名、过程名等含有较多信息且不容易规范信息长度的名字都可以采取这种办法。 图8-4 记录数组内情向量的符号表 8.1.3 分程序结构语言符号表建立 所谓分程序结构语言,是指用这种语言编写的分程序中可以再包含嵌套的分程序,并且可以定义属于它自己的一组局
您可能关注的文档
最近下载
- 钢结构吊装专项施工方案(技术方案).doc
- 中国成人念珠菌病诊断与治疗专家共识解读PPT课件.pptx VIP
- 05S804:矩形钢筋混凝土蓄水池.pdf VIP
- 01-泌尿系统疾病总论.ppt VIP
- 物理治疗学神经生理疗法Bobath技术.docx VIP
- Unit 3 My favourite food Lesson 2 Happy birthday, Amber! 单元教学设计 粤教沪外教版英语三年级下册.docx
- Andrews分析法诊断正畸.pptx
- (新课程中小学科学教学设计与案例分析提纲及答案2.doc VIP
- 2025年湖北省遴选面试真题及答案大全解析.docx VIP
- DB11T 1832.15-2022 建筑工程施工工艺规程 第15部分:通风与空调安装工程 conv.docx VIP
原创力文档


文档评论(0)