编译原理 第八章——符号表
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Program B1(input,output); const a=10; var b,c:integer;
NAM E
TOP→7
INFOR PREVIOU MATION S …… …… …… …… …… …… …… …… 7 0 5 4 3 2
e:real; Program B2(); var f:int; ……
线性查找、二叉树和杂凑技术
1.线性表 每一项按先来者先填。查找时从表的第一项开始 顺序查找。 要填进新名字时,先查找表格,已在表中则不填, 报重名错;若不在表中,填进AVAILABLE所在位 置,AVAILABLE指向下一空白项。 一张含n项的线性表,查找其中某项,平均做n/2 次比较。 自适应线性表,添加指示器,将所有项按“最新 最近”访问原则连成一条链。
一张符号表的每一项(入口)包含两大栏(区域、字段): 名字栏和信息栏。 名字栏称主栏,主栏的内容称为关键字,一般不允许重名。
名字栏 (NAME)
第1项(入口1) 第2项(入口2)
信息栏 (INFORMATION)
……
第n项(入口n)
符号表的组织方式
1.各项各栏所占存储单元 的长度都是固定的,每栏 的内容可直接填写在有关 区段。
2.对折查找与二叉树 将表格中项按名字“大小”顺序排列。 “名字大小”指名字的内码二进值。 对折查找一项最多只需1+log2N次比较。 将符号表组织成一棵二叉树。每项是一个 结点,结点主栏的内码值视为该结点的值。 任何结点P的右枝(RIGHT)的所有结点值小 于P的值,而左枝(LEFT)的值均大于P的值。
…… f B2 e c b a
6 5 4 3 2 1 SP→
6 1
DISPLAY
NAME •,6 •,4 S A M P L E L O O P INFORMATION
2.用间接方式安排名字栏。
NAME • •
INFORMATION
6 S A M P L E 4 L O O P
•对信息栏也可做类似处理,把一些共同属性直接登记在符 号表信息栏,而把特殊属性登记在别的地方。
整理与查找
第八章 符号表
符号表用来存放语言程序中出现的有关标识符的 属性信息。 符号表每一项包含两部分:名字(标识符),此 名字的有关信息 种属:简单变量,数组,过程……
类型:整,实,布尔……
符号表的功能: 1.收集符号属性。 2.上下文语义的合法性检查的依据。 3.作为目标代码生成阶段地址分配的依据。
符号表的组织与作用
3.杂凑技术 构造wenku.baidu.com址函数H。对任何名字SYM, H(SYM)取值0~N-1之间,从H(SYM)获得 SYM在表中的位置。 如:可取N为质数, H(SYM)定义为SYM/N 的余数。 如何解决“地址冲突”? 可使用一张杂凑(链)表将所有相同杂凑 值的符号名连成一串。
名字的作用范围
名字的作用范围和它所处的那个过程相联系。 <名字,过程编号> FORTRAN的符号表组织 将局部名登记在表格区的一端,全局名登记在表格区的另 一端。 Pascal的符号表组织 ——将其符号表设计为栈符号表,当新的名字出现总是从 栈顶填入。 ——引入一个显示(DISPLAY)层次关系表,称为过程的 嵌套层次表。其作用是为了描述过程的嵌套层次,指出当 前正在活动着的各嵌套的过程(或函数)相应的子符号表 在栈符号表中的起始位置(相对地址)。 ——在符号表的信息栏中引入一个指针域(previous)用 以链接它在同一过程内的前一域名字在表中的下标(相对 位置)。