




已阅读5页,还剩80页未读, 继续免费阅读
(计算机应用技术专业论文)cjava自动程序转换系统原型的设计和实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 摘要 在经济快速发展的今天,人们对成本和效率有了更高的要求。为了打破平台 对用户的束缚,充分利用已有的成果,节省重新开发的费用,平台迁移或软件重 用已经变得越来越重要。 因而,源代码转换技术被广泛的运用在软件维护、遗留系统的现代化改造以 及软件逆向工程等领域中。它具有重大研究价值和经济价值,不但可以避免重复 劳动,提高软件生产的效率和质量,而且可以将大量的遗产系统转化为易演化系 统,从而充分有效地利用这些遗留系统。 本文所阐述的就是与此相关的研究。论文中详细描述了一个c j a v a 转换系 统原型的设计和实现。本文借鉴了编译系统的功能实现方法,通过该转换系统中 各个部分功能程序相应地分析和处理,逐步地对源程序的词法、语法等方面的语 言特性加以分析,将源程序代码解构为可直接进行翻译转换的语言单词符号,并 对它们进行相应地转换,最终产生出可正确运行和易于理解的目标代码。 我们在文中对现有的几种移植方法进行了分析和研究。分析表明在将程序库 移植至l j j a v a 中和将它们与j a v a 整合时,这些方法暴露出了各自的局限性和不足。 借鉴这些经验,我们制定了转换的设计原则,并遵循这些原则设计了一套有效可 行的转换规则。为了显示这种方法的可行性,我们根据设计的方案实现了一个转 换系统的原型并选择一些实例来对转换后的代码进行评价。 其中,将c 的指针转换为j a v a 的引用是从c 至l j j a v a 进行转换的一个核心问题。 基于指针的块模型,我们提供了一个改进的转换策略。实验结果表明这种方法能 产生与源代码功能等价的且易于维护的代码。 目前,我们实现的转换系统已经可以把c 语言描述的一些经典算法转换为 j a v a 程序,如最短路径算法,快速排序算法等。 本文所阐述的内容为实现异种程序设计语言的程序代码转换,提高程序代码 的可移植性和重用性提供了有意义的思路和实现方法。 关键词:转换系统:软件重用:c :j a v a ;指针:抽象语法树 c j a v a 自动程序转换系统原型的设计和实现 上海师范大学硕士学位论文 摘要 a b s t r a c t a sf a s tr i s i n gi ne c o n o m yt o d a y ,p e o p l ee m p h a s i sm o r et ot h ec o s ta n d e f f i c i e n c y i no r d e rt og e tr i do ft h ec o n s t r a i n to fp l a t f o r mt ou s e r s ,f u l l yu t i l i z et h ee x i s t i n g a c h i e v e m e n t ,s a v ee x p e n s e so fr e d e v e l o p m e n t ,p l a t f o r mm i g r a t i o no rs o f t w a r er e u s e i sb e c o m em o r ea n dm o r ei m p o r t a n t t h u s t h et e c h n o l o g yo fs o u r c ec o d et r a n s f o r m a t i o ni sw i d e l ya p p l i e do fs o f t w a r e m a i n t e n a n c e ,l e g a c ys y s t e mm o d e r n i z a t i o na n ds o f t w a r er e e n g i n e e r i n g , e t c i th a s g r e a tp r a c t i c a la n de c o n o m i cv a l u e i tc a l ln o to n l ya v o i dr e d u p l i c a t el a b o ra n d i m p r o v ee f f i c i e n c ya n dq u a l i t yo fs o f t w a r ep r o d u c t i o n ,b u ta l s oc h a n g eap l e n t yo f l e g a c ys y s t e m si n t ot h es y s t e m st h a tc a nb ee v o l v e de a s i l yi no r d e rt ou t i l i z et h e s e u s e f u lr e s o u r c ea d e q u a t e l y w h a tt h i sd i s s e r t a t i o ne x p a t i a t ei sj u s ta b o u tt h er e s e a r c h i n go ft h i st h e s i s i nt h i s d i s s e r t a t i o n ,w ed e s c r i b e dt h ed e s i g n i n ga n da c h i e v e m e n to fat r a n s l a t i o ns y s t e m p r o t o t y p ef r o mcl a n g u a g et oj a v al a n g u a g e t h ew h o l ea c h i e v e m e n t so ft h i ss y s t e m d r a wl e s s o n sf r o mc o m p i l e rs y s t e m e a c hp a r t so ft h es y s t e md o e ss o m ea n a l y s i sa n d p r o c e s s i n g ,a n a l y z i n gl e x i c a l 、s y n t a xo fs o u r c ep r o g r a ms t e pb ys t e p ,d i v i d i n gs o u r c e p r o g r a mt ow o r do rs y m b o lw h i c hc a nb et r a n s f o r m e dd i r e c t l y a tt h ee n d ,w ec a n t r a n s f o r mt h i ss o u r c ep r o g r a mt op r o d u c et a r g e tc o d eo fi d e n t i c a lr e s u l t so fe x e c u t i o n w i t he a s yu n d e r s t a n d i n g i nt h i sd i s s e r t a t i o n ,w es u r v e ya n de v a l u a t ec u r r e n ta p p r o a c h e st ot h em i g r a t i o n o fs o u r c ec o d et oj a v a t h es u r v e yo fc u r r e n tm i g r a t i o na p p r o a c h e sr e v e a l san u m b e r o ft h e i rr e s t r i c t i o n sa n dd i s a d v a n t a g e si nt h ec o n t e x to fm o v i n gp r o g r a ml i b r a r i e st o j a v aa n di n t e g r a t i n gt h e mw i t hj a v ap r o g r a m s u s i n gt h ee x p e d e n c e sf r o mt h i ss u r v e y , w ee s t a b l i s h e dan u m b e ro fg o a l sf o ra ni m p r o v e dt r a n s l a t i o na p p r o a c ha n dd e s i g n e d t h et r a n s l a t i o nr u l e sb yc l o s e l yf o l l o w i n gt h e s eg o a l s t os h o wt h ep r a c t i c a l i t yo ft h i s a p p r o a c h ,w ei m p l e m e n t e das y s t e mp r o t o t y p et h a tp e r f o r m st h e t r a n s l a t i o no n a c c o r d i n gt ot h ed e s i g n e da p p r o a c ha n de v a l u a t e di t sr e s u l tw i t hr e s p e c tt ot h eg o a l s u s i n gs e l e c t e dc a s es t u d i e s i nt h et r a n s f o r m a t i o nf r o mct oj a v a ac e n t r a lp r o b l e mi st h et r a n s f o r m a t i o no fc p o i n t e r s t oj a v ar e f e r e n c e s w ep r o v i d eai m p r o v e ds t r a t e g i ef o rt h i st r a n s f o r m a t i o n b a s e do np o i n t e rb l o c km o d e l t h ec o d er e s u l t i n gf r o me x a m i n a t i o ni sm a i n t a i n a b l e a n df u n c t i o n a u ye q u i v a l e n tt ot h eo f i g t n a tc o d e n o w ,t r a n s f o r m a t i o ns y s t e mw ei m p l e m e n t e dh a sa l r e a d yt r a n s f o r m e ds o m e t y p i c a la l g o r i t h m sd e s c r i b e db y cs u c ha ss h o r t e s tp a t ha l g o r i t h m ,q u i c ks o r ta l g o r i t h m i f oj a v ap r o g r a m t h ec o n t e n t so ft h i s p a p e re x p a t i a t eo ns o m e c o n s i d e r a t i o na n de f f e c t i v e m e t h o d so fc a r r y i n go u tt h et r a n s f o r m a t i o nb e t w e e nt h ed i f f e r e n tp r o g r a m m i n g l a n g u a g e s s o u r c ec o d e s t oi m p r o v et h e s ec o d e sc a p a b i l i t i e so ft r a n s p l a n ta n dr e u s e k e yw o r d s :t r a n s f o r m a t i o ns y s t e m ;s o f t w a r er e u s e ;c :j a v a ;p o i n t e r ;a b s t r a c ts y n t a x t r c e 上海师范大学硕士学位论文 c j a v a 自动程序转换系统原型的设计和实现 第l 章前言 第1 章前言 本章介绍论文的选题背景、研究内容和研究目标,并简介了整篇论文的结构 安排。本课题是基于上海市教委的科研项目( 编号:0 5 d z l 4 ) ct oj a v a 代码自 动转换系统。该科研项目的近期目标是实现了一个源码级的c j a v a 自动转换 系统的原型供分析和研究,远期目标是使本系统商用化。 1 1 选题背景 传统语言( 如c o b o l ,f o r t r a n 等) 从诞生到现在已有近5 0 年的历史。 现存的大量商用与科学计算程序是采用这些传统语言编写的。目前在银行、证券 和保险业中运行的程序,有许多诞生于那个时期。 据不完全统计,大约1 0 0 0 亿行代码是用传统语言编写的。由于现代语言以 其优越性替代了传统语言,很少有软件从业人员去学习和使用传统语言,因此用 这些语言编写的程序就成为了遗产代码。 遗产软件一般认为是目前正在使用的并且需要更新的软件系统,之所以称为 遗产软件是因为软件系统在使用过程中,经历了几十年的应用积累。同时近年来, 应用软件系统的规模越来越大,功能越来越复杂,从而蕴含了大量的领域知识, 包括需求设计、商业逻辑、历史数据,具有可以重复利用的价值。 当然,新系统的开发可以完全扔掉遗产软件,在零的基础上重新进行开发。 但无论在费用、开发周期、开发风险上,都会面临很大的挑战。如果利用遗产软 件资源对软件进行重用,就会明显地节约费用、缩短开发周期、降低开发风险。 软件重用可以在不同的抽象级别实现,本课题的研究是集中于面向代码的软 件重用。 2 0 0 0 年,文献 1 r e - e n g i n e e d n gl e g a c ys o f t w a r et h r o u g hl a n g u a g ec o n v e r s i o n ” 提出对遗产软件再工程的一个好的方法是将遗产代码转换成一种现代语言,即源 代码转换技术。随后几年,国内外一些公司和机构进行各种转换系统的研究和开 发。 1 1 。1 国内的研究现状 从目前公开的资料来看,在国内鲜有人从事c 到j a v a 代码转换的研究工作。 而有一些机构进行了其它语言的源代码级的转换工作的研究。 例如:c 2 j 【2 】是从c o b o l 到j a v a 翻译系统,并通过了4 0 0 万行实际商用程序 的测试。它给出了一种可靠的将o o t o 和p e r f o r m 复合语句消除的算法。文 c - - j a v a 自动程序转换系统原型的设计和实现 上海师范大学硕士学位论文 2 第1 章前言 献【3 】给出了a t l a s 语言的常规语言部分到c 语言的转换技术和实现。文献【4 1 给出了f o r t r a n 9 5 到c c + + 语言的转换和实现。文献 5 】主要研究a d a 9 5 与c + + 两 种面向对象语言之间类层次上的绑定生成方法。文献【6 7 8 】分别研究了从a p l a 到j a v a c # c + + 的转换和实现。研究目标是研制一个自动程序转换系统,该系统 能将用a p l a言描述的抽象程序转换为目前流行的j a v a c # c + + 语言程序并赢接 运行。文献【9 】介绍了一个从a d a8 3 到a d a9 5 转换系统的设计与实现,给出了 系统的总体结构。 1 1 2 国外的研究现状 国外许多工作是做j a v a 到c c # 的转换和优化,例如t o b a 1 0 1 。j l c a 1 1 是 美国公司a r t i n s o f t 的产品,它能自动完成将基于j a v a 源代码的现有语句和库调 用移植到“v i s u a lc # n e t ”上的过程。a r t i n s o f t 公司的j a v al a n g u a g ec o n v e m i o n a s s i s t a n te n t e r p r i s ee d i t i o n o l c ae e ) 承诺了百分之九十九的从j a v a 到c 聋的自动 转换,但没有透漏有关的技术。 然而,做c 到j a v a 的转换工作较少,处于起步阶段。 ( 1 ) c t oj a v a c o n v e r t e r 1 2 这个转换器是早期开发的转换工具,适用于j d k l 3 以下版本,主要缺点是产生的j a v a 代码可读性差,代码膨胀率太大。 ( 2 ) j a z i l l i a n 1 3 是今几年来开发的一个用于c 源代码到j a v a 源代码的翻译工具, 产生的j a v a 代码具有较高的可维护性和可读性,但它的转换工作受到很多限制。 1 2 研究目标 本课题研究的主要目标是研制一个将c 应用程序的源代码自动转换成具有 同等功能的j a v a 应用程序源代码,使早期开发的c 源代码得以在新的环境中使 用。自动转换系统将大量减少软件二次开发的时间和费用,具有很大的实用价值 和科学研究价值。 我们研制的自动转换系统希望能满足如下一些基本要求: 保证程序的正确性。通过这个系统转换所得的j a v a 源代码能够基本通过j a v a 编译器的编译和运行,运行的结果和原来c 源代码运行的结果能基本一致。 具有良好的程序可读性。任何软件都离不开对其自身的测试和维护,转换后的 代码应该具有良好的可读性,好像是有经验的程序员手工编写的代码,这样可以 使用户易于对它进行测试和维护。 代码膨胀率应尽量小。进行转换后的代码不可避免会发生膨胀,控制好代码膨 胀率,可以有效的提高应用软件的效率,增加它的实用性。 转换速度满意。速度和性能常是一对矛盾体,在不魉牲转换后的代码性能的前 e 海师范大学硕士学位论文 c j a v a 自动程序转换系统原型的设计和实现 第1 章前言3 提下,提高转换速度,让大多数用户可以接受。 提高代码的转换率。目前没有一种转换系统可以做到1 0 0 的代码转换,国外 一些商业公司一般做到7 0 一8 0 的程度。我们希望对代码的转换率达到可以 接受的程度,并逐步提高。 1 3 研究内容 通常以往研究的源代码转换技术主要集中在过程式语言到过程式语言,现在 由于面向对象的语言的广泛使用,选择研究从过程式语言到面向对象语言的转换 更具有实用价值。因此,我们选择经典的过程式语言c 语言和纯面向对象的语 言j a v a 语言作为研究对象。 本文主要论述的是符合c 9 9 标准的c 语言和基于j d k l 5 的j a v a 语言之间的 转换工作,并同时实现一个源码级的c j a v a 自动转换系统的原型。本论文所研 究的转换方法将适用于基于需求不变的软件平台移植过程和代码级的软件复用 过程。 c 到j a v a 的转换面临许多问题:不仅要进行语法、语义上的转换,还要从 面向过程的程序设计转换到面向对象的程序设计。 目前现有的一些d _ j a v a 转换方法中存在许多不足,例如: ( 1 ) c z i + + 1 4 t 具能将c c + + 源代码转换为语义上基本等价的j a v a 程序。但它 不能处理g o t o 语句,不能区分号是作为乘法运算符还是作为指针的间接运算符 等。 ( 2 ) n o v o s o f t 公司的c 2 j p s l - r 具解决了c z i + + 中的许多问题如g o t o 语句,但 是它的缺点是代码膨胀率太大,转换后代码的逻辑难以理解,这主要是因为它加 入了许多复杂的转换模式,这些转换模式是为了模拟c 源程序的行为表现。 而且,它将各种数据结构存储在一个巨大的数组中,避开了j a v a 的类型检查和 运行时安全检查。因此,很难与主流的j a v a 代码整合。 本文将致力于寻求一种更好的方法来解决这些问题。本文的主要工作将研究 和分析现有的一些程序转换技术,设计一套适合本课题的源代码转换规则,其中 将重点设计对c 语言中指针的转换策略。最后,实现一个源码级的c j a v a 自动 转换系统的原型,并通过选择一些不同的实例进行转换来检验和分析产生的代 码。 1 4 论文结构 本文全篇的结构如下布局: 第1 章是引言,主要介绍了进行本系统研究的背景和本文的研究内容。 c j a v a 自动程序转换系统原型的设计和实现 上海师范大学碰士学位论文 4 第1 章阿言 第2 章是介绍相关的知识,为本文的研究做准备。本文牵涉的知识很杂,包 括程序转换技术的介绍,c 和j a v a 语言的简介,以及相关的编译知识等。 第3 章阐述了影响转换系统设计的一些因素,分析了现有的转换技术和移植 策略,并对转换系统进行了总体设计。其中,阐述的设计原则将进步指导系统 的具体设计。 第4 章描述了对转换系统的具体设计,将尽可能全面的分析和设计一套有效 的转换规则,其中重点对指针的转换进行了设计和分析。这是本文最重要的部分, 也是全文篇幅最长的一章。 第5 章描述了实现的具体过程,并介绍实现工具j a v a c c 及使用的设计模式 访问者模式。 第6 章通过几个转换实例分析产生的代码,并进行扼要的描述。 第7 章在对本系统做出总结后提出了以后进一步研究的重点和方向。 上海师范大学硕士学位论文c j a v a 自动程序转换系统原型的设计和实现 第2 章相关知识准备 第2 章相关知识准备 2 1 程序转换技术简介 程序设计语言的研究包括语言的实现、语言的语义描述、语言的转换以及程 序的自动生成等内容。不同风格语言之间的程序转换,有助于研究不同语言之间 的语义关系,同时也有助于语言的实现。 程序转换技术在新型语言的实现中得到了广泛的应用。目前常用的语言实现 技术有三种:编译方式、解释方式和转换方式 1 6 1 7 1 。通常,实现一种语言有 两种方法:一种是直接设计该语言的编译器,另一种是构造一个转换系统,这个 转换系统可以把用该语言写的程序等价转换为某一已实现语言的程序,再利用这 种语言的编译器使之成为可执行代码。对于一些比较早的语言实现系统,常采用 第一种方法,因为当时的语言相对简单,而且没有比较成熟的已实现的软件编译 器可用。现在实现一种语言的主流趋势是使用第二种方法。通过转换系统实现语 言有如下好处:一、使用一种通用的语言( 如c 语言) 作为中间语言,使得系 统具有可移植性;二、简化了要实现语言的实现。由对已有成果的有效利用节约 了工作量;综合了已有系统的语义检查,可以增强语言系统的可靠性,另外不需 再重复已有编译器的优化功能。 所谓程序转换是指从一种高级程序设计语言到另一种高级程序设计语言之 间的转换。程序转换在软件的移植、重用、更新、编译等方面有重要的意义,并 且可节省大量的软件开发费用,因而受到业界的广泛关注。程序转换的目的是把 一种语言编写的程序转换为另一种语言编写的、语义等价的、可读的和容易维护 的程序。 程序转换可分为过程型语言之间的转换、描述型语言之间的转换以及描述型 语言和过程型语言之间的转换。程序转换的关键是解决程序结构的转换、类型的 转换、存储结构的转换、常数的转换等问题。程序转换的困难在于程序的可读性 差,难于理解和维护,不能充分利用目标语言的优点。由于程序设计语言多种多 样,故目前不存在一套自动的程序转换系统可以在各种语言之间进行转换。因而 进行语言转换时,需根据要实现语言的特点进行具体的处理。 源级转换是指两种高级程序设计语言间的源代码级转换,即把一种语言的源 程序转换成另一种语言的等价源程序。所谓等价,是指功能等价,即一个确定的 程序,如果每次执行前的初始状态相同,并且在执行过程中所遇到的输入相同, 则结果也相同。也就是说,在输入确定的情况下,程序执行过程中所经历的动作 序列也是确定的。在实现源级转换时,关键是找出这两种语言间的对应关系。当 对应关系能正确地确定并实现时,目标系统的性行便完全反映了源系统的性行。 c j a v a 自动程序转换系统原型的设计和实现 上海师范大学硕士学位论立 第2 章相关知识准备 现实中,人们经常需要在原有软件系统的基础上构造一个软件系统,人们把 原有系统称为遗产软件系统。新系统的构造过程如图2 - 1 所示: 程 现 图2 - 1 新系统的构造过程 如果遗产软件系统是面向过程的系统,那么人们进行面向对象再工程时将会 面对一个问题:如何分析遗产软件系统从而重用其数据处理功能? 如果系统比较 小,这个问题或许并不突出,但是如果遗产软件系统很大( 几百万行代码以上) , 能否快速而准确地分析系统将是再工程是否成功的关键。目前,通过源代码转换 来重用遗产软件成为了一种可行的有效方法。本文着重研究了从c 源代码到j a v a 源代码的转换过程,下面将简要介绍一下这两种语言。 2 2c 语言的演变和现状 1 9 8 4 年c 语言已经被广泛使用,但还没有正式的标准和精确的描述。1 9 8 9 年,c 语言建立了国际标准,1 9 9 4 年作了修订,1 9 9 9 年又作了次重大修改。 经过1 0 多年的标准化之后,已有的几百万行c 语言代码中存在了各种c 语言方 一 口口 2 2 1 传统c 语言( t r a d i t i o n a lc ) 最初的c 语言描述是出现在b r i a nk e r n i g h a l l 与d e n n i sr i t c h i e ( 通常合称为 “k & r ”) 的著作( t h ec p r o g r a m m i n gl a n g u a g e 第1 版中( p r e n t i c e - h a l l ,1 9 7 8 ) 。 此书出版后,这个语言不断有细小的演变,增加或删除了一些特性。通常,我们 把2 0 世纪8 0 年代初公认的c 语言称为传统c 语言,是标准化之前的方言。 2 2 2 标准c 语言( s t a n d a r dc1 9 凹) 1 9 8 2 年,美国国家标准协会( a n s i ) 认识到标准化将有助于c 语言在商业 化编程中的普及,因此成立了一个委员会来为c 语言及其运行库制定标准。它 上海师范大学硕士学位论文 c - - j a v a 自动程序转换系统原型的设计和实现 第二章楣关知识准各7 制定了一个标准并在1 9 8 9 年被正式采用,即美国国家标准x 3 1 5 9 1 9 8 9 ,或被称 作“a n s i c ”。 后来考虑到编程活动是国际化的,在完成a n s i c 语言之后,成立了一个国 际标准化组织i s o i e cj t c l s c 2 2 w g l 4 。w g l 4 只作了少量编辑性修改就把 a n s i 标准变成国际标准i s o i e c9 8 9 9 :1 9 9 0 。此后,我们称其为“标准c 语言 ( 1 9 8 9 ) ”或简称“c 8 9 ”。 2 2 3 标准c 语言( s t a n d a r dc1 9 9 5 ) 作为对c 语言标准的正常维护工作,w g l 4 对c 8 9 作了两处技术修订和一 个补充扩展。在对c 语言标准进行了合适的修改后得到的结果,我们称之为“c 8 9 增补1 ”或“c 9 5 ”。 2 2 4 标准c 语言( s t a n d a r dc1 9 9 9 ) 1 9 9 5 年w g l 4 开始了对c 语言标准作更大的修订和补充,于1 9 9 9 年最终完 成并获得批准。新标准i s o i e c 9 8 9 9 :1 9 9 9 取代原有的标准成为了正式的标准e 语言,我们称之为“c 9 9 ”。c 9 9 在c 8 9 c 9 5 语言和库中增加了许多新特性。c 9 9 的改动比c 9 5 更大,但改变是本着c 语言精神进行的,语言的基本性质没有改 变。 2 2 5 原始c 语言( c l e a n c ) c + + 是2 0 世纪8 0 年代初由a t & t 贝尔实验室的b j a r l l es t r o u s t r u p 设计的, c + + 本身也已经标准化为i s o i e c1 4 8 8 2 :1 9 9 8 或称为“标准c + + 语言”。标准c + + 语言可以大致看成是标准c 语言的超集。由于c 标准和c + + 标准的制定采用不 同的规范,它们之间不能相互适应,而且c 语言也一直使自己有别于c + + 。 原始c 语言( c l e a nc ) 是指标准c 和c + + 语言的公共子集部分。我们可以 用它们的公共子集编写c 语言代码,使之既可以作为c 程序编译,也可以作为 c + + 程序编译。由于c + + 的规则通常比c 更严格,因此原始c 语言有更良好的 可移植子集。 2 2 6c 语言的使用状况 c 语言的使用取决于可用的c 语言实现产品和对代码的可移植性要求。 i c 9 9 。标准c 语言当前版本。具有所有最新的特性,但支持这种新标准的实 现产品不是很多,不过这种状况会还快改变。 2 c 8 9 ,标准c 语言的上一版本。大多数c 语言程序和大多数c 语言实现产品 都是基于这个c 语言版本。 c j a v a 自动程序转换系统原型的设计和实现上海师范大学硕士学位论文 第2 章相关知识准备 3 传统c 语言,主要在维护早期c 语言程序时会用到。 4 原始c 语言,与c + + 兼容。 c 9 9 通常与c 8 9 向上兼容,c 8 9 通常与传统c 语言向上兼容。但是,很难 编写向下兼容的c 语言代码。例如,以函数原型为例,在标准c 语言中是可选 的,在传统c 语言中是禁止的,而在c + + 中是必需的。 一般情况下,我们无疑会选择使用标准c 语言作为开发语言。 2 2 7 符合性 c 语言程序和c 语言实现产品都可以符合标准c 语言。使c 语言程序严格 符合标准c 语言的条件是程序只使用那些在标准中描述过的特性和库函数,程 序的操作定不能依赖于标准c 语言中指出为未说明的、未定义的或仅在某一 特定实现中定义的c 语言特征。 符合标准c 语言的实现产品分为两种:宿主实现和独立实现【1 8 】。宿主符合 实现是指这个c 语言实现可以接受任何严格符合标准c 语言的程序;而独立符 合实现是指这个实现只接受任何不使用库函数的且严格符合标准c 语言的程序, 而且也不接受那些头文件( f l o a t h 、i s 0 6 4 6 h 、l i m i t s h 、s t d a r g h 、s t d b o o l 。h 、s t d d e f h 、 s t d i n t h ) 中提供的程序。独立符合性是为了使c 语言实现可以用于嵌入式系统 或其他只提供最基本运行环境支持的目标环境,例如,某一系统可能不包含文件 系统。另外,编译器提供商可以提供给客户非符合的扩展,可以通过开关来启用 或关闭这些扩展。 编译器提供商提供符合标准c 语言的实现产品。目前常见的编译器中,真 正支持( 2 9 9 标准的只有g c c 。首先g c c 是免费的,其次是完全遵循c 9 9 标 准,而且在多个平台下都有g c c ,这样使得跨平台移植相对方便。 由上所述,c 语言的方言较多而c 9 9 标准已逐渐成为主流,故本课题设计的 转换系统是选择基于符合c 9 9 标准( i s o i e c9 8 9 9 :1 9 9 9 ) 的c 语言,限于时间 和工作量,本文所论述的转换工作主要是针对满足独立符合性的c 语言,即几 乎很少使用库函数和头文件。并且我们假设要转换的c 源代码文件是正确的, 因此我们在转换之前需要使用g e e 对要转换的c 源代码文件进行检验,以保证 输入的c 源代码是正确有效的。 2 3j a v a 语言的特性 j a v a 语言是一门很优秀的语言,具有面向对象、与平台无关、安全稳定和多 线程等优良特性,是目前软件设计中极为健壮的编程语言。j a v a 已成为网络时代 最重要的语言之一。 上海师范大学硕士学位论文 c j a v a 自动程序转换系统原型的设计和实现 墼羔壁塑鳖二一 ! j a v a 并不是一种全新的语言,根据j a v a 语言规范的解释,j a y a 和c 有关, 但从c 转换到j a v a 的过程中存在很多重大的不同。与c 语言比较,j a v a 语言 的具有如下特点: ( - - ) 简单性 j a v a 继承了c 的语法,丢弃了其中复杂又容易引起混淆的功能,取消了c 语言的指针、# d e f i n e 语句、全局变量和函数、g o t o 语句等,并增加了错误校 验、垃圾收集和多线程支持等功能,因此j a v a 语言相对更加健壮。 ( 二) 面向对象 j a v a 抛弃了c 中的非面向对象特性,是一种完全面向对象的程序设计语言。 它除了基本类型外的其他类型都是对象。j a v a 的程序代码以类的形式组织,由类 来定义对象的各种状态和行为。c 中对数据类型,函数,变量的声明和定义可以 是分开的,而j a v a 则组织在一个源文件中。 ( 三) 分布式 j a v a 已包括支持h 1 t r p 和f 1 p 等基于t c p i p 协议的子库,因此j a v a 应用程 序可凭借u r l 打开并访问网络上的对象。j a v a 还隐藏了s o c k e t 接口,同时它使 得客户朋艮务器应用程序可以更加便于开发。而这些功能在c 语言中都没有提供。 ( 四) 内存管理和垃圾自动收集机制 在c 语言中,程序员手动分配和释放内存,再次释放已经释放过的内存块或 者未被分配的内存块都会造成系统的崩馈;同样,如果程序员忘记释放不再使用 的内存块也会逐渐耗尽系统资源。而在j a v a 语言中,内存由虚拟机自动地管理, 程序员只需分配内存。j a v a 垃圾收集器会自动进行垃圾收集,有效地防止了由于 程序员的误操作而导致的错误,而且更好地利用了系统资源。 c k ) 安全性 j a v a 在语言和运行环境中引入了多级安全措施。c 可以访问计算机的所有内 存,程序可以任意改变内存的值,这种方式会引起一系列问题。j a v a 引入了内存 保护机制,j a v a 程序只能修改被许可部分的内存的值。通过内置在j a v a 语言中 的安全特性,应用程序可以在具有一个j a v a 虚拟机的不同网络环境中自由地被 解释运行。 ( 六) 异常控制机制 c 中出错处理的任务几乎完全由编程人员来承担。编程人员必须仔细考虑 程序中可能出现的各种错误情况,并需要自行决定如何处理错误。这种完全由编 程人员进行的出错处理方式存在许多缺点。 j a v a 本身提供了许多面向对象的异常( e 【c e p t i o ) 处理,并使用“捕捉一抛出” 方式控制异常。按照这种方式,运行时系统和应用程序抛出各种标准类型的错误, 程序捕捉这些错误并进行相应的处理。这样一来,出错和异常情况处理变得比较 c j a v a 自动程序转换系统原型的设计和实现上海师范大学硕士学位论文 1 0 第2 章相关知识准各 规范,编程人员可用一致的方式对错误进行处理。 ( 七) 多线程技术 j a v a 语言支持多线程操作,而在c 语言规范中并不包含多线程的内容。通 过在程序中运用多线程技术,使得这些程序与单一线程的程序比起来性能有所提 高。 ( 八) 跨平台和可移植性 用户将c 程序移植到另外一些机器上执行时,这些程序往往会出现一些问 题。例如,如果程序不具备用于分配原始数据类型的标准,当进行原始类型转换 时,c 语言不能够指定正确的结果。而利用j a v a 语言设计出的应用程序可以在 任何一台具有一个j a v a 虚拟机的计算机上运行。与c 程序比起来,j a v a 程序更 加易于移植。 2 4 相关的编译知识 编译器是计算机应用中最常用的工具之一,它将人类所习惯的语言等价地转 换为计算机能理解的数据结构。现代编译程序都是语法制导的,语法结构的识别 是分析部分的主要内容 1 9 。分析过程通常是先由词法分析器逐一读入源程序的 字符,组成个个的单词,如标识符、数、运算符等。然后,语法分析器读入由 词法分析器输出的单词流,并由此建立源程序的语法结构。根据程序的语法结构。 语义分析器分析检查程序的静态语义。 词法分析器、语法分析器、语义分析器是编译器的基本组成。此外,高级程 序设计语言的编译器还需要中间代码生成器、中间代码优化器、代码生成器等。 但这些不是编译器必需的。如果手工完成词法分析器、语法分析器等设计工作, 将是一项非常繁重的任务。幸运的是,有很多词法分析器和语法分析器的自动生 成工具可以使用。利用这些工具不再需要费心于分析器的具体实现细节,而只需 用正规式描述单词符号的构词规则( 对于词法分析器) ,用上下文无关语法描述 语言的语法规则( 对于语法分析器) 即可,分析器的自动生成器会根据这些词法 规则和语法规则生成对应的词法分析器和语法分析器。 一个典型的编译器的工作流程如图2 2 所示: 上海师范大学硕士学位论文 c - - j a v a 自动程序转换系统原型的设计和实现 啦2 章相关知识准备 图2 - 2 典型的编译器的工作流程 从图中可以看到源程序经过扫描( s c a n n e r ) 后识别为一个t o k e n ( 单词) 序 列,解析器( p a r s e r ) 接收这些t o k e n 并进行语法分析,以获得程序的结构。解 析器对程序结构的识别是依据该语言的语法规则进行的,在语法规则中定义了该 语言所包含的元素和结构。依据语法规则对t o k e n 序列进行结构识别的过程其 实也就是推导的过程。在分析的过程中,解析器识别出程序所含有的各种构成元 素以及它们之间的关系,并把分析的结果构造为解析树( p a r s e rt r e e ) 或语法树 ( s y n t a xt r e e ) 。 我们设计的转换系统采用与编译器相似的过程,在实现过程中需要了解与此 相关的三个方面: ( i ) 词法分析 词法分析是指源文件被分解为词法符号的过程,是整个转换系统处理的第一 步。在这个阶段词法分析器阅读源程序( 通常以字符流的形式表示) ,将字符序列 收集到称为记号( t o k e n ) 的意义单元中。能够将字符串归约为符合某程序设计 语言正则表达式定义的符号,那么该字符串就能被该语言所接受。实际上,一个 扫描程序所做的工作同对单词的拼写是十分类似的。这部分主要运用正则表达式 的格式表示方式和有穷状态自动机的识别方法。 ( 2 ) 语法分析 语法分折程序从扫描程序中获取记号形式的代码,并完成定义程序结构的语 法分析,这与自然语言中旬子的语法分析类似。语法分析定义了程序的结构元素 及其关系。通常将语法分析的结果表示为分析树或语法树。语法分析的方法大致 可以分为自顶向下分析和自底向上分析两大类方法。自顶向下的语法分析方法, 顾名思义,就是从语法规则的某一个开始符号开始,依据语言的语法规则,采用 逐步推导的方式,推导出源程序段中具体的程序语言语句。丽自底向上的语法分 c j a v a 自动程序转抉系统原型的设计和实现 上海师范大学硕士学位论文 1 2 第2 章相关知识准备 析方法,就是从某一个具体的程序语言语句开始,依据语言的语法规则,采用逐 步归约的方式,归约出符合程序设计语言语法规则的某一开始符号。对于语言的 语法规则而言,推导和归约这两种语法分析工作方式,是彼此的逆过程。 r3 ) 语义分析 程序的语义就是它的“意思”,程序如何运行由它的语义来决定。大多数程 序设计语言具有在执行之前被确定的特征,这些特征不容易被语法结构表示出 来,也无法用词法分析程序进行分析,这些特征被称为静态语义。语义分析程序 就是分析这样的语义。一般程序设计语言的典型静态语义有声明和类型检查。在 程序执行阶段才能确定的程序特性称为动态语义,语义分析程序无法对这类特性 做出分析。语义分析程序还要计算被称为属性( a t t d b u t e ) 的程序固有信息,如 数据类型、值等。语义分析程序通常将计算后的属性值添加到语法树中,也可将 其添加到符号表中。 将语法树作为分析的基础结构,根据需要遍历分析语法树中各个节点,并在 节点处依照语义规则计算出各个节点具有的继承或综合属性,从而获得各个源程 序段中各个记号的属性值以及节点间的语义结构,这种由源程序的语法结构所驱 动的处理办法就是语法制导翻译法。 我们不需要象编译系统的语义分析那样进行语义检查和分析,不用生成、优 化中间代码,只是运用一些语义分析的原理和方法,来判定出各个源程序段的语 义流程,并将这些语义流程显式地标识出来。 上海师范大学硕士学位论文 c j a v a 自动程序转换系统原型的设计和实现 第3 章转换系统的基本思想和总体设计 第3 章转换系统的基本思想和总体设计 3 1 语言转换的一些经验 文献【2 0 】“t h er e a l i t i e so f l a n g u a g ec o n v e r s i o n s ”中阐述了在对遗留软件进行 现代化过程中进行源级转换面临的一些问题。他们提供了从c o b o l 到多种语言 转换的例子,并讨论了代码自动转换的可行性和局限性。文中根据在语言转换过 程中的实践经验,总结了一些重要的影响因素,有如下几点: 语言转换通常是在重要商业系统的关键部分上,所以重点必须放在转换过程 的可靠性上。 执行转换的软件工程师必须是源语言和目标语言的专家,并且能意识到在不 同语言之间转换可能出现的复杂问题。 转换后的系统不一定要和用目标语言专门开发的系统具有同样的设计。 转换一个语言特性丰富的源语言到语言特性匮乏的目标语言是相当很难的, 甚至是不可能进行的。 转换后的系统不应比原系统膨胀太多。 对于语言转换,通常遵循下面的转换过程:先对源系统进行重构使其适
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旺铺转让合同协议书
- 村民木房转让协议书
- 欺诈纠纷调解协议书
- 手机销售保密协议书
- 打印复印结账协议书
- 扶持资金监管协议书
- 楼道粉刷承包协议书
- 树木产权移交协议书
- 水库开发股份协议书
- 风景园林虚拟设计技术应用
- 康复技术考试试题及答案
- 2025年新工人入场安全培训考试试题附完整答案(夺冠)
- 血站考试试题及答案
- 炊事人员考试题及答案
- 《埃菲尔铁塔》课件
- 形象设计概论试题及答案
- (三模)南通市2025届高三第三次调研测试英语试卷(含答案解析)
- 红细胞生成素靶向治疗策略-全面剖析
- 宁夏银川市2023−2024学年高一下学期期中考试 数学试卷(含解析)
- 浙江浙达环境科技有限公司年收集、贮存及转运危险废物5000吨的搬迁项目环评报告
- 2025年留置辅警笔试真题及答案
评论
0/150
提交评论