当前位置:
文档之家› 编译原理符号表的原理及典型实例
编译原理符号表的原理及典型实例
精品课件
二、符号表的内容
标识符的名字 与标识符有关的信息
类型信息(包括种类和属性) 地址码 层次信息 行号信息 ……
精品课件
二、符号表的内容
例:Pascal语言的名字信息表nametab
name kind lev typ normal ref adr/val/size link
0 1 tx→
当组在名信程名字息序▪录地▪av字名(类da中址为表体rlc,,分字型o数中表标当当类n名 (对名名的种(s组的ctt一 名 其识b字字字于h存类ya位t为为贮p,个 他na的无r符名 定 义变变单,et型置bs指在n为当布 情))量量元类类a主字 的可、、或;中n0向m名名的名尔况ae型型时时程所层相同mt以过变数当的布ea,(对字量填,的包序在次一tb是程量组名位填尔地a中括是,入类名程b入址的的为常((变字置形型登中他;否用tpv序型字参层程2量记的rr为a们;对(,,体为于uor有填b的于次序的位存ec名过i其o中相依过变标或ea整入o入第置为体应程时程db他l定该次量明不ul一,型n值)名的1变义,名re情o、,,类个每形名填e)量(t静的填时)r况、iy数(名个主推参字e或入np上态,frte组字程形他程名是指一es层参们序的rf)(序个时)否相e向为、a次在体lfr应名i中相填为该指0字r在n代。应字ak定码入变数向符y活规的s动量f组该型)入a记,口形l在过s参e数程, ▪size, 当名字为类型名时,填入精该品类课件型数据所需存贮单元的数目
二、符号表的内容 例: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
………………… …a…………… …………b…… …a…………… …………d…… …c…………… …………b…… ……
精品课件
四、符号表的数据结构
散列表——符号表项的位置由对该符号进行 某种函数操作所得到的函数值来
确定
………………… …a…………… …………b…… …a…………… …………d…… …c…………… …………b…… ……
ax→
数组的数下组标元类素型类型当该元元数素素组为数下数组数数限组信组组数时息上元组,在限素本它at的身指ab体的向表积体积 中的位置,其他情况为0
精品课件
type a=array[1..10, 1..10] of
integer;
name kind typ ref
k a type arrays n
根据符号属性相似程度分类组织成若干 张表,每张表中记录的符号都有比较多 的相同属性。
精品课件
三、符号表的组织
假设有下列三类符号及其所需属性
第一类符号 属性1 属性2 属性3 第二类符号 属性1 属性2 属性4 第三类符号 属性2 属性5 属性6
第一种组织法:按属性分类
优点:管理一致,空间效率高 缺点:管理复杂
}
精品课件
NULL
a b
B0的符号表
B1的符号表
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);
编译原理
精品课件
第九章 符号表
精品课件
第九章 符号表
在编译程序工作的过程中,需要不断收集、 记录和使用源程序中一些语法符号的类 型和特征等相关信息。这些信息一般以 表格形式存储于系统中。如常数表、变 量名表、数组名表、过程名表、标号表 等等,统称为符号表。
对于符号表组织、构造和管理方法的好 坏会直接影响编译系统的运行效率。
精品课件
五、符号表与作用域
int main()
{ int a=0;
int b=0;
{ int b=1;
{ 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);
第三种组织法:折中方法
精品课件
四、符号表的数据结构
线性表——符号表项按照符号被扫描到的先 后顺序登录
………………… …a…………… …………b…… …a…………… …………d…… …c…………… …………b…… ……
精品课件
四、符号表的数据结构
有序表——符号表项按照符号的字符代码串 的值的大小排列
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→
精品课件
三、符号表的组织
按照属性种类完全相同的那些符号组织 在一起;
把所有语言中的符号都组织在一张符号 表中;
精品课件
一、符号表的作用和功能
收集符号属性 上下文语义的合法性检查的依据 作为目标代码生成阶段地址分配的依据
例:C语言程序段:int a; a=1;
MOV #1,R0 MOV R0,mema
词法分析:a是一个单词; 语法分析:a出现在一条变量声明语句和一条赋 值语句中; 语义分析:a是一个整形变量,并分配地址。
}
printf(“%d,%d\n”,a,b);
}
B2的符号表
a
B3的符号表
精品课件
b
精品课件
三、符号表的组织
假设有下列三类符号及其所需属性
第一类符号 属性1 属性2 属性3 第二类符号 属性1 属性2 属性4 第三类符号 属性2 属性5 属性6
第二种组织法:单一组织 优点:管理一致,集中单一 缺点:管理复杂
精品课件
三、符号表的组织
假设有下列三类符号及其所需属性
第一类符号 属性1 属性2 属性3 第二类符号 属性1 属性2 属性4 第三类符号 属性2 属性5 属性6