ImageVerifierCode 换一换
格式:DOCX , 页数:41 ,大小:246.06KB ,
资源ID:3573042      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3573042.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(程序框图到代码的自动转换研究.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

程序框图到代码的自动转换研究.docx

1、程序框图到代码的自动转换研究摘要 1Abstract 1第1章 引言 2第2章 程序流程图自动转换为代码的基本思想 421 基本思想 422 实现自动转换的基本步骤 4第3章 系统架构 631 硬件系统和开发平台 632 系统样式.6 3 4需求分析.7第4章 系统实现 841 系统开发环境 84.3.1 识取预处理 104.3.2 图形的操作和存储 1044 图形数据的解析与生成114.4.1 数据与关系的定义 114.4.2 关系的解析 154.4.3 代码生成算法 444.5.1 代码的编绎 484.5.2 代码的运行 4851 结果分析 4952 程序的局限性 51第6章 总结与启示

2、52致谢53程序框图到代码的自动转换研究摘要:程序框图与源代码的自动转换是软件工程领域研究的一个重要课题,有诸多不同的技术和方法。本文采用的方法是首先对程序框图之间的各种关系及其含义进行解析,将之分解为顺序执行关系、判断嵌套关系、循环嵌套关系和跳转嵌套关系,在此基础上生成一个自动转换系统。该系统包括用户接口控制模块、图形符号解析模块、代码生成模块、编译执行模块等。自动生成的仿C语言在本系统开发环境中能正确运行。关键词: 程序框图;代码;自动转换 The procedure frame diagram arrives automatic conversion research of the co

3、de The automatic conversion of the procedure frame diagram and the source code is an important topic of the software engineering realm research, also having many different techniques and method.The method of this text adoption carries on the resolution to various relation and its meanings between th

4、e procedure frame diagram first, relating to its decomposition for the in proper order performance, judgment the set relation, circulation the set relation and jump to turn a relation, born on this foundation an imitates the language system of C.This text still constructed a simple edit and translat

5、e the system, make imitate bornly the right movement of the C language ability.KeyWord:Procedure Frame Diagram; Code; Automatic Conversion;第1章 引言软件自动化是提高软件质量与生产效率的根本途径。而程序框图与源代码的自动转换则是软件开发过程中极富创造性的知识密集型活动,是软件自动化的难点和关键所在。这里包括两个方面的问题:一是程序框图转换为源代码的研究;另一个则是相反的方向,即源代码转换为程序框图的研究。目前公开报道的文献基本上是针对源代码转换为程序框图的

6、研究。这是因为,在源代码级上分析程序是软件逆向工程的基本任务,其目的是从程序文本中了解程序的高层概念,它主要用于对软件维护的支持,软件可重用知识和部件的获取,以及探测已存在的软件产品等。软件维护在软件生存周期中是最昂贵的阶段,习惯的软件维护活动占整个生存周期的5090。软件是逻辑产品,维修人员理解软件,要占用4760的维护工作量。没有自动支持,维护时间大部分被花在试图去理解被维护的对象上。理解的工作极大地依赖于对程序源代码的理解,这不仅对文档很差的软件如此,对于文档较好的软件也是如此,这是因为正向工程产生的文档不足以支持软件的维护活动。另一方面,软件重用受到越来越广泛的重视,甚至被看作软件工业

7、发达程度的标志。软件重用虽然在发达国家的很多公司中采用,但无论在理论上还是在技术上,都有许多难题需要研究解决,其中可重用知识相可重用部件的获取被认为是技术难点之一。软件的最准确的文档就是源代码文本,它是提供可重用知识相部件的丰富资源。对源程序的分析与理解能帮助人们从程序中获得一些可重用知识与部件。因此,有的专家认为,下一代的软件工程环境应当是正反向都可用的。本文研究的程序框图转换为源代码的课题即属于软件开发的正向工程。它对于提高软件生产效率和软件开发过程的标准化、程序化有着十分重要的意义。在软件详细设计中,人们常用的程序框图主要有程序流程图、盒图和问题分析图,而程序流程图是使用最为频繁的一种框

8、图,其简便、直观的特点为人们所喜好,在软件设计中有着十分重要的作用。本文具体讨论了程序流程图自动转换为一种仿C语言代码的处理方法及实现过程。 第2章 程序流程图自动转换为代码的基本思想21 基本思想实现程序流程图到源代码的自动转换,首先要解决的一个问题就是对程序流程图的理解,要理解它的逻辑结构,包括顺序、重复、分支及其控制结构。其中程序控制结构又包括程序总体结构和程序的控制流程结构。程序的总体结构描述了程序单位(过程、函数或子程序)之间的调用关系及联系信息,并以程序结构树的形式(即程序调用结构图或程序模块图)简明地刻划其慨貌,程序的控制流程结构描述的是程序单位中控制结构的传递和流向而上述结构关

9、系在流程图中基本上表现在框与框之间的连接。系统对这些错综复杂的相互关系进行分类解析,从而把流程图蕴藏的程序结构和数据流向能以源代码的方式表现出来,就好像是一种类似编译器的“流程图编译器”。通过隐藏中间过程,用户在本系统的作图环境中,画出流程图,就能通过“编译”命令来进行查错,如果无错后,能够通过“运行”命令执行,然后就能够生成源代码。这就实现了本系统的研究目标。22 实现自动转换的基本步骤1对用户所画的程序流程图,进行存储。用框结点链表将流程图中所有的框图存入,再用一个线链表将图中所有的线存入。2根据上述的框结点链表和线链表,初始化“嵌套表”,“同级表”和“关系再生表”(为实现自动转换而定义的

10、三种数结构,定义情况参看第4章),用来存储解析过程中所进行操作的记录。3按“解析”算法,逐步修改“嵌套表”、“同级表”和“关系再生表”。4建立“代码生成”算法,把“嵌套表”和“同级表”中的结果,生成仿C语言代码。5创建与系统配套的编译模块,对仿C语言代码进行编译,确保代码的正确运行。第3章 系统的总体结构31 系统结构 自动转换系统由这样几个功能模块组成:用户接口控制模块;图形符号解析模块;代码生成模块;编译执行模块。其结构如图3-1所示。 32 模块功能简析1用户接口控制模块主要功能:提供操作界面;提供画程序流程图的环境。2图形符号解析模块主要功能:根据前一个模块提供的图形对框图数据进行关系

11、解析,生成关系数据。3代码生成模块主要功能:根据图形符号解析模块提供的关系数据,生成源代码。4编译执行模块主要功能:对代码生成模块产生的源代码进行编译,执行代码程序,生成并显示结果数据。3.3 系统的数据流图分析 按照软件工程学的思想,可以在任何抽象层次上使用数据流图表示系统或软件。事实上,可以分层次分模块画出本系统的数据流图,由于受篇幅限制,本文仅简要地画出系统的0层数据流图,如图3-2所示。通过该图,读者并不难理解系统内部的数据流动状况。 第4章 自动转换系统的实现4.1 系统开发和运行环境 系统在运行的过程当中,主要进行的是图像处理,同时也要进行大量的数据处理,所以系统对处理器的要求比较

12、的高。要求CPU的主频大于400Hz,内存大于等于128MB。系统的开发环境为Windows XP + VC6.0。4. 2 系统样式本系统采用VC6.0开发,采用单文档三视图结构,具体为:用CmyDoument 做为文档专门用于数据的管理,分别用 CmyView 做为流程图画图视图,专门用于,流程图的做图,修改,和保存的功能显示于用户面前,用 CcodeView 做为代码视图,专门用于,流程图生成的代码的生成,编辑,保存的功能的显示,用CrunView 做为代码的运行视图,专门用于,代码运行后的结果显示于用户。4.3 程序流程图的识取4.3.1 识取预处理(1)流程图的图元的的定义首先为本系

13、统定义了一个Graphics(图像) 类,它是本系统给于用户所画流程图的最基本图像定义,它包含以下属性:属性 类型 作用Ltx.int (整型).本图元最左上点的 x 坐标值。Ltyint (整型).本图元最左上点的 y 坐标值。Rbx.int (整型).本图元最右下点的 x 坐标值。Rby.int (整型).本图元最右下点的 y 坐标值。Text.char *(字符串型).本图元所要显示的类容。Stateint (整型).本图元当前状态。State 为0时,表示此图元处于一般情况下;State 为1时,表示此图元处于用户选择情况下;State 为2时,表示此图元处于用户剪切情况下.State

14、 为3时,表示此图元处于用户复制情况下.State 为4时,表示此图元处于用户粘贴情况下Id .int (整型)本图元唯一标志号。用于区别其它图元。另外还定义了一些专门为这些属性服务的get和set方法,因此,Graphics的C+的定义如参看源程序中的Graphics.h文件。然后,本系统为用户提供的框图定义了Frame(框)类如下,它是继承于上面的Graphics 类的,它具有以下的新增属性:属性 类型 作用Depth int (整型)图元的深度值。就是离开始框的最近距离值。Type int (整型)框图的类型。当 Type 为 1 时,表示此框为 begin(开始)框。当 Type 为

15、2 时,表示此框为 end (结束)框。当 Type 为 3 时,表示此框为 一般框。当 Type 为 4 时,表示此框为 子函数框。当 Type 为 5 时,表示此框为 判断框。SubTextchar *(字符串型)当 Type 为4时的子函数类容。NextFrame *(框型指针).下个框对象的地址,由此构成框链表。再加上一些对上述属性的get和set方法,Frame类的C+定义参看源程序中的Frame.h文件。最后,本系统为用户提供的线图定义了 Line(线) 类如下,它是继承于上面的 Graphics 类的,它具有以下的新增属性:属性 类型 作用pTo.int (整型).此线指向某框的

16、 ID 号。pFrom.int (整型).此线从某框引出的 ID 号。Type int (整型) .此线的类型:当 Type 为 1 时,此线为一般型直线。 当 Type 为 2 时,此线为判断为真的直线 当 Type 为 3 时,此线为判断为否的直线xs.int *(整型指针)此线除起点和终结点外的中间转向点x坐标值的集ys.int *(整型指针).此线除起点和终结点外的中间转向点y坐标值的集Middleint(整型)此线除起点和终结点外的中间转向点集的个数nextLine*(线型指针)下个线对象的地址,由此构成线链表再加上对上述属性的一些set和get方法,其C+ 定义参看原程序中的Lin

17、e.h文件。以上就是用户流程图的C+定义。4.3.2 图形的操作和存储用户在CmyView 视图中,可以对用户所画的图进行相应的编辑,修改,删除,由CmyDocumet文档进行存储,另外在此视图中,还通过 Graphics 类的属性State进行剪切 , 复制,粘贴等等的操作。专门为Frame 类和Line类的各个属性设计了一个以字符串格式的存储函数。相应了也根据此格式编写了相应的打开函数。存储格式如下: . -分隔符(ltx)分隔符(lty)分隔符(rbx)分隔符(rby)分隔符 + (Depth)分隔符(Id)分隔符(State)分隔符(Text字符串长度) + 分隔符(Text)分隔符(

18、Type)分隔符(subText字符串长度) + 分隔符(subText)分隔符 类型为0 表示为 Frame .(字符串长度)开始符(存储类型) .类型为1 表示为 Line . -分隔符(ltx)分隔符(lty)分隔符(rbx)分隔符(rby)分隔符 + (Id)分隔符(State)分隔符(Text字符串长度)分隔符(Text) + (Type)分隔符(nTo)分隔符(nFrom)分隔符(Middle)分隔符 + (xs)分隔符(ys)分隔符存储格式如上所述,在CmyDocument文档类中,分别由 fHead (Frame* 类型) 和 lHead (Line* 类型) 构成框链表和线链

19、表来记录用所画的所有框和所有线,且由 fHead 和 lHead 作为接口数据传给下一模块( 流程图生成代码模块 )。44 图形数据解析生成代码4.4.1 数据与关系的定义对于任一程序流程图,都可以进行如下转换,如下:图 4-1 中除了 beign 和 end 外,其余的都通过其 ID 转换成 图 4-2。(注: ID 为 Frame 对象中的 ID 属性)而关系 ,则是各个框与框之间的连系,它是用两个整型数组记录的:int pFromnLineNumbers;.线的指出集合int pTo nLineNumbers;.线的指进集合这两个数组初始化,全用1表示。即:pFromnLineNumbe

20、rs=-1; pTonLineNumbers=-1;其中,nLineNumbers 为int(整型),它是由上个模块提供的,用户所画流程图中框图的总个数。上述的pFrom和pTo数组构成了“解析记录表”。其数据结构的特征为:在pFrom中的位置I的值x和pTo数组中位置I的值y共同表示了用户所画的程序流程图中一条线,它以一个框ID为x为起点,以另一个框ID为y为终点的直线,用 xy表示。如上图中,nLineNumbers = 3;对于任一流程图都要求用户必有一个为begin(开始)框做为开始,必有一个 end(结束)框做为结尾,对于begin框,将其ID 总用55555表示end 框,将其ID

21、总用99999表示。因此,图4-2的关系数据为:pFrom的内容为: 55555, 1 , 2 。pTo 的内谷为: 1 , 2 , 99999 。这是一个求10以内素数的算法的流程图,图4-4是图4-3转换后相应的图。pFrom=55555, 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 8, 9, 10, 11, 11, 12, 13pTo =1, 2, 3, 4, 5, 99999, 6, 7, 8, 11, 9, 11, 10, 7, 12, 13, 13, 4 在图 4-3中,有四个判断框,它们的ID分别为4,7,8,11,也就是对应在图4-4中的:4,7,8,11的椭

22、圆。同时这些 ”判断点”的主要特点是,它们都有两条线从其指出。在关系数组中,它们的体现就是:在pFrom 中,它们都会出现2次。这些点是“判断点”。同时,在图4-3中,也有四个多于一条线指进的框,它们的ID 分别为4, 7, 11, 13,也就是对应在图 4-4中的4,7,8,11的椭圆,这些点的主要特点是,它们都有多于一条线指向它们。在关系数组中,它们的体现就是:在pTo中,它们的出现次数会多于1次。这些点是“会合点”。在图4-3和图4-4的例子中,所有“判断点”和所有“会合点”的交集是:4,7,11,其中,4和7分别引领了一个循环,因此,我们称4和7是“循环点”。这种“循环点”一定是“会合

23、点”和“判断点”的交集,但是,“会合点”与“判断点”的交集并不一定就是“循环点”。另外,在图4-3和图4-4例子中,(pFrom-所有“判断点”)所有“会合点”=11,13,这些点的最大特点是,在pFrom 中只出现1次,但是在pTo中出现的次数大于1次。这些点是“会合点”。除了“判断点”,“会合点”外,那些单进且单出的点都是“普通点”。为了对关系解析的过程进行记录,引入了以下几个数组:int judgeTablenJudgeNumbersnFrameNumbers*2;其中,judgeTable专门用来存储 “判断点”的二维数组,nJudgeNumbers 为用户所画框图中“判断框”的个数,

24、nFrameNumbers 为用户所画框图的总个数。judgeTable的初始值全为1。这里的judgeTable构成在“解析算法”中用到的“嵌套表”。int sameLeverTablenFrameNumbers*2;它是用来存储相同级的点的数组,这一级与另一级别间用 0 做为间隔。如在图 4-3 与图4-4的例子中,b,1,2,3,4是同一级别,11,13是同一级别,因此,在 sameLeverTable 中就可以如下表示:sameLeverTable=55555,1,2,3,4,0,11,13,-1,-1,-1,-1,-1,-1,-1,;其中的0,是b,1,2,3,4与11,13这间的间

25、隔。而-1则是初始值,也就是暂时还没有用到的。它也构成在“解析算法”中用到的“同级表”。int gotoTablenFrameNumbers*2;这是一个用来记录某些“判断点”后用了goto语句的数组。它也是用0来作分隔的。int allTablenFrameNumbers*2;这是一个为“合点”和“循点”进行关系解析时,各框之间关系发生改变时,记录改变,构成了“解析算法”中的“关系再生表”。int FromnLineNumbers;.线的指出集合int TonLineNumbers;.线的指进集合这两个用来存储最先的框与框之间的直达关系。它们的值也就是最初的 pFrom和pTo数组的值。所谓

26、的“直达关系”,如图4-3和图4-4中,b与1,2与3,3与e之间就是直达关系。 int nFlag_A有无“化简”操作的标志。 int nFlag_I.有无“添加”操作的标志。 这两个整型变量,初始值都为0,一旦分别进行了“化简”和添加操作后,则分别置其值为1和1,以方便后面的检测,详细用法在下面详释。4.4.2 关系的解析解析的目标: 对应于pFrom和pTo数组中的内容为:pFrom:55555, x,y 解析 55555,.pTo: x, , a99999 - 99999,.当pFrom中位值为55555的位置I,如果pTo中位置I 的值为99999时,就表示解析成功了。以下为了方便,

27、均用“b”代替pFrom中的55555,用“e”代替pTo中的99999,但是实际在存储中还是用55555表示begin,99999表示 end,特此说明。下面描述解析算法:第一,进行一些解析前的预处理,步骤如下: 根据 lHead (线链表),给 pFrom 和 pTo 赋初值。 将 pFrom 的值赋给 From 数组中去,将 pTo 的值赋给 To 数组中去,至此,From 和 To这两数组中记录了最初的框与框之间彼此间直接的关系。 将所有的“判断点”的ID存入judgeTable中,具体做法是:for( int I=0 ;I(“判断点”的总数);I+)judgeTableI0= (“判

28、断点”的 ID ) ; 分别置 nFlag_A和nFlag_I都为0。即: nFlag_A=0; nFlag_I =0;第二,进行解析处理。其步骤如下:1覆盖。(对应于程序中的 void C();)这是第一个关系化简操作,它是一个级别分层的操作。“分层”,也就是“嵌套”与不存在“嵌套”的化分,如在 if(bool) /do ; 和 while(bool) / do ; 中就存在嵌套关系。覆盖 操作的目标是将所有的“普通点”用层的关系进行解析,具体的含义就是:如图4-5和图4-6所示。pFrom: 55555, 1, 2 pTo :1 , 2 , 99999 b 覆盖1后结果如下:55555,

29、2, -1 2 , 99999, -1同时,sameLeverTable 应进行记录,其值修改为:55555, 1,-1,-1,pFrom:55555, 2, -1 pTo : 2, 99999, -1 b覆盖2后的结果如下: 55555, -1, -1 99999,-1, -1 同时,sameLeverTable 应进行相修改,其值为:55555,1,2,-1。那么,覆盖的详细算法如下:1 找到一个“普通点”,此点的ID 为x(如在图3)和图4)中的ID为1的点),找出其在pTo中的位置 i,在C+中,必有 *(pTo+i)=x 的条件式为“真”。由此得到 *(pFrom+i) ,设其值为y

30、。如果y等于55555,即为Begin 框,在sameLeverTable中进行相应的修改,如果sameLeverTable0等于-1,则sameLeverTable0=55555,sameLeverTable1赋值为x,sameLeverTable2=0。否则,在sameLeverTable中,找一位置k,使sameLeverTablek=55555为“真”,然后在位置k后,找到第1次出现sameLeverTable中出现值为0的位置,然后,在此位置“插入”x。如果ID为y点是个“合点”,找一位置j,使*(pFrom+j)=y的条件式为“真”,将pTo 表中位置为i的值设为pForm中位置为j的值,即*(pFrom+i)=

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1