毕业设计(论文)-程序控制结构的自动分析-C语言程序基本块的划分.doc
《毕业设计(论文)-程序控制结构的自动分析-C语言程序基本块的划分.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)-程序控制结构的自动分析-C语言程序基本块的划分.doc(38页珍藏版)》请在三一文库上搜索。
1、装装 订订 线 . . . 山东农业大学 毕 业 论 文 题目: 程序控制结构的自动分析 语言程序基本块的划分 院 部 信息科学与工程学院 专业班级 计算机科学与技术 5 班 届 次 2009 届 学生姓名 学 号 20053988 指导教师 二 O 九 年 六 月 七 日 说 明 一、指导教师评语根据学生实习及撰写论文情况进行评定: 1、对待实习的态度及实习纪律的遵守情况; 2、能否准确熟练地进行观察记载、搜集整理、查阅资料及运用数据的水平; 3、能否准确熟练地进行各项操作,并运用所学知识解决实际问题; 4、能否很好地完成任务书规定的工作量。 二、评阅教师意见参照以下几方面进行评定: 1、论
2、文选题的实用性、分析的科学性和体系的完整性; 2、获取资料是否丰富,处理资料是否科学、严谨; 3、综合运用基础理论和专业知识的深度、归纳、概括及运算的能力; 4、文字表达能力,文章的逻辑性。 三、论文答辩成绩由答辩小组根据学生语言表达能力及回答问题的准确性进行评定。 四、论文综合评定成绩按优秀、良好、中等、及格和不及格五级计分。 五、毕业论文的成绩评定按照毕业论文评分标准综合评定。 六、论文由学生本人按照毕业论文(设计)规范用计算机排版、打印,一律使用统一 封面(16K) 。 七、学生的论文文本(含任务书、图片等)由学院按学校规定存档。 程序控制结构的自动分析程序控制结构的自动分析 C C 语
3、言程序基本块的划分语言程序基本块的划分 The automatic analysis of program control structure The basic block division of C programming language 山东农业大学 二九年六月 Shandong Agricultural University 专业 Speciality 计算机科学与技术 Computer science and technology 学生 Undergraduate Gong Liping 指导教师 Supervisor Vice Prof.Zhang Guangmei June,
4、2009 目 录 1 引言.1 1.1 研究的目的及意义 1 1.2 开发背景 1 2 开发工具与技术3 2.1 开发工具简介 3 2.2 开发技术简介 3 3 系统需求分析.4 4 系统设计.5 4.1 系统结构设计 5 4.2 源文件的预处理模块的设计 6 4.3 基本块的划分模块的设计 9 5 编程实现 .15 5.1 主函数 16 5.2 源文件的预处理模块的实现 18 5.3 基本块的划分模块的实现 23 6 系统测试 .27 7 结束语.30 参考文献.31 致谢.32 Contents 1 Introduction.1 1.1 Purpose and significance1
5、1.2 Development background.1 2 The tools and techniques of development.3 2.1 Tools Overview3 2.2 techniques Overview3 3 System requirements analysis .4 4 System Design.5 4.1 design of system Architecture5 4.2 design of The pretreatment of source files module6 4.3 design of Basic block division modul
6、e.9 5 Programming and Implementation15 5.1 The main function 16 5.2 Implementation of The pretreatment of source files module.18 5.3 Implementation of Basic block division module23 6 System testing27 7 Concluding remarks 30 References31 Thanks32 程序控制结构的自动分析 C 语言程序基本块的划分 2005 级计算机科学与技术五班 指导老师 【摘要】C 语
7、言是一种结构化的编程语言,基本块就是结构的内核。C 语言的控制结构主要 有顺序结构、选择结构、循环结构。主要涉及到赋值语句、if 语句、switch 语句、while 语 句、 dowhile 语句、 for 语句的分析。本文介绍了一种程序控制结构的自动分析方法和实 现过程,主要探讨了 C 语言程序基本块的划分方法,用于将 C 程序语句划分基本块,并确定各 个块间的逻辑关系,达到对 C 程序控制结构自动分析的目的。首先根据程序语句的特点,识别 程序中的基本块,构造程序控制流图中的节点;然后,根据所学的数据结构的知识,选择合适 的结构,存储识别出的基本块;并采用链式存储结构,存储各基本块之间的逻
8、辑关系。 【关键词】C 语言;控制结构;基本块 The automatic analysis of program control structure The basic block division of C programming language Gong Liping 【Abstract】C is a structured programming language,and the basic structure of block is the kernel. C control structure mainly includes sequence structure, choose s
9、tructure, and cycling structure. It mainly involves assignment statements, if statements, switch statements, while statements,dowhile statements and for statements. This paper introduces a kind of procedure control structure of automatic analysis method and the implementation process for dividing C
10、program statements , determining the basic logic relation between each block.According to the characteristics of program statements first, identify and divide the basic procedure, and construction the procedure control flow graph nodes.Then, according to the relevant knowledge of data structure, sel
11、ect the appropriate structure, and storage the identified basic blocks.Using chain store structure, storage the logical relationship between the basic blocks. 【Key words】C programming language; Control structure; Bisic block 山东农业大学学士学位论文 1 1 引言 1.1 研究的目的及意研究的目的及意义义 C 语言2是结构化的编程语言,而基本块3就是结构的内核。所谓基本块,
12、 是指程序中一顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其 中的第一个语句,出口就是其中的最后一个语句。对一个基本块来说,执行时只 能从其入口进入,从其出口退出。对基本块的了解和应用能提高我们的编程能力 和快速阅读理解程序的能力。程序控制流图4是以图形的方式描述程序控制结构 的一种形式,程序结构的划分可以帮助软件工程师更好地理解程序的结构,为程 序的测试,维护以及程序的逆向分析提供支持。 C 语言程序具有块结构以及不严谨的数据类型检查,具有自编译的特性。C 语 言是一种为 UNIX 操作系统所采用的程序语言,一种可移植性的系统程序发展语言。 C 语言所写的程序都是由函数构成,提供
13、指针及地址运算能力,允许使用动态数据 结构5。 C 语言的控制结构10主要有顺序结构、选择结构、循环结构。主要涉及到简 单赋值语句、if 语句、switch 语句、while 语句、 dowhile 语句、和 for 语句 的分析。 该程序设计的目的就是为要编译的 C 程序划分基本块,存储各个基本块中内 容及块间关系,构造程序的控制流图,并将控制流图用文本或类似图形的方式输 出。主要有以下几点应用: 1应用于学习,方便用户管理自己编写的程序,通过调用处理编译的程序使 程序控制化,找到已编译程序所存在的不足,由此对程序进行优化。另外有利于 广泛阅读别人的程序,读懂别人的程序,进而吸取别人在编程思
14、路和技巧等方面 的经验,从中改进自己的方法,提高自己的编程能力。 2应用于 C 语言开发者,程序结构的划分11可以帮助软件工程师更好地理解 程序的结构,为程序的测试,维护以及程序的逆向分析提供支持。程序控制流图 利于开发者在整个软件工程的循环操作中不断改进方法,完善自己的工作。 该研究的意义12:计算机程序设计语言一般都是提供一些基本的控制结构用以 表达程序中的控制流。程序控制流图是以图形的方式刻画程序控制结构的一种形 式,程序结构的划分可以帮助软件工程师更好地理解程序的结构,对程序的测试, 维护以及程序的逆向分析起着至关重要的作用。 本课题以 C 语言为基础,通过对程序中实用的语句特点的分析
15、,识别出程序中 所包含的基本块。并以此为基础,构造程序的控制流图,为程序的测试,维护以 及程序的逆向分析提供技术支持。 1.2 开开发发背景背景 早期系统软件13都是使用汇编语言来编写的,由于汇编语言编写不容易和难 维护,而且一般的高级语言又难于控制硬件,因此需要开发出一种能控制硬件的 高级语言来取代汇编语言,C 语言就是在这种情况下应运而生。 山东农业大学学士学位论文 2 一个 C 语言的程序主要由如下 5 部分组成:预处理命令区,全局变量声明区, 自定义函数原型声明区,主函数区和定义自定义函数主体区。 对 C 语言的源程序 进行分析,将函数体内的各种控制语句划分到相应的基本块中,达到对其控
16、制结 构进行分析的目的。 将源程序转换为控制流图1是软件工程的研究课题之一。在软件维护中,常 需对程序控制流图的分析来理解源程序和纠正源程序中的错误;在软件度量中, McCabe 程序复杂性也是通过程序控制流图来计算的。基于这方面的研究,有人提 出了一种源程序到控制流图的自动生成方法。这种方法主要是将扫描源程序并生 成程序控制流图的转换系统定义为一个抽象机 M,基于移动规则的抽象机 M 通过分 析表来实现。此种源程序分析及其控制流图的生成方法和实现技术已在 McCabe 程 序复杂性度量工具中应用并证实是可行的。该方法和技术也是软件工程领域中逆 向工程的研究内容之一,还可应用于程序分析及软件维
17、护等方面。 计算机发展迅速对编程人员的要求也越来越高。人们在编程中多看多了解一 些程序对编程人员很有作用。但在读程序源代码和理解中存在问题,很难清晰了 解程序结构和程序的优点和对一些结构的妙用。通过控制流图的构造,就能很清 晰地了解整个程序的结构,为程序的测试、维护服务。 计算机发展迅速,在我国有一支庞大的学习编程队伍。程序控制结构的分析6对 编程人员和软件工作人员有着基础指导和启发的作用,用 C 语言描述控制流图结 构能够给很多编程人员在读和写高效的程序时起到指明灯的作用。借助对程序结 构的清晰了解,编程人员能更好的优化代码,降低程序的时间和空间复杂性并从 中体验到编程的乐趣,进而提高整个编
18、程的水平。 该程序设计采用 C 语言,将要编译的 C 程序划分成基本块,用程序控制流图 的方法将这些基本块用文本或类似图形的方式输出,达到对 C 语言源程序控制结 构分析的目的。 山东农业大学学士学位论文 3 2 开发工具与技术 2.1 开开发发工具工具简简介介 本系统采用 Microsoft Visual C+6.0 开发工具7,在 Windows 平台下进行 开发。对学习或研究计算机的人来说,Visual C+是再熟悉不过了,在此只作简 单介绍。 Visual C+是目前使用最为广泛的 C+工具,Visual C+提供了一个集源程 序编辑、代码编译与调试于一体的集成开发环境。Visual
19、C+自诞生以来,一直 是 Windows 环境中最主要的应用开发系统之一。Visual C+不仅是 C+集成开发环 境,而且与 Win32 紧密相连,所以,利用 Visual C+可以完成各种各样的应用程 序的开发,从底层软件到上层直接面向用户的软件。而且 Visual C+强大的调试 功能也为大型复杂软件的开发提供了有效的排错手段。 Visual C+是一个很好的可视化编程工具,使用 Visual C+环境来开发 Windows 应用程序大大缩短了开发时间,而且它的界面更友好,便于程序员操作。 开发环境是程序员同 Visual C+的交互界面,通过它程序员可以访问 Visual C+ 源代码
20、编辑器、资源编辑器,使用内部调试器,创建工程文件。 2.2 开开发发技技术简术简介介 本系统作为一个用 C 语言编写的程序,在其设计与开发过程中用到了 3 个头 文件,分别是 stdio.h,string.h,stdlib.h 。下面介绍一下这三个头文件14的意 义和功能。 stdio.h 就是指“standard input else if() -; else -; 在此步之前,由于进行了预处理的第一步-即对行做的相关处理,所以在进 行这一步较简单。此时的 if 语句形式包含两种形式:if() -; 或 if()-;。 对 第一种不需改变,只对第二种进行操作:整行取,判断最后一个字符是否是
21、;(或 )) ,再判断此字符后是否为n ,若不是,则置为n,行数+1。 对 while 语句的处理同上。 其他几种结构基本不需要进行处理。 流程图如图 4.3: 4.34.3 各种控制结构的标准化处理流程图各种控制结构的标准化处理流程图 山东农业大学学士学位论文 9 4.3 基本基本块块的划分模的划分模块块的的设计设计 程序中各个基本块的入口语句包括三类: (1)程序的第一个语句; (2)条件转移语句或无条件转移语句的目标语句; (3)紧跟在条件转移语句后面的语句。 对于以上的每一入口语句,构造其所属的基本块。它是由该入口语句到另一 入口语句(不包括该入口语句) ,或到一转移语句(包括该转移语
22、句),或到一停 语(包括该停语句)之间的语句序列组成的。 基本块划分的核心9:一个入口一个出口。 根据程序语句的特点,识别并划分程序的基本块,构造程序控制流图的节点。 在程序控制流图中,每一个基本块对应一个结点,而基本块是由一条条指令构成, 因而我们又可将基本块的划分归结到指令的划分,应判断具体的指令属于哪个基 本块。 4.3.1 定义基本块的结构体 typedef struct CSNode int num; /基本块内语句条数 char headNMAXLINE;/块内最多有 N 条语句,每条语句最大字符数 为 MAXLINE struct CSNode *Parents;/双亲结点 st
23、ruct CSNode * FirstChild;/第一个孩子结点 struct CSNode * Nextsibling;/兄弟结点 * Blocknode; 4.3.2 基本块的具体划分 对预处理后的文件中程序语句逐行判断其关键字,若遇到 if,else if,else,while,for,switch,do 等关键字时分别调用创建子块的函数,否则调入 顺序块内,顺序块的块号为 0,所有顺序语句都在顺序块内。 (1) 顺序语句块的划分 为了编程方便,我们将一个程序中所有的顺序语句依次存储到一个基本块内, 即第一个基本块。块号始终为零,以后扫描过程中如遇到顺序语句,则将其加到 此块内,只需更
24、改块内语句条数。 (2) If 语句块的划分 将读到的此条 if 条件语句加到当前块中,相应修改块的某些参数,申请一个 新的结点作为当前块的孩子结点。取下一行,加入到新块中并且判断是否为“” 如果是,继续取语句将其加入到新块中,循环操作直到出现“” ,也将“”加入 到此块中;如果不是,退出子块建立函数。 山东农业大学学士学位论文 10 (2) Else if 语句块的划分 将读到的此条 else if 条件语句加到当前块中,相应修改块的某些参数,申 请一个新的结点作为当前块的兄弟结点,取下一行,加入到新块中并且判断是否为 “” 。如果是,继续取语句将其加入到当前块中,循环操作直到出现“” ,也
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 论文 程序控制 结构 自动 分析 语言 程序 基本 划分
链接地址:https://www.31doc.com/p-3955856.html