正文描述:《c++编译器符号表有哪些内容?》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C++编译器符号表有哪些内容?很早就想写一篇关于符号表的学习小结,可是迟迟不能下笔。其一是因为符号表在编译器的设计中占有举足轻重的地位【我们在学习编译原理的时候更多的是注重principles,而没有关心一个编译器的实现,所以符号表讲解的也比较少】,编译阶段的每“遍”都会和符号表打交道,本人只做过一个MiniC的编译器的前端部分,感觉功底不够;其二是因为我想在原来C语言的基础上,增加C++语言符号表的一些知识,对于C++的符号表至今为止我还没有在Internet上找到相关的专门描述,有一本书《C++编程艺术》【英文《TheArtofC++》,侯先生将其翻译为
2、《实战C++》】中的第九章作者给出一个MiniC++的例子,但是你会发现这个例子被称为MiniC更为合适,为什么这么说?因为在MiniC++中我们不能看到它是怎么处理访问控制符,不能看到多态,不能看到继承,也不能看到虚函数等。啊,这些正是C++区别于C的部分它都没有体现出来,为什么还叫做MiniC++呢?当然如果你不了解任何一个编译器的实现方式这个例子还是值得你去实验一下,如果你没有这本书也找不到这本书的电子版,可以发邮件给我。如果文中有任何错误的地方,拜托你一定要指点我,谢谢了!符号表存储的内容有哪些?从编译器来看,符号表与编译的各个阶段都有交互,符号表的
3、内容也会在编译器的不同阶段包含不同的内容【一般来讲,在词法分析,语法分析阶段编译器都是填充符号表,在语义分析阶段更多得操作是从符号表中查询数据,当然还有删除符号表的内容】。一般来讲,符号表有内存地址和函数/变量的对应关系,编译时节点的各种属性(类型,作用域,分配空间大小,(函数)的参数类型)等。对符号表的具体使用方法每个编译器都不同。目标文件中的符号表用来输出函数/变量符号信息,供连接时给其他模块引用。这种符号表中主要包含函数/变量的名称和地址对应关系,其中的地址一般是位置无关码。【在此在推荐一本好书《Linker&Loader》,目前在网上还能找到中科大的
4、一位博士翻译的中文版本,这本书比较详细的介绍了连接器和加载器的工作原理】我们可以想象在编译器中符号表的管理使用可以分为三步:收集符号属性、根据BNF范式进行语法的合法性检查、在生成目标代码阶段使用。一、收集符号属性编译程序扫描说明部分收集有关标识符的属性,并在符号表中建立符号的相应属性信息。例如,编译程序分析到下述两个说明语句intiVar;;doublefArray[2];则在符号表中收集到关于符号iVar的属性是一个整型变量,关于符号fArray的属性是具有2个double元素的一维数组。这只是一个简单说明,我们想看一下符号表具体的数据结构。但目前我还没
5、有找到一个非常完整的描述。那么先来看一下Java的Class文件中找到一些类似存储符号表信息的方法。借鉴Java的Class文件结构下面的ClassFile结构Class文件的C语言描述【以下内容可参考《Java虚拟机规范》第四章或者网上文章《解读JavaClass文件格式》】:structClassFile{u4magic;//识别Class文件格式,具体值为0xCAFEBABE,u2minor_version;//Class文件格式副版本号,u2major_version;//Class文件格式主版本号,u2constant_pool_count;//常
6、数表项个数,cp_info**constant_pool;//常数表,又称变长符号表,u2access_flags;//Class的声明中使用的修饰符掩码,u2this_class;//常数表索引,索引内保存类名或接口名,u2super_class;//常数表索引,索引内保存父类名,u2interfaces_count;//超接口个数,u2*interfaces;//常数表索引,各超接口名称,u2fields_count;//类的域个数,field_info**fields;//域数据,包括属性名称索引,域修饰符掩码等,u2methods_count;//方
7、法个数,method_info**methods;//方法数据,包括方法名称索引,方法修饰符掩码等,u2attributes_count;//类附加属性个数,attribute_info**attributes;//类附加属性数据,包括源文件名等。};其中u2为unsignedshort,u4为unsignedlong:cp_info**constant_pool是常量表的指针数组,指针数组个数为constant_pool_count,结构体cp_info如下:structcp_info{u1tag;//常数表数据类型u1*info;//常数表数据};常数表
8、数据类型Tag定义如下:#defineCONSTAN
显示全部收起
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。