编译原理符号表的原理及典型实例 共19页
合集下载
编译原理:第八章 符号表

规定主程序的层次为1主程序中定义的层次为2依次类推名字的类型类型有整型ints字符型chars布尔型bool数组arrays对于无类型的名字填入notype一个布尔量用于标明名字是否为变量形参名当名字是否为变量形参名时填入false其他情况填入true或不填当名字为数组类型或数组变量名时ref指向该数组在数组信息表中的位置
合肥工业大学 计算机与信息学院软件所
表 0.1 符号名表 SNT NAME INFORMATION M 形式参数,整 型,值参数 N 形式参数,整 型,值参数 K 整型,变量
表 0.2 常数表 CT 值 (VALUE) (1) 1 (2) 4
表 0.3 入口名表 ENT NAME INFORMATION (1) INCWAP 二目子程序, 入口四元式:1
ax→
数组下限 数组上限 数组元素的体积 数组本身的体积 当元素为数组时,它指向 数组元素类型 数组的下标类型 该元素数组信息在atab表 中的位置,其他情况为0
合肥工业大学 计算机与信息学院软件所
type a=array[1..10, 1..10] of integer;
name kind typ ref
合肥工业大学 计算机与信息学院软件所
PL 语言编译程序的符号表
1. 表格的定义 名字表(nametab) 程序体表(btab) 层次显示表(display) 数组信息表(atab) 中间代码表(code)
合肥工业大学 计算机与信息学院软件所
1) 名字表(nametab) 名字表nametab:登记程序中出现的各种名 字及其属性
lastpar last psize vsize 0 1
bx→
指向本程序体中最后一个形式参在 本程序体所有局部数据所 指向本程序体中最后一个名字在 本程序体所有形参所需体积、包 nametab 中的位置 需空间大小 nametab 中的位置 括连接数据所占空间
合肥工业大学 计算机与信息学院软件所
表 0.1 符号名表 SNT NAME INFORMATION M 形式参数,整 型,值参数 N 形式参数,整 型,值参数 K 整型,变量
表 0.2 常数表 CT 值 (VALUE) (1) 1 (2) 4
表 0.3 入口名表 ENT NAME INFORMATION (1) INCWAP 二目子程序, 入口四元式:1
ax→
数组下限 数组上限 数组元素的体积 数组本身的体积 当元素为数组时,它指向 数组元素类型 数组的下标类型 该元素数组信息在atab表 中的位置,其他情况为0
合肥工业大学 计算机与信息学院软件所
type a=array[1..10, 1..10] of integer;
name kind typ ref
合肥工业大学 计算机与信息学院软件所
PL 语言编译程序的符号表
1. 表格的定义 名字表(nametab) 程序体表(btab) 层次显示表(display) 数组信息表(atab) 中间代码表(code)
合肥工业大学 计算机与信息学院软件所
1) 名字表(nametab) 名字表nametab:登记程序中出现的各种名 字及其属性
lastpar last psize vsize 0 1
bx→
指向本程序体中最后一个形式参在 本程序体所有局部数据所 指向本程序体中最后一个名字在 本程序体所有形参所需体积、包 nametab 中的位置 需空间大小 nametab 中的位置 括连接数据所占空间
编译原理 第四章 符号表

4.4.2 符号表的查填
1)隐式说明语言的符号表查填 2)显示说明语言的符号表查填
4.4.3 符号表的删除
当不再使用单词的定义时,需要从符号表中删除单词 定义提供的信息。
4.3.2 常用符号表结构
1)无序符号表 2)有序符号表 3)散列表 4)树结构符号表 5)栈符号表
4.4
符号表的管理
4.4.1 符号表的初始化
1)对于静态符号表,当编译程序开始扫描程序时,符号表 是预先构造好并存于内存的。 2)对于动态符号表,如标识符表、标号表、数值信息表等, 是编译程序在编译过程中根据需要构造的。
第四章 符号表
4.1
符号表的地位及作用
符号表是编译程序的一个主要数据结构,符 号表通常与编译程序的各个阶段有关,编译程序 的各阶段需要不断向符号表输入信息,或者通过 它消除二义性。
符号表的作用可归结为以下几个方面: ① 收集单词属性 ② 语义的合法性检查 ③ 地址分配的依据
4.2
单词的属性及符号表的内容4. Nhomakorabea.1 单词的基本属性
1)保留字的属性 2)特殊符号的属性 3)常量的属性 4)标识符的属性
4.2.2 标识符的处理
1)标识符的定义性出现与应用性出现 2)标识符的作用域
4.2.3 符号表的内容
4.3
符号表的组织
4.3.1 符号表的总体组织
1)将所有语言中的单词都组织在一张符号表中 2)将属性完全相同的那些单词组织在一起 3)将单词属性相似的单词组织在一起
编译原理 符号表6

第8章 符号表与错误处理 例8.1 一示意性源程序如下: PROGRAM PP (input,output); COUNT norw=13;
VAR ll,kk:integer; word:ARRAY[1..norw] OF char;
PROCEDURE getsym; VAR i,j: integer; PROCEDURE getch; BEGIN END; {getch} BEGIN
第8章 符号表与错误处理
这样,在从左至右扫描源程序时就可以按分程序在源 程序中的这种自然顺序(静态层次),对出现在各个分程 序中的标识符进行处理,具体方法如下: (1) 当在一个分程序首部某说明中扫描到一个标识符时 ,就以此标识符查找相应于本层分程序的符号表,如果 符号表中已有此名字的登记项,则表明此标识符 已被 重复说明(定义),应按语法错误进行处理;否则,应在 符号表中新登记一项,并将此标识符及有关信息 (种属、类型、所分配的内存单元地址等)填入。
第8章 符号表与错误处理
j:=1; kk:=i+j END; {getsym} BEGIN END.{pp}
第8章 符号表与错误处理
当编译程序扫描上述源程序时,生成栈式符号表, 试就此符号表回答以下问题:
画出“扫描到getsym过程体之前”的栈符号表; 画出“扫描完getsym过程说明(即扫描完END; {getsym})”时的栈符号表。 [解答] 假定所有的名字在数据区中都只需要一个 单元。 “扫描到getsym过程体之前”的栈符号表如图8- 5 所示。 “扫描完getsym过程说明”时的栈符号表如图8- 6 所示。
度固定的表格易于组织、填写或查找, 因而是最简单的一 种符号表组织方式,
第8章 符号表与错误处理
编译原理课件-符号表

查詢表項
在引用聲明過的識別字時進行
修改表項
在獲得新的語義值資訊時進行
刪除一個或一組無用的項 釋放符號表的空間
在編譯結束前或退出一個分程式
符號表的組織
總體組織和表項屬性資訊組織 第一種: 把屬性種類完全相同的那些符號組織
在一起,構造出多個符號表,常數表、變數名 表、過程名表,標號表 第二種: 把所有語言中的符號都組織在一張符 號表中。組成一張包括了所有屬性的龐大的符 號表 第三種:。。。
上下文語義的合法性檢查的依據
在語義分析中,符號表所登記的內容將用於語義檢查(如檢查一 個名字的使用和原先的說明是否一致)和產生中間代碼。
目標代碼生成階段地址分配的依據
在目標代碼生成階段,當對符號名進行地址分配時,符號表是地 址分配的依據。對一個多遍掃描的編譯程序,不同遍所用的符號 表也往往各有不同。因為每遍所關心的資訊各有差異。
符號表項的排列
符號表作為一個多元組,表中元組的排列組織 是構造符號表的重要成分。在編譯程式的整個工 作過程中,符號表被頻繁地用來建立表項,查找 表項,填充和引用表項的屬性。因此表項的排列 組織對該系統運行的效率起著十分重要的作用。 在編譯程式中,符號表項的組織傳統上採用三種 構造方法。即線性法,二分法及散列法。
根源程式
詞法分析器
單詞符號
符
語法分析器
出
號
語法單位
錯
表
語義分析與中間代碼生成器
管
中間代碼
處
理
代碼優化
中間代碼
理
目標代碼生成器
目標代碼
符號表
符號表是一種數據結構,用來保存根源程 式語言中的各種資訊,如記錄名字的作用 域以及綁定資訊。
在編譯過程不斷彙集和查證出現在根源程 式中的各種單詞的語義屬性特徵資訊。
在引用聲明過的識別字時進行
修改表項
在獲得新的語義值資訊時進行
刪除一個或一組無用的項 釋放符號表的空間
在編譯結束前或退出一個分程式
符號表的組織
總體組織和表項屬性資訊組織 第一種: 把屬性種類完全相同的那些符號組織
在一起,構造出多個符號表,常數表、變數名 表、過程名表,標號表 第二種: 把所有語言中的符號都組織在一張符 號表中。組成一張包括了所有屬性的龐大的符 號表 第三種:。。。
上下文語義的合法性檢查的依據
在語義分析中,符號表所登記的內容將用於語義檢查(如檢查一 個名字的使用和原先的說明是否一致)和產生中間代碼。
目標代碼生成階段地址分配的依據
在目標代碼生成階段,當對符號名進行地址分配時,符號表是地 址分配的依據。對一個多遍掃描的編譯程序,不同遍所用的符號 表也往往各有不同。因為每遍所關心的資訊各有差異。
符號表項的排列
符號表作為一個多元組,表中元組的排列組織 是構造符號表的重要成分。在編譯程式的整個工 作過程中,符號表被頻繁地用來建立表項,查找 表項,填充和引用表項的屬性。因此表項的排列 組織對該系統運行的效率起著十分重要的作用。 在編譯程式中,符號表項的組織傳統上採用三種 構造方法。即線性法,二分法及散列法。
根源程式
詞法分析器
單詞符號
符
語法分析器
出
號
語法單位
錯
表
語義分析與中間代碼生成器
管
中間代碼
處
理
代碼優化
中間代碼
理
目標代碼生成器
目標代碼
符號表
符號表是一種數據結構,用來保存根源程 式語言中的各種資訊,如記錄名字的作用 域以及綁定資訊。
在編譯過程不斷彙集和查證出現在根源程 式中的各種單詞的語義屬性特徵資訊。
《编译原理符号表》PPT课件

精选课件ppt
26
符号表的总体组织
属性3栏与属性4栏冗余,可将其合并;
增加了符号表管理和运行的复杂性,但减少了空间开销;
精选课件ppt
27
符号表的总体组织
总结:
为便于符号表的组织管理,每张符号表的表长通常为定 长是合理的;
每张符号表可以看作是一个多元组,每个元组由若干属 性组成,元组之间有相同的成员个数和一致的排列;
下推链域的组织
精选课件ppt
40
等长属性值域组织
可以取相应的数据类型表达属性值
符号布尔性质的属性域
defined 1(true) 表示已定义
defined 0(false) 表示未定义
表示符号的基本数据类型
Data-type 3个bit位(整型值)
Char
0 0 0 (0)
short
散列组织
对符号进行某种函数操作(杂凑函数)所得的函数值确 定它在符号表的位置;
Vhash = fhash(符号代码值)
改进:Lhash = mod(Vhash,N) ……….. …a…… ……..b.. …..a….. ……..d.. …c……. ……b….
精选课件ppt
33
符号表项的排列
▪ 函数外表示文件可视性,函数内表示所在函数可视;
动态存储区:生命周期是定义该变量的局部范围;
精选课件ppt
15
标识符符号的属性(信息)
具体位置:
按该变量在存储区类分别依出现先后的次序排列下 相对该存储区表头的相对位移量来表示的;
… Int a; …. float b; … Struct cc{
元组之间的区分由表项中“符号”一栏区分;
精选课件ppt
编译原理符号表的原理及典型实例

05
符号表的设计与实现
符号表的数据结构设计
符号表的数据结构应满足高效、 易扩展和易维护的要求,通常 采用哈希表、二叉树等数据结
构实现。
符号表应包含符号名称、符 号类型、符号属性等信息, 以便在编译过程中快速查找
和识别符号。
符号表还应支持动态添加、删 除和修改等操作,以适应源代
码中符号的变化。
符号表的实现算法
常量名的符号表实例
总结词
常量名符号表实例展示了如何使用符号表来管理程序中的常量。
详细描述
常量名符号表记录了常量的名称、类型和值等信息。通过符号表,编译器能够方 便地查找常量的定义和使用,并进行相应的语义分析和代码生成。在处理常量时 ,符号表有助于编译器优化程序的性能,例如常量折叠和常量传播等。
04
编译原理符号表的原 理及典型实例
目录
• 编译原理符号表概述 • 符号表的原理 • 符号表的典型实例 • 符号表在编译过程中的应用 • 符号表的设计与实现
01
编译原理符号表概述
符号表的概念
符号表是一种用于存储程序中标识符 信息的数据结构,主要用于编译过程 中对标识符进行跟踪和管理。
符号表中的每个条目都包含有关标识 符的信息,如名称、类型、作用域等。
如果符号表中存在该标识符的信息,编译器就可以 使用这些信息来生成相应的代码。
符号表的更新
01
在编译过程中,符号表可能会被更新以反映源代码的变化。
02
当源代码中添加、删除或修改标识符时,符号表中的相关信息
也需要相应地更新。
更新符号表的过程通常涉及到在哈希表中插入、删除或修改相
03
应的条目。
03
符号表的典型实例
典型实例
编译原理课件第九章符号表

SUBROUTINE INCWAP(M,N) 10 K=M+1
M=M+4 N=K
RETURN
END
经编译头三阶段后所产生的主要表格有:符号 名表SNT、常数表CT、入口名表ENT、标号 表LT和四元式表QT
符号名表SNT
NAME (1)M (2)N (3)K
INFORMATION 哑元,整数,变量 哑元,整数,变量 整数,变量
在整个编译期间,对于符号表的操作大致可 归纳为五类:
• 对给定名字,查询名字是否已在表中;
• 往表中填入一个新的名字;
• 对给定名字,访问它的某些信息;
• 对给定名字,填写或更新它的某些信息;
• 删除一个或一组无用的项。
不同种类的表格所涉及的操作往往也是不同 的。上述五个方面只是一些基本的共同操 作。
.在符号表的信息栏中引入一个指针域(previous)用以链接它在同一过程内 的前一域名字在表中的下标(相对位置)。每一层的最后一个域名字,其 previous 之 值 为 0 。 这 样 , 每 当 需 要 查 找 一 个 新 名 字 时 , 就 能 通 过 DISPLAY找出当前正在处理的最内层的过程及所有外层的子符号表在栈 符号表中的位置。然后,通过previous可以找到同一过程内的所有被说明 的名字。
常Байду номын сангаас表CT
值(VALUE) (1) 1 (2) 4
入口名表ENT
NAME
INFORMATION
(1)INCWAP 二目子程序,入口QT(1)
/*记录入口名INCWAP的入口地址*/
标号表LT
LABLE INFORMATION
(1)10
QT(4)
/*记录了标号10对应的四元式序列号*/
M=M+4 N=K
RETURN
END
经编译头三阶段后所产生的主要表格有:符号 名表SNT、常数表CT、入口名表ENT、标号 表LT和四元式表QT
符号名表SNT
NAME (1)M (2)N (3)K
INFORMATION 哑元,整数,变量 哑元,整数,变量 整数,变量
在整个编译期间,对于符号表的操作大致可 归纳为五类:
• 对给定名字,查询名字是否已在表中;
• 往表中填入一个新的名字;
• 对给定名字,访问它的某些信息;
• 对给定名字,填写或更新它的某些信息;
• 删除一个或一组无用的项。
不同种类的表格所涉及的操作往往也是不同 的。上述五个方面只是一些基本的共同操 作。
.在符号表的信息栏中引入一个指针域(previous)用以链接它在同一过程内 的前一域名字在表中的下标(相对位置)。每一层的最后一个域名字,其 previous 之 值 为 0 。 这 样 , 每 当 需 要 查 找 一 个 新 名 字 时 , 就 能 通 过 DISPLAY找出当前正在处理的最内层的过程及所有外层的子符号表在栈 符号表中的位置。然后,通过previous可以找到同一过程内的所有被说明 的名字。
常Байду номын сангаас表CT
值(VALUE) (1) 1 (2) 4
入口名表ENT
NAME
INFORMATION
(1)INCWAP 二目子程序,入口QT(1)
/*记录入口名INCWAP的入口地址*/
标号表LT
LABLE INFORMATION
(1)10
QT(4)
/*记录了标号10对应的四元式序列号*/
编译原理第八章 符号表

• 需要做作用域分析!
8.3 名字的作用范围(Fortran)
• Fortran 局部、全局
• 执行时过程(函数)不
Name
Information
嵌套,局部区域只有一
···
局
个现行段;
···
部 • 编译时,尽管查填符号
表过程只限于局部,但
考虑到地址分配的全局
性,需将每个程序段符
号表保存在外存中,采
• 定长方式 • 间接方式 (1)名字的间接存储 (2)信息的间接存储
Name ● ●
Information
如何组织
方式
6 S A MP L E 3 S U M
Name
Information ● ●
数组信息表 维数 首地址 维1
内情向量表
··· ···
以数组为例 维n
如何组织
• 对于名称:把所有标识符都存放在一个 独立的字符串数组,主栏只放一个指示 器和一个整数(名字的长度)
var f, g: real; procedure B3(y:real) const b=5; procedure B4 … end B4 end B3
end B2 end B1
8.3 名字的作用范围 (Pascal)
top
(14)…
B4 (13)…
0
h (12)… 13
sp b (11)…
12
y (10)…
最近使用优先查找 (链头)
较难
中 排序整理 折半查找
二叉树
较难
中 构造排序树,查找时 依子树次序逼近。
杂凑(哈希
难
表)
高 杂凑函数: 名称于位置的映射 基于计算的查找。
数据结构的知识
8.3 名字的作用范围(Fortran)
• Fortran 局部、全局
• 执行时过程(函数)不
Name
Information
嵌套,局部区域只有一
···
局
个现行段;
···
部 • 编译时,尽管查填符号
表过程只限于局部,但
考虑到地址分配的全局
性,需将每个程序段符
号表保存在外存中,采
• 定长方式 • 间接方式 (1)名字的间接存储 (2)信息的间接存储
Name ● ●
Information
如何组织
方式
6 S A MP L E 3 S U M
Name
Information ● ●
数组信息表 维数 首地址 维1
内情向量表
··· ···
以数组为例 维n
如何组织
• 对于名称:把所有标识符都存放在一个 独立的字符串数组,主栏只放一个指示 器和一个整数(名字的长度)
var f, g: real; procedure B3(y:real) const b=5; procedure B4 … end B4 end B3
end B2 end B1
8.3 名字的作用范围 (Pascal)
top
(14)…
B4 (13)…
0
h (12)… 13
sp b (11)…
12
y (10)…
最近使用优先查找 (链头)
较难
中 排序整理 折半查找
二叉树
较难
中 构造排序树,查找时 依子树次序逼近。
杂凑(哈希
难
表)
高 杂凑函数: 名称于位置的映射 基于计算的查找。
数据结构的知识
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
int a=2;
B2
printf(“%d,%d\n”,a,b);
}
B0
B1
{
B3
}
int b=3; printf(“%d,%d\n”,a,b);
printf(“%d,%d\n”,a,b);
}
printf(“%d,%d\n”,a,b);
}
NULL
a b
B0的符号表
B1的符号表
b
int main() {int a=0; int b=0; { int b=1;
编译原理
第九章 符号表
第九章 符号表
在编译程序工作的过程中,需要不断收集、 记录和使用源程序中一些语法符号的类 型和特征等相关信息。这些信息一般以 表格形式存储于系统中。如常数表、变 量名表、数组名表、过程名表、标号表 等等,统称为符号表。
对于符号表组织、构造和管理方法的好 坏会直接影响编译系统的运行效率。
nametab
tx→
inxtyp eltyp elref low high elsize size
atab
n ints arrays m 1 10 10 100
m ints ints 0 1 10 1 10
ax→
三、符号表的组织
按照属性种类完全相同的那些符号组织 在一起;
把所有语言中的符号都组织在一张符号 表中;
根据符号属性相似程度分类组织成若干 张表,每张表中记录的符号都有比较多 的相同属性。
三、符号表的组织
假设有下列三类符号及其所需属性
第一类符号 属性1 属性2 属性3 第二类符号 属性1 属性2 属性4 第三类符号 属性2 属性5 属性6
第一种组织法:按属性分类
优点:管理一致,空间效率高 缺点:管理复杂
{ int a=2; printf(“%d,%d\n”,a,b);
} { int b=3;
printf(“%d,%d\n”,a,b); } printf(“%d,%d\n”,a,b); } printf(“%d,%d\n”,a,b); }
B2的符号表
a
B3的符号表
b
谢谢
四、符号表的数据结构
散列表——符号表项的位置由对该符号进行 某种函数操作所得到的函数值来确定
………………… …a…………… …………b…… …a…………… …………d…… …c…………… …………b…… ……
五、符号表与作用域
int main()
{
int a=0;
int b=0;
{
int b=1;
二、符号表的内容 例:Pascal语言的名字信息表nametab
type a=array[1..10, 1..10] of integer;
name kind typ ref
k a type arrays n
nametab
tx→
二、符号表的内容
例:Pascal语言的数组信息表atab
inxtyp eltyp elref low high elsize size 1 2
ax→
数组的数下组标元类素型类型当该元元数素素组为数下数组数数限组信组组数时息上元组, 在限素本它at的a身指b体的向表积体积 中的位置,其他情况为0
type a=array[1..10, 1..10] of integer;
name kind typ ref
k a type arrays n
一、符号表的作用和功能
收集符号属性 上下文语义的合法性检查的依据 作为目标代码生成阶段地址分配的依据
例:C语言程序段:int a; a=1;
MOV #1,R0 MOV R0,mema
词法分析:a是一个单词; 语法分析:a出现在一条变量声明语句和一条赋 值语句中;
语义分析:a是一个整形变量,并分配地址。
三、符号表的组织
假设有下列三类符号及其所需属性
第一类符号 属性1 属性2 属性3 第二类符号 属性1 属性2 属性4 第三类符号 属性2 属性5 属性6
第二种组织法:单一组织 优点:管理一致,集中单一 缺点:管理复杂
三、符号表的组织
假设有下列三类符号及其所需属性
第一类符号 属性1 属性2 属性3 第二类符号 属性1 属性2 属性4 第三类符号 属性2 属性5 属性6
二、符号表的内容
标识符的名字 与标识符有关的信息
类型信息(包括种类和属性) 地址码 层次信息 行号信息 ……
二、符号表的内容
例:Pascal语言的名字信息表nametab
name kind lev typ normal ref adr/val/size link
0 1 tx→
当组在名信程名字息序中址avs字名(类a分di为表体zclre,,类o,当字型当数中表标当的n名名 (于名名c存(种组 的s字字tbh一 名 其识字字 无贮ty为为ta类位a为p单a个 , 他 变n变的 类r符e类名 定 义b元,型 置st量量指在n为)型))布 当 情的)类 型、a名中、字主的名、可或;名n0向相m时尔名况时型的a过时的变所程层对布同以e数当,m(包,地t量字填,名程填a位量在序次一e尔是括组名填址bt入,是入类字a形入程(;中置(的的为型常他变字pbv参该对用否t序型填登中r们a;程层2r(,类量为o于urb的,体记的于为存有入型ic过其序次eoa相名过e入中数的位程依或ob标变整n应d他体为该据名时程l定o第置值)eu次不明量变所型,、情t的1)r义,名一,y量需、填e类,填名形(数p况(静的存)个每i入或时rne推主e字参贮他形组上名个tr态f,s单e们指参程是 名一字程()f元层相)a、r为在向序个e的否 时的序应r次相rf字数0代名该指a体l中应为 填i目码。ny符活字在数向k定的s变 入动规)型入组该,记量f口a录在过对地l形se数程参,
第三种组织法:折中方法
ห้องสมุดไป่ตู้
四、符号表的数据结构
线性表——符号表项按照符号被扫描到的先 后顺序登录
………………… …a…………… …………b…… …a…………… …………d…… …c…………… …………b…… ……
四、符号表的数据结构
有序表——符号表项按照符号的字符代码串 的值的大小排列
………………… …a…………… …………b…… …a…………… …………d…… …c…………… …………b…… ……