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

西工大编译原理第六讲符号表.pdf

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章符号表 • 在编译程序工作的过程中,需要不断收集、 记录和使用源程序中一些语法符号的类型 和特征等相关信息. • 这些住处一般以表格形式存储于系统中.如 常数表、变量名表、数组名表、过程名表、 标号表等等,统称为符号表。 • 对于符号表组织、构造和管理方法的好坏 会直接影响编译系统的运行效率。 6.1 符号表的组织 • 符号表的组织涉及数据结构方面知识(略) • 对符号表的访问常见操作有: (1)判定一给定的名字是否在表中; (2)在表中填入一个新名字; (3)访问与给定名字相关的信息; (4)为给定的名字填入或更新其某些信息; (5)从表中删除一个或一组名字 • 须指出,在很多程序设计语言中,对名字的作用域有相应的 规定, 即同一名字的标识符,在不同的作用域里标识了不同 的对象,且占用了不同的存储空间. • 因此,在组织符号表时, 应能反映各个标识符的作用域. 6.2 分程序结构语言符号表的建立 • 分程序结构语言 用其所写的程序单元(program unit)中, 可以再包含嵌套的程序单元,且其中每个程序单元均可定 义属于自己的一组局部变量.如PASCAL中的过程说明,C 中花用括{}号括起来的分程序或复合语句等. • 程序单元的嵌套导致了变量作用域的嵌套,故把允许名字 作用域嵌套的语言称为具有~的语言. PASCAL是典型的~ 之一. • 虽然C不是~的语言,但其函数定义中的函数体可以是一个 嵌套的分程序,因而也涉及到各个局部变量的作用域. • 对于嵌套的作用域,同名变量在不同处代表了不同的实体, 因此,需采用分层建立和处理符号表的方式. PASCAL语言符号表的构造 • 在PASCAL程序中,标识符的作用域是包含说明 (定义)该标识符的最小分程序.即: ①若一标识符在某分程序首部已作说明,则它在整个 分程序内均有定义,除非它在某内层分程序被再次 定义.即它的作用域是整个分程序,是本层分程序及 内层分程序的全局量; ②程序中的标号局限于定义该标号的最小分程序; ③我们可将PASCAL的每个过程视为分程序,其参数 总是局限于相应的过程体内. 查填表方案 • 为了表征一PASCAL程序中各个分程序的嵌套层次关系, 我们可将分程序按其开始符号出现的顺序编号,在扫描源 程序时亦可按这一顺序进行处理.方法是 1. 当在一分程序首部某说明中扫描到一个标识符时,以此 标识符查相应于本层分程序的符号表,若表中已有此项, 则它被重复说明,出错;否则,在表中新登记一项,将该符 号及其相关信息填入. 2. 在分程序执行语句中遇一标识符时,首先查本层表,若找 不到,则查直接外层的符号表,如此等等,若在某层查到, 则可使用相关信息;若遍查所有外层均未找到,则无定义, 出错. 符号表组织方式 • 为实现上述方案,应这样组织符号表: 1. 分层组织符号表的登记项,使各分程序的符号表 登记项连续存放, 而不被内层分程序的符号表分 割; 2. 建立一个 “分程序表”, 用来记录各层分程序符 号表的有关信息.该表有三个域: ①OUTERN 指明该分程序的直接外层分程序的编号; ②ECOUNT 记录该分程序在符号表登记项个数; ③POINTER 指向该分程序在符号表中的起始位置; PROCEDURE B1; VAR A,B,C,D:REAL; F PROCEDURE B2; OU EC POI E TER OU NTE L1 LABEL L1;

文档评论(0)

xina171127 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档