符号表

Posted yongh701

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了符号表相关的知识,希望对你有一定的参考价值。

文章目录

符号表的组织

1、符号表的形式
符号表的每一项包含两栏:名字栏和信息栏

名字(NAME)信息(INFORMATION)

名字栏:主栏,关键字栏目;
信息栏:记录不同属性,分为若干子栏目。
由于不同名字的种属不同,不同种属的信息不同,因此可根据名字的种属建立多张符号表。如变量表,常量表等。
2、符号表的操作
主要有5类一般操作,对不同的符号表可能还会有具体操作
(1)填入名字 (2)查找名字
(3)访问信息(4)填写修改信息
(5)删除
操作的时机:定义或使用变量时。
3、符号表的组织方式
根据栏目的长度:
安排为固定长度:需满足栏目可能的最大长度,造成资源浪费;
间接方式:符号表中只存入指针,符号表中本应填入的信息存入一片可长可短的单元中,利用指针访问它,会造成效率下降。

4、符号表的存放:
(1)每一项置于一片固定长度的连续存储单元中
(2)划分为若干字表。(只划分栏目)

符号表的整理和查找

1、线性查找(自适应线性表)
2、二分查找(二叉树):利用名字大小排序。
3、Hash:名字到项目编号的映射。

利用符号表分析名字的作用范围

FORTRAN语言作用域分析
程序结构:并行结构,模块结构,各个模块独立,不允许嵌套递归。
各个模块是独立的,因此各变量作用域就是其所处的程序段。
符号表的组织:
一遍扫描:局部变量名登记在一端*(可以重用)*,全局变量名在另一端。每次扫描结束一个程序段,将局部变量删除,在其位置上建立新的局部变量。表满时将局部变量区清零。
多遍扫描:将局部变量表保存在外部,供后续遍使用。用一数组记录各局部区开始的位置。

Pascal语言作用域分析:
程序结构:嵌套结构,过程结构,允许嵌套,递归定义。
作用域遵循最近作用域原则:一个名字的作用域是包含名字的说明的最小过程;
内层过程可以引用外层过程说明过的名字。
符号表的组织:
栈符号表:name,information,previous(同一过程域中前一个名字的下标,最后一个为0)
display栈: level(指向正在处理的最内层过程起始位置),每一过程起始地址。

符号表的内容

信息栏的内容:类型,种属,大小(存储单元长度),相对数(地址)

以上是关于符号表的主要内容,如果未能解决你的问题,请参考以下文章

Aspose.Words 如何获取word每个段落的编号 或者项目符号?

信创办公--基于WPS的Word最佳实践系列(利用项目符号及编号条理化文本)

Extjs HtmlEditor - 编号列表和项目符号列表

为什么项目符号自动编号到了10之后,文字和编号离这么远

在新文档中复制项目符号列表编号?

extjs 4.1 如何在 xtemplate 中显示编号和项目符号