编译原理符号表的原理及典型实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、符号表的内容
标识符的名字 与标识符有关的信息 类型信息(包括种类和属性) 地址码 层次信息 行号信息 ……
二、符号表的内容 例:Pascal语言的名字信息表nametab
name kind lev typ normal ref adr/val/size link
0 1 tx→
指向同一程序体中定义的上一个名字 名字所在的程序体的静态层次。规 adr, 当名字为变量名时(包括形参,存入该变量(或形参)在相应活动记录 一个布尔量,用于标明名字是否为变量形参 当名字为数组类型或数组变量名时,ref指向该数组在数 名字的类型,类型有整型(ints)、字符型 名字种类,可以是常量 名字标识符 在nametab中的位置,每个程序体在 中分类的存贮单元的相对地址;对于过程名,填入他们相应代码的入口地 定主程序的层次为1,主程序中定 名,当名字是否为变量形参名时填入false, 组信息表中的位置;当名字为过程名时,ref指向该过程 (chars)、布尔型(bool)、数组(arrays),对 址(constant)、变量(variable)、 nametab中登记的第一个名字的link 义的层次为2,依次类推 val, 当名字为变量名时,填入他们的相应值 其他情况填入true或不填 在程序体表(btab)中的位置;其他情况ref为0 于无类型的名字填入notype 为0 类型(type)、过程(procedure) size, 当名字为类型名时,填入该类型数据所需存贮单元的数目
B1的符号表
B2的符号表
b
a
B3的符号表
b
三、符号表的组织
假设有下列三类符号及其所需属性
第一类符号 第二类符号 第三类符号 属性1 属性1 属性2 属性2 属性2 属性5 属性3 属性4 属性6
第一种组织法:按属性分类 优点:管理一致,空间效率高 缺点:管理复杂
三、符号表的组织
假设有下列三类符号及其所需属性
第一类符号 第二类符号 第三类符号 属性1 属性1 属性2 属性2 属性2 属性5 属性3 属性4 属性6
二、符号表的内容 例:Pascal语言的名字信息表nametab type a=array[1..10, 1..10] of integer;
name kind typ ref
nametab
k tx→
a
type arrays
n
二、符号表的内容 例:Pascal语言的数组信息表atab
inxtyp eltyp elref low high elsize size 1 2
第二种组织法:单一组织 优点:管理一致,集中单一 缺点:管理复杂
三、符号表的组织
假设有下列三类符号及其所需属性
第一类符号 第二类符号 第三类符号 属性1 属性1 属性2 属性2 属性2 属性5 属性3 属性4 属性6
第三种组织法:折中方法
四、符号表的数据结构
线性表——符号表项按照符号被扫描到的先 后顺序登录
编译原理
第九章
符号表
第九章
符号表
在编译程序工作的过程中,需要不断收集、 记录和使用源程序中一些语法符号的类 型和特征等相关信息。这些信息一般以 表格形式存储于系统中。如常数表、变 量名表、数组名表、过程名表、标号表 等等,统称为符号表。 对于符号表组织、构造和管理方法的好 坏会直接影响编译系统的运行效率。
四、符号表的数据结构
散列表——符号表项的位置由对该符号进行 某种函数操作所得到的函数值来确定
………………… …a…………… …………b…… …a…………… …………d…… …c…………… …………b…… ……
五、符号表与作用域
int main() { int a=0; int b=0; { int b=1; { int a=2; B2 printf(“%d,%d\n”,a,b); } B1 { int b=3; B0 printf(“%d,%d\n”,a,b); B3 } printf(“%d,%d\n”,a,b); } printf(“%d,%d\n”,a,b); }
………………… …a…………… …………b…… …a…………… …………d…… …c…………… …………b…… ……
四、符号表的数据结构
有序表——符号表项按照符号的字符代码串 的值的大小排列
………………… …a…………… …………b…… …a…………… …………d…… …c…………… …………b…… ……
a
type arrays
n
inxtyp eltyp elref low high elsize size n m ax→
atab
ints ints
arrays ints
Βιβλιοθήκη Baidu
m 0
1 1
10 10
10 1
100 10
三、符号表的组织
按照属性种类完全相同的那些符号组织 在一起; 把所有语言中的符号都组织在一张符号 表中; 根据符号属性相似程度分类组织成若干 张表,每张表中记录的符号都有比较多 的相同属性。
一、符号表的作用和功能
收集符号属性
上下文语义的合法性检查的依据
作为目标代码生成阶段地址分配的依据 例:C语言程序段:int a; a=1; MOV #1,R0 MOV R0,mema
词法分析:a是一个单词; 语法分析:a出现在一条变量声明语句和一条赋 值语句中; 语义分析:a是一个整形变量,并分配地址。
ax→
数组下限 数组本身的体积 数组上限 数组元素的体积 当元素为数组时,它指向 数组元素类型 数组的下标类型 该元素数组信息在atab表 中的位置,其他情况为0
type a=array[1..10, 1..10] of integer;
name kind typ ref
nametab
k tx→
B0的符号表
NULL a
b
int main() {int a=0; int b=0; { int b=1; { 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); }