c类关系分析

上传人:缘*** 文档编号:333172507 上传时间:2022-09-01 格式:PDF 页数:71 大小:9.02MB
返回 下载 相关 举报
c类关系分析_第1页
第1页 / 共71页
c类关系分析_第2页
第2页 / 共71页
c类关系分析_第3页
第3页 / 共71页
c类关系分析_第4页
第4页 / 共71页
c类关系分析_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《c类关系分析》由会员分享,可在线阅读,更多相关《c类关系分析(71页珍藏版)》请在金锄头文库上搜索。

1、摘 要C+是在软件工业非常成功的一种程序设计语言,它包含了多种编程范式,其中包括面向对象(0 0),面向对象范式在C+中通过类与类的继承来表达。然而在大型的工程中,各种类的声明相当之多,导致他们之间的继承关系不容易分析出来,这时就需要一种工具来形象的表示这他们的关系。本文所描述的项目Class2pic的任务就是分析C+源文件中所申明的类的继承关系,并生成直观的图像。class2pic主要分3个阶段,首先,解析C+阶段;其次,抽象语法树的生成;最后,把抽象语法树转换成D ot图像语言并编译成图像。并对遇到的难题提出了解决方案。关键词:C+,继承,Y acc,抽象语法树,图像生成,DotABSTR

2、ACTABSTRACTC+is a multiparadigm programming language,which is very success in softwareindustry,one of paradigms,is Object-Orient(OO).The thinking of Object-Orient isexpressed by inherit classes.Unfortunately,there is huge number of classes in somehuge scale projects;the relationship between these cl

3、asses was complex,hard tounderstand.So,we need a visualize tool to understand that relationship.This paper describes the project named class2pic that analysis the inherit relationship between classes the C-H-source files declared and visualized image.Class2pic has three major phases,parsing C+,gener

4、ate Abstract Syntax Tree(AST),covert the AST to Dot graph programming language and compile it to the image.Meanwhile the paper lists the problems,which come up,and the solution belongs tothem.Key words:C+,inheritance,yacc,AST,image-generate,Dot目录目录第 1 章 引言.11.1 课题背景.11.2 课题的价值和意义.11.3 国内外的研究现状.11.4

5、难点、核心问题.2第 2 章 需求分析.32.1 主要任务.32.2 功能需求.32.3 性能需求.42.4 需要的技术.4第 3 章 相关知识.53.1 程序设计语言.63.1.1 C、C+语 言.63.1.2 L e x&Y a c c.63.1.3 D o t 图形编程语言.73.2 C+的类之间关系.9第 4 章 系统设计.94.1 环境和工具.1 14.1.1 F l e x.1 14.1.2 B is o n.1 14.1.3 G r a p h v iz&D o t.1 24.1.4 G N U 套件.1 34 .2 流程图.1 44 .3 模块和设计.1 44.3.1 C+解析

6、器模块.1 54.3.2图像生成模块.1 6第 5 章 C+的解析.1 65.1 C+语法的特点.1 7in目录5.1.1 命名(n a m e s).1 75.1.2声明符、声明、和类型.1 85.2 歧义文法的解析.1 95.2.1 逆歧义解析(p a r s in g a g a in s t a n a m b ig u it y).1 95.2.2无歧义解析(多遍遍历).2 05.3 回溯搜索.2 05.3.1 Y a c c 中的线性搜索.2 15.3.2 Y a c c 中的二叉树搜索.2 3第 6 章 抽象语法树.(A S T)的生成.2 76.1 抽象语法树(A S T)的结

7、构.2 76.2 A S T 的生成算法描述.2 8第 7 章 A S T 转换成D o t.3 37.1 算法.3 37.2 实现的功能.3 5第 8 章 系统测试.3 68.1 测试工具.3 78.2 测试用例.3 88.3 功能性.4 38.4 可靠性.4 3第 9 章 结论.4 49.1 已经完成的工作.4 49.2 需要改进的工作.4 4参考文献.4 4致 谢.4 6附录.4 7外文资料原文.5 0外文资料译文.5 9IV第 1章引言第1章 引 言1.1 课题背景C+是一种在软件工业中广泛应用的支持面向对象的优秀程序设计语言。C+的成功和C的成功是分不开的。因为C+中支持C89的语法

8、,所以在最早的时候,C+被人们看作是C的一种扩展。因为C的简单和高效,所以它非常适合于系统底层编程。但是随着近年来软件工程的规模不断扩大,许多新的编程思想和模型涌现了出来。C+结合这些新特性,在一直不断的发展之中。尤其是面向对象思想在C H的使用中深入人心,以面向对象的思想看待事物,他们有着共同的属性,但是却在不同程度上有所延伸,所以C+中支持了继承的类的用法。然而在大型的工程中,各种类的声明相当之多,导致他们之间的继承关系不容易分析出来,这时就需要一种工具来形象的现实这其中的关系。1.2 课题的价值和意义该课题的价值在于通过实现class2pic程序,为以C+解析器为基础的工具提供一个模式:

9、解析器解析,生成A S T,处理A ST为工具所用。其中涉及到的C+解析过程中的问题,A ST的生成和处理,并且生成其他语言过程给类似的工具制作提供一定的参考价值。1.3 研究现状C+在软件工业上的非常成功,但是C+语法的复杂使与之相关的解析工具研究工作进展比较缓慢,但是它在工业领域广泛的应用使很多公司花费很大财力去支持与之相关的工具的发展,但是他们的研究成果大多数是不公开的。下面介绍电子科技大学成都学院本科毕业设计论文儿个公开的项目:Elsa1是一个在elkhound基础上开发的C+解析器,它解析C 和 C+的输入,并把它们转换成抽象语法树。并且做一些类型检测,但是现在还不能拒绝所有不正确的

10、语法。作者是Scott McPeak1 http:/www.cs.berkeley.edu/-smcpeak/elkhound/sources/elsa/2 http:/www.gccxml.org/HTML/Indcx.htmlGCC-xml2,是在GCC的C+前端的基础上开发的工具,它把C+源代码转换成GCC内部表示形式的XML语言,因为XML语言容易解析,所以再对XML进行解析就容易的多了,这样就实现了 C+的解析并且容易构造更复杂的C+解析器。它是开源的,作者是Brad King。这两个工具在解析工具方面有相当的代表性,前者是直接用解析器生成器在解析阶段生成抽象语法树,而后者是用解析器

11、生成器产生XML语言,然后再通过解析XML文件达到解析前面语言的目的。1.4难点、核心问题 C+的ISO标准文法并不是LALR(l)语法,对于如何用yacc之类的解析器生成器语言编写BNF表达式是一个挑战(也就是如何构造C+解析器)。对于实际问题构建一个合适的抽象语法树节点结构。如何从抽象语法树生成直观的图像文件。2第 2 章需求分析第2章需求分析2.1 主要任务该项目的主要任务是通过分析C+类声明文件,生成类的关系的图形。先要把C+声明文件转换成抽象语法树(AST),然后通过一定的方法把AST转换成图像文件。2.2 功能需求图形中使用箭头表示出继承的方向,还有继承类型,以及虚继承。class

12、 a ;class b:public a int c;;class c:private a ;class d:protected c;class e:public d,public b ;则通过分析得到图2-1,其中箭头指向基类。虚线表示继承是虚继承,箭头的颜色表示继承中的访问权限,绿色表示public,黄色表示protected,红色表示private继承。由于本项目中只是要显示出类之间的关系,所以经过考察决定使用专用的流程图生成软件来解决这个问题。3电子科技大学成都学院本科毕 业设计论文图 2-12.3 性能需求由于本项目的性质和C+解析器的制作难度以及工作量,所以在性能上省略了很多需求,

13、在人感受能够允许的范围内即可。2.4 需要的技术结合以上需求分析和难点核心问题,这个课题的难点基本可以分为两个部分,C+的解析语法分析和图形的生成。程序语言的前端(文法解析)已经经历了很多年的发展,已经趋于成熟。在实践中,主要采用两种做法,手写语法分析和语法分析生成工具编写。两者都各有利弊,对于手写的语法分析工具,它的优点是方便调试,方便修改。但是缺点是工作量大,而且这些工作很多都是重复的。对于语法分析生成工具,它有书写修改方便,易懂的优点,但是也存在调试困难等缺点。在 class2pic的项目中,因为必须对C+源文件进行完全的解析,这意味着要对 17页之巨的C+文法编写规则,用语法生成工具来

14、做的话,工作量相对较小,所以选择语法生成工具制作C+解析器。4第 2 章需求分析图像的生成方面,有两种方案:1.对抽象语法树进行渲染,并对点阵图进行填充,然后再转换成其他类型。2.把抽象语法树转换成图形生成语言,然后对该语言进行编译从而生成图像。对于这两种方案,class2pic中选择第二种方案,因为第一种方案存在扩展性差,并且相对比较繁琐的缺点。由于生成图像主要是要求表示出类(class)之间的继承关系的关系图,没有必要用像素来画图像以及使用openGL之类的3 D图像库,那样做会增加不必要的复杂性,得不偿失。所以选择以一种图形语言作为中间代码,然后对它进行编译生成图像。这样做的好处是可以获

15、得更好的通用性和兼容性,并且也可以生成许多格式的图像文件。经过考察Graphviz的工具包中的dot正是用来画流程图和关系图的。所以选择dot为图形生成语言,它的语法简单,很适合用AST来生成,一次遍历就可以生成对应的语言,而且可以编译成多种图形格式,有jpg,png,svg,fig,mif,hpgl,pci,imap,cmap等9种图形格式,还可以生成PDF和PS文件。本项目也可以生成这些格式的图像。5电子科技大学成都学院本科毕 也设计论文第3章相关知识本章介绍了项目涉及到编程语言和C+中类之间关系的简单介绍,他们是本项目的基础。3.1 程序设计语言class2pic中混合了许多程序设计语言

16、,下面将大概介绍这几种语言的特性和特点,尤其是yacc和dot图像编程语言的简单语法。3.1.1 C、C+语言class2pic混合使用了 C和C+语言,C+中包含C8 9的语法,所以可以视为本程序是用C+编写。不过,确切的说是用C+编译器来编译这两种语言。3.1.2 Lex&YaccL e x和Yacc都是在70年代由贝尔实验室开发的。他们都是特意为编写编译程序和解释程序的人设计的工具,同时也对非编译程序编写人员所感兴趣的很多应用程序也非常有用。Lex和yacc程序由三部分组成:定义段、规则段、和用户程序段。定义段%规则段%用户程序段这些部分都是由两个百分号的行分开的。尽管一部分可以为空,但是前两个部分是必须的。第三部分和前面的%行可以忽略(这个结构和yacc使用的结构是相同的,其实它是从yacc的结构复制过来的。定义段包括文字块(literal block)、定义(definition)、内部表声明(internal tabledeclaration)起始条件(start condition)和转换(translation)。以空白开始的行被拷贝到C文件中。6第3章相关知识规则段包

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号