- 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…… ……