- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)