编译原理ch8 符号表.ppt_第1页
编译原理ch8 符号表.ppt_第2页
编译原理ch8 符号表.ppt_第3页
编译原理ch8 符号表.ppt_第4页
编译原理ch8 符号表.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、符号表的组织和名称的作用范围符号表的内容、信息源程序中的各种名称、它们的属性、特征等。为语境语义的法律检查提供依据;目标代码生成阶段的地址分配基础等。名称、信息、样品重量、主列(关键字)、名称列、信息列、项,填写:以填写新名称和信息。查找:以给出一个名称,并确定它是否在表中。请访问:获取相关信息。更新:以给出名称并更新相关信息。删除:删除一个或一组记录。直接方式:每一列都有固定的长度,内容直接填写。优点:易于组织、填写和查找缺点:浪费空间间接方式:内容填充在其他数据结构中,只有指标放置在符号表的列中指向这个位置。指针(指示器):标识符的起始位置整数:标识符的长度、名称、信息、6、6、s a m

2、 p l e w e g h t、字符串数组:信息栏也可用数组l1 :u1、l2: u2、ln:un :type,l1u1 D1,ln un dn,n address,a数组.符号表,上下文向量表,连续存储,每一项都被放置在连续的K个存储单元中,形成一个K*N、的表,第一项每一项都有K个字。子表存储将整个符号表分成m个子表,如T1、T2、Tm,每个子表包含N个项目。第一项的全部内容是T1、T2、T1、T2、TM、T1T2.K1*N k2*N km*N,根据名称的不同种类,建立了多个符号表,如常数表、变量名表、过程名表和过程信息表(M,N : INTEGER);标签开始;风险值K:整数;开始:

3、K:=m1;m :=n4;n :=K;结束。(M,n :整数);标签开始;风险值K:整数;开始: K:=m1;m :=n4;n :=K;结束。(M,n :整数);标签开始;风险值K:整数;开始: K:=m1;m :=n4;n :=K;结束。(M,n :整数);标签开始;风险值K:整数;开始: K:=m1;m :=n4;n :=K;结束。(M,n :整数);标签开始;风险值K:整数;开始: K:=m1;m :=n4;n :=K;结束。符号表的组织和名称的范围符号表的内容在许多编程语言中,名称都有一个确定的范围。两种程序结构是单层(并行)结构,如FORTRAN。FORTRAN程序由一个主程序段和几

4、个辅助程序段组成,如PASCAL。ADA过程可以是嵌套的和递归的。范围:可以使用名称的区域称为名称的范围。允许相同的标识符在不同的进程中代表不同的名称。名称作用域规则“最近嵌套规则”(子例程B1中描述的名称x)仅在B1中有效(B1的本地);如果B2是B1的内部子例程,并且在B2没有标识符X的新描述,那么原来的名字X在B2仍然有效。如果B2重新解释了X,那么B2对X的任何引用都是指重新解释的X,程序主var A,B :实;程序P1 var b :布尔;开始结束程序P2变量a :整数;开始结束开始结束,a(实数),b(实数),b(布尔),a(整数),两种方法:引入了“进程号”的属性:名称,当搜索进

5、程号时,首先寻找这个进程号的名称,如果没有,寻找外部进程号的名称,等等。搜索时,遇到的第一个名称是要搜索的名称。变量、数组和语句的函数名的范围是,当它们所在的程序段在不同的地方存储局部名和全局名时,当一个程序被处理时,它的局部名不需要保存。、本地名称表、全局名称表、指针1、指针2、当一个新名字出现时,它总是从堆栈的顶部填充。顶部指针信息栏指针字段上一个:指示上一个名称在同一层中的位置。例如,显示层次结构表(嵌套层次结构表,显示表)在主表的起始位置存储所有嵌套的过程子表。程序B1(输入,输出)常量A=10变量B,整数C:e: real程序B2(x:real) var f,g:real程序B3(y

6、:real)常量b=5;var h :布尔值;程序B4(z : integer)var I : char;从e0开始,然后是B3(f);结束;从B4(a)开始;结束;开始B3(c);结束;开始B2(东);End、1、2、3、4、5、6、7、8、9、10、top、stack符号表、display、name、info、previous、h、13、b、12、y、11、B3、0、0、14、10、6、1、符号表的组织和动作范围名称符号表的内容、符号表的信息列记录每个名称的相关属性类型:整数、实数或布尔值等。种类:简单变量、数组、程序等。大小:长度,即所需存储单元中的相对字数:指分配给名称的存储单元的相对

7、地址。Nametab程序体表(btab)层次显示表(display)数组信息表(atab)中间代码表(code),1) nametab nametab:各种名称及其属性,名称标识符,名称类型,可以是常量,变量,类型主程序的级别定义为1,主程序中定义的级别为2,等等。名称的类型有整数、字符、布尔和数组。对于非类型化的名称,不填写类型,使用布尔量来指示该名称是否为变量参数名称。当名称为数组类型或数组变量名时,ref指向它;当名称为过程名时,ref指向过程在程序体表(btab)中的位置;在其他情况下,ref为0,adr,当名称为变量名(包括形式参数)时,将变量(或形式参数)所分类的存储单元的相对地址

8、存储在相应的活动记录中;对于进程名,填写其对应代码的入口地址值,当名称为变量名时,填写其对应的值大小,当名称为类型名时,填写此类数据所需的存储单元数,在nametab中指向同一程序体中定义的前一个名称的位置,在每个程序体的nametab中注册的名字的链接为0。在nametab中指向程序体中最后一个形式参数的位置,在name tab中指向程序体中最后一个名字的位置,程序体的所有形式参数所需要的容量,包括连接数据所占用的空间,程序体的所有本地数据所需要的空间,(2)程序体表btab和层次显示表,程序体表btab:记录每个程序体的全部信息,用于分析源程序中定义的名字范围;管理名称表和层次结构显示表:描述正在处理的每个嵌套层,并管

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论