导航:首页 > 源码编译 > 编译符号表去掉名字

编译符号表去掉名字

发布时间:2025-06-19 12:13:54

① 什么是符号表 符号表有哪些重要作用

符号表是一种用于语言翻译器(例如编译器和解释器)中的数据结构。在符号表中,程序源代码中的每个标识符都和它的声明或使用信息绑定在一起,比如其数据类型、作用域以及内存地址。

符号表的作用:符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统中。

如常数表、变量名表、数组名表、过程名表、标号表等等,统称为符号表。对于符号表组织、构造和管理方法的好坏会直接影响编译系统的运行效率。


(1)编译符号表去掉名字扩展阅读

编译程序按名字的不同种属分别使用许多符号表,如常熟表。变量名表过程名表函数入口名表。符号表的关键字域(段)就是符号名称等长关键字域(段)符号表。

不等长关键字段符号表,采用关键字词的索引结构。关键字在符号表的查找中相当重要hash函数构造方法就是以取关键字的值不同区分,如直接寻址伐数字分析法折叠法。

② 定义语法树和符号表的数据结构

为了维持静态作用域的程序里各个名字的轨迹,编译器需要依靠一种称为符号表的数据结构。从最基本的层次上看,符号表就是一个字典:它把名字映射到编译器已知的有关信息。这里最基本的操作是把一个新映射关系(名字对象约束)放入表里,以及(非破坏性的)用一个给定名字去提取映射下的信息,以后我们把

这两个操作分别称为insert和lookup。大部分语言里的静态作用域规则还提出了另外的复杂性,它们要求在程序里的不同部分有不同的引用环境。为了处理作用域规则,我们可能希望简单增加一个remove操作。由于编译器在语义分析阶段要从头到尾扫描代码,这样它就可以在某个作用域开始时插入新约束,在作用域最后撤销它们。但是,存在一些因素使这种直接做法并不实际。

¨ 在许多有着嵌套作用域的语言里,内层声明的效果可以遮蔽外层声明,这就意味着符号表必须有能力为一个给定名字保存任意数目的映射。lookup操作必须返回最内层的映射,到作用域结束时还必须使外层映射重新变成可见的。

¨ 类Algol语言里的记录(结构)具有某种作用域性质,但却又不享有作用域那样的良好嵌套结构。当语义分析器看到一个记录声明时,它就必须记下各个记录域的名字(它们也是递归的,因为记录可以嵌套)。在这种声明结束时,各个域的名字又必须变成不可见的。然而,在此之后,一旦这一记录类型的某个变量出现在程序的正文里(例如在my_rec.field_name),在引用中位于圆点之后的部分,这些域名又必须立即重新变成可见的。在Pascal和另一些有with语句的语言里,记录域的名字还应该在多个语句的上下文里变成可见的。

¨ 某些时候一些名字有可能在它们被声明之前使用,即使在类Algol语言里情况也如此。举例说,Algol 60和Algol 68都允许标号的向前引用。Pascal避免了这种情况,它要求标号必须在作用域开始处声明,但还是允许指针声明的向前引用:

type

阅读全文

与编译符号表去掉名字相关的资料

热点内容
西安乐博机器人编程 浏览:418
java邮箱发送邮件 浏览:799
大人为什么喜欢命令孩子 浏览:286
打包计件算法 浏览:528
宝骏560压缩机 浏览:676
迷你炸ice服务器怎么回事 浏览:204
数控宏程序编程手册 浏览:369
servlet3源码 浏览:346
电视怎么安装安卓盒子 浏览:369
青岛租车app哪个好 浏览:688
cad偏置命令 浏览:905
filezilla命令 浏览:617
学英文哪个app好 浏览:274
加密文档怎么设置只读 浏览:261
t首选ntp服务器ip地址 浏览:339
android范例大全pdf 浏览:375
微信夹娃娃游戏源码 浏览:376
挤眼app在哪里可以下载 浏览:739
压力高压缩机不工作 浏览:53
少爷pdf 浏览:704