- 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章_符号表与错误处理
* * 第8章 符号表与错误处理 8.1 符号表 8.1.1 符号表的作用 编译过程中需不断收集、记录、查证和使用源程序中的一些名字的类型和特征等相关信息。为方便起见,让编译程序在其工作过程中建立并保存一批表格,如常数表、变量名表、数组内情向量表、过程或子程序名表及标号表等,这些表格统称为符号表或名字表。 符号表中的每一项包括两部分:名字、与名字有关的信息,这些信息全面反映各个语法符号的属性及它们在编译过程中的特征,如名字的种属、名字的类型、特征(定义性还是使用性出现等)、给此名字分配的存储单元地址及与此名字语义有关的其它信息等。 根据编译程序阶段的不同划分,名字表中的各种信息将在编译过程中的适当时候填入。对于词法分析阶段就建立符号表的编译程序,当扫描源程序识别出一个单词时,就以此名字查找符号表。若表中无此名的登记项,则将此名字填入符号表中。 语义分析时,符号表中的信息可用于语义检查;代码优化时,编译程序利用符号表提供的信息选出恰当的代码进行优化;目标代码生成时,编译程序将依据符号表中的符号名来分配目标地址。可见,几乎在编译程序工作的全过程中,都需要对符号表进行频繁地访问(查表或填表),其耗费的时间在整个编译过程中占有很大的比例。因此,合理地组织符号表并选择好的查表、填表方法是提高编译程序工作效率的有效办法。 对于编译程序所用的符号表,它涉及的基本操作大致可归纳为五类: (1) 判断一个给定的名字是否在表中; (2) 在表中填入新的名字; (3) 对给定名字访问它在表中的有关信息; (4) 对给定名字填入或更新它在表中的某 些信息; (5) 从表中删去一个或一组无用的项。 8.1.2 符号表的组织 ? 符号表有多种组织方式。按处理对象的特点,符号表的组织方式一般可分为直接方式和间接方式。 直接方式是指在符号表中直接填入源程序中定义的标识符及相关信息。 间接方式是指单独设置一个字符串数组来存放所有标识符,并在符号表名字栏中设置两项内容:一是指针,用来指向标识符在数组中的起始位置;二是一整数值,用来表示该标识符的长度。 根据符号表名字栏的组织特点,符号表信息栏的组织方式也分为两类:固定信息内容和仅记录信息存放地址。 如果名字栏中的标识符按种属分类,则因同类标识符其基本特征一致,故可将这些信息一一记录在信息栏中。 如果符号表的名字不分种属,则由于不同种属的标识符其特征不一致,即它们所需存储的信息不一致,因而不易确定一个固定长度的空间来统一安排。这时可在符号表外另设一组存储空间,并在符号表信息栏中放一指针来指向这个存储空间始址。 8.1.3 分程序结构语言的符号表建立(P231) 所谓分程序结构的语言,是指用这种语言编写的分程序中可以再包含嵌套的分程序,并且可以定义属于它自己的一组局部变量。由于分程序的嵌套导致名字作用域的嵌套,故有时也将允许名字作用域嵌套的语言称为具有分程序结构的语言。 典型的分程序结构语言是PASCAL;虽然通常不把C语言视为嵌套分程序结构的语言,但在它的函数定义中,函数体可以是一个嵌套的分程序,因而其中所涉及的各个局部变量的作用域也具有嵌套特征。 对于嵌套作用域,同名变量在不同层次出现可能有不同类型。因此,为使编译程序在语义及其它有关处理上不发生混乱,可采用分层建立和处理符号表的方式。 PASCAL程序中,标识符的作用域是包含说明该标识符的最小分程序,即PASCAL程序中标识符的作用域总是与说明这些标识符的分程序的层次相关联。为表征PASCAL程序中各分程序的嵌套层次关系,可将这些分程序按其开头符号在源程序中出现的先后顺序进行编号。这样从左至右扫描源程序时可按分程序在源程序中自然顺序,对各分程序中的标识符进行处理,具体方法如下: (1)当一个分程序首部某说明中扫描到一标识符时,以此标识符查找相应于本层分程序的符号表,如果符号表中已有此名字的登记项,则表明此标识符已说明,应按语法错误进行处理;否则应在符号表中新登记一项,并将此标识符及有关信息填入。 (2)当在一分程序语句中扫描到一个标识符时,先在该层分程序的符号表中查找此标识符;若查不到,则继续在其外层分程序的符号表中查找。如此下去,一旦找到,则作相应处理;如果查遍所有外层都无法找到,则程序中使用了一个未说明的标识符。 为实现上述查填表, 按如下方式组织符号表: (
您可能关注的文档
- 米兰家具设计展.pptx
- 米曲菌胰酶片.ppt
- 类固醇受体共激活子家族SRC.ppt
- 类图与对象图1.ppt
- 精_美PPT_战__略__管__理.ppt
- 粮食城1期初步浅思路.ppt
- 精实生产系统-余新兴.ppt
- 精密与特种加工_论文.doc
- 类SARS病毒资料.doc
- 精密测控与系统(4-1简单控制).ppt
- 职场“软技能”清单:共情力、抗压力、协作力提升路径.docx
- 远程办公效率提升:避免摸鱼、保持专注的5个方法.docx
- 职场副业选择:不影响主业的“技能变现”方向.docx
- 管理岗转型:从“自己干”到“带团队”的思维转变.docx
- 5年资深员工:横向拓展 vs 纵向晋升的选择策略.docx
- 3年职场瓶颈突破:从“执行岗”到“负责岗”的能力跃迁.docx
- 职场英语实用场景:商务谈判与邮件往来常用表达全攻略.docx
- 会议记录高效法:提炼重点、明确待办的记录模板.docx
- 时间管理工具对比:番茄工作法与四象限法则的实操差异深度解析.docx
- 公开演讲入门:克服紧张 + 抓住听众注意力的小技巧.docx
文档评论(0)