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