C编译器剖析_2.5 UCC编译器的符号表管理

    这一节,我们准备初步讨论一下UCC编译器的符号表管理,与符号表管理相关的代码主要在ucl\symbol.h和ucl\symbol.c中。UCC编译器内部需要对用到的所有符号进行分类,并建立相应的数据结构来记录与符号相关的信息。图2.5.1第25行的结构体struct symbol用于记录与符号相关的信息,这些信息如图第7至23行所示。第8行的kind用于区别不同类别的符号,其取值范围如图第1至5行所示;第9行的name用于记录符号的名称;第11行的ty用于记录符号的类型,第23行的pcoord用于记录符号所在的文件位置,在调试时方便定位。其余各行的作用我们以后会结合上下文进行讨论。


图2.5.1             struct symbol

    下面,我们结合一个具体的C程序来熟悉一下UCC编译器内部对符号所做的分类,如图2.5.2所示。


图2.5.2 各种不同类型的符号

     在图2.5.2的第1至18行,是一个简单的C程序,而第20至30行是由UCC编译器产生的中间代码。结合图2.5.1和图2.5.2,我们能看到以下几种不同的符号:

(1)    结构体名Data和枚举名Color,对应的类别为SK_Tag;

(2)    由关键字typedef给已有类型int取的别名INT32,对应的类别为SK_TypedefName;

(3)    枚举常量RED、GREEN和BLUE,对应的类别为SK_EnumConstant;

(4)    常量3,对应的类别为SK_Constant;

(5)    全局变量名dt、a、b、c、d和局部变量hi,对应的类别为SK_Variable;

(6)    临时变量t0、t1和t2,对应的类别为SK_Temp;

(7)    用于访问结构体成员的dt.num2,经UCC编译器处理后,我们更关注域成员num2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值