买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】用于传统程序语言向现代程序语言转换的方法及其系统_深圳四方精创资讯股份有限公司_201711009889.X 

申请/专利权人:深圳四方精创资讯股份有限公司

申请日:2017-10-25

公开(公告)日:2020-10-16

公开(公告)号:CN107861728B

主分类号:G06F8/51(20180101)

分类号:G06F8/51(20180101)

优先权:

专利状态码:有效-授权

法律状态:2020.10.16#授权;2018.04.24#实质审查的生效;2018.03.30#公开

摘要:本发明涉及用于传统程序语言向现代程序语言转换的方法及其系统,该方法包括获取需要转换的COBOL源码以及对应的配置规则;将COBOL源码按照对应配置规则转换生成相应的JAVA源码;对JAVA源码配置基础环境。本发明通过加载配置文件,对需要转换的CoBol源代码进行转换,转换为Java源代码,针对转换后的Java源代码利用SDK进行数据类型封装以及方法接口的基础环境配置,采用基础平台进行联机交易处理,实现全面支持COBOL语法转换,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值处理,转换后实际运行效率高,可维护性好且能降低维护成本。

主权项:1.用于传统程序语言向现代程序语言转换的方法,其特征在于,所述方法包括:获取需要转换的COBOL源码以及对应的配置规则;将COBOL源码按照对应配置规则转换生成相应的JAVA源码;对JAVA源码配置基础环境;获取需要转换的COBOL源码以及对应的配置规则的步骤,包括以下具体步骤:加载配置文件,读取配置文件内的配置数据;根据配置数据读入需要转换的COBOL源码;加载配置文件,读取配置文件内的配置数据的步骤中,所述配置数据包括配置参数、转换模板信息以及运行参数;将COBOL源码按照对应配置规则转换生成相应的JAVA源码的步骤,包括以下具体步骤:根据COBOL关键字、CICS关键字以及SQL关键字对COBOL源码进行逐行代码解析,生成语法分析文件;分析语法分析文件中语法关键字,生成语法树;对语法树进行对应语法转换,生成目标代码Map数组;根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件;将转换过程写入转换日志;对语法树进行对应语法转换,生成目标代码Map数组的步骤,包括以下具体步骤:将语法树内的COBOL命名的变量按照驼峰命名法转换为JAVA变量名;对语法树的语句进行转换,结合JAVA变量名,形成目标代码Map数组;根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件的步骤,包括以下具体步骤:将目标代码Map数组内的COBOL程序数据部数据项定义将转换成JavaBean,并生成get、set及initalize方法;将数据部中的COPYBOOK转换生成单独的JavaBean;对COBOL程序过程部转换成TxnHandler类,过程部中段转换成对应的JAVA方法,并根据配置文件对程序流程进行重组;对JAVA源码配置基础环境的步骤,包括以下具体步骤:对JAVA源码进行数据类型的封装;配置JAVA源码运行所需的方法接口;具体的,转换的JAVA代码使用的是Union系列实现类数据,包含了指针、压缩型、数字型、字符型的COBOL的数据类型;数据类型的封装过程中,MutableField抽象接口类作为数值和字符类型对应变量的基础类,MutableField抽象接口类抽象出数字和字符类型的对应变量的三种方法包含setgetlength;设计MutableData抽象接口类作为组合变量的基础类。

全文数据:用于传统程序语言向现代程序语言转换的方法及其系统技术领域[0001]本发明涉及程序语言转换方法,更具体地说是指用于传统程序语言向现代程序语言转换的方法及其系统。背景技术[0002]传统程序语言向现代高级程序语言转换一直是计算机编译领域重要的研究方向。[0003]COBOL作为专门为商业数据处理而设计的面向过程的计算机高级程序语言,从诞生到现在已近有50多年历史,目前仍然广泛应用于银行、证券和制造行业等非常重要的商业数据处理领域,据不完全统计,全球500强中有492家包括全部的100强使用了COBOL语言,目前在COBOL方面的投资已经超过3万亿美元,用COBOL书写的程序超过了2000亿行,目前COBOL语言开发的系统存在以下的局限性:一是由于当前互联网的发展,日常交易数据处理乘倍增加,而传统COBOL开发的系统已很难满足业务数据处理需求,但由于COBOL语言相对比较古老,很难通过集群技术支持未来业务量的增加;二是由于COBOL作为传统程序语言,存在诸多局限性,导致使用学习COBOL的编程人员相对较少,从而导致现有巨大COBOL系统维护压力增加,很难在现有系统进行开发满足业务需求的发展;三是COBOL主要运行IBM的主机ZOS或AIX系统环境下,使用的硬件多为IBM大型机或中小型服务器,无法像JAVA—样支持跨平台迀移。因此由传统COBOL系统升级转换为集群开放式框架的系统会是未来发展的一个趋势,而JAVA作为目前主流的面向对象的现代高级程序语言,具有跨平台性,分布性等优势,因此,目前大部分COBOL都转换为JAVA加以使用。[0004]而目前大部分的COBOL转JAVA工具只支持了简单的COBOL语法转换,对于较复杂的语法支持不够完善,如CICS指令、COBOL函数、数据库及文件的操作;对于COBOL数据计算,当前的转换工具容易造成精度丢失;由于COBOL语言作为传统面向过程语言,具有一定的独特性,很多的处理是建立在对内存的操作上,而JAVA语言是作为面向对象语言,较难真正实现COBOL的重定向、指针赋值等处理,所以目前的转换工具主要是模拟COBOL程序的实现,从而导致转换后的代码的实际运行效率并不高;转换工具转换后的JAVA代码,在某种程度上来说更类似COBOL代码,程序的可维护性比较差;在修改或新增加代码时,需遵循原来JAVA模拟COBOL的规则,这样需要开发维护人员需同时掌握COBOL和JAVA语法,从而导致转换后的系统维护难道增加,维护成本提高。[0005]因此,有必要设计一种用于传统程序语言向现代程序语言转换的方法,实现全面支持COBOL语法转换,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值等处理,转换后实际运行效率高,可维护性好且能降低维护成本。发明内容[0006]本发明的目的在于克服现有技术的缺陷,提供用于传统程序语言向现代程序语言转换的方法及其系统。[0007]为实现上述目的,本发明采用以下技术方案:用于传统程序语言向现代程序语言转换的方法,所述方法包括:[0008]获取需要转换的COBOL源码以及对应的配置规则;[0009]将COBOL源码按照对应配置规则转换生成相应的JAVA源码;[0010]对所述JAVA源码配置基础环境。[0011]其进一步技术方案为:获取需要转换的COBOL源码以及对应的配置规则的步骤,包括以下具体步骤:[0012]加载配置文件,读取配置文件内的配置数据;[0013]根据配置数据读入需要转换的COBOL源码。[0014]其进一步技术方案为:加载配置文件,读取配置文件内的配置数据的步骤中,所述配置数据包括配置参数、转换模板信息以及运行参数。[0015]其进一步技术方案为:将COBOL源码按照对应配置规则转换生成相应的JAVA源码的步骤,包括以下具体步骤:[0016]根据COBOL关键字、CICS关键字以及SQL关键字对COBOL源码进行逐行代码解析,生成语法分析文件;[0017]分析语法分析文件中语法关键字,生成语法树;[0018]对语法树进行对应语法转换,生成目标代码Map数组;[0019]根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件;[0020]将转换过程写入转换日志。[0021]其进一步技术方案为:对语法树进行对应语法转换,生成目标代码Map数组的步骤,包括以下具体步骤:[0022]将语法树内的COBOL命名的变量按照驼峰命名法转换为JAVA变量名;[0023]对语法树的语句进行转换,结合JAVA变量名,开$成目标代码Map数组。[0024]其进一步技术方案为:根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件的步骤,包括以下具体步骤:[0025]将目标代码Map数组内的COBOL程序数据部数据项定义将转换成JAVABean,并生成get、set及initalize方'法;[0026]将数据部中的COPYBOOK转换生成单独的JAVABean;[0027]对COBOL程序过程部转换成TxnHandler类,过程部中段转换成对应的JAVA方法,并根据配置文件对程序流程进行重组。[0028]其进一步技术方案为:对所述JAVA源码配置基础环境的步骤,包括以下具体步骤:[0029]对JAVA源码进行数据类型的封装;[0030]配置JAVA源码运行所需的方法接口。[0031]本发明还提供了用于传统程序语言向现代程序语言转换的系统,包括获取单元、转换单元以及配置单元;[0032]所述获取单元,用于获取需要转换的COBOL源码以及对应的配置规则;[0033]所述转换单元,用于将COBOL源码按照对应配置规则转换生成相应的JAVA源码;[0034]所述配置单元,用于对所述JAVA源码配置基础环境。[0035]其进一步技术方案为:所述获取单元包括加载模块以及读入模块;[0036]所述加载模块,用于加载配置文件,读取配置文件内的配置数据;[0037]所述读入模块,用于根据配置数据读入需要转换的COBOL源码。[0038]其进一步技术方案为:所述转换单元包括代码解析模块、语法树生成模块、目标代码生成模块、目标文件生成模块以及写入模块;[0039]所述代码解析模块,用于根据COBOL关键字、CICS关键字以及SQL关键字对COBOL源码进行逐行代码解析,生成语法分析文件;[0040]所述语法树生成模块,用于分析语法分析文件中语法关键字,生成语法树;[0041]所述目标代码生成模块,用于对语法树进行对应语法转换,生成目标代码Map数组;[0042]所述目标文件生成模块,用于根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件;[0043]所述写入模块,用于将转换过程写入转换日志。[0044]本发明与现有技术相比的有益效果是:本发明的用于传统程序语言向现代程序语言转换的方法,通过加载配置文件,对需要转换的COBOL源代码进行转换,转换为JAVA源代码,针对转换后的JAVA源代码利用SDK进行数据类型封装以及方法接口的基础环境配置,采用基础平台进行联机交易处理,实现全面支持COBOL语法转换,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值处理,转换后实际运行效率高,可维护性好且能降低维护成本。[0045]下面结合附图和具体实施例对本发明作进一步描述。附图说明[0046]图1为本发明具体实施例提供的用于传统程序语言向现代程序语言转换的方法的流程图;[0047]图2为本发明具体实施例提供的用于传统程序语言向现代程序语言转换的系统的结构框图;[0048]图3为本发明具体实施例提供的用于传统程序语言向现代程序语言转换的系统的架构图;[0049]图4为本发明具体实施例提供的生成目标文件的规则框图;[0050]图5为本发明具体实施例提供的TxnHandler模板的流程段示意图;具体实施方式[0051]为了更充分理解本发明的技术内容,下面结合具体实施例对本发明的技术方案进一步介绍和说明,但不局限于此。[0052]如图1〜5所示的具体实施例,本实施例提供的用于传统程序语言向现代程序语言转换的方法,可以运用在传统高级程序语言COBOL向现代高级程序语言JAVA的转换过程中,实现全面支持COBOL语法转换,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值等处理,转换后实际运行效率高,可维护性好且能降低维护成本。[0053]如图1所示,本实施例提供了用于传统程序语言向现代程序语言转换的方法,该方法包括:[0054]SI、获取需要转换的COBOL源码以及对应的配置规则;[0055]S2、将COBOL源码按照对应配置规则转换生成相应的JAVA源码;[0056]S3、对所述JAVA源码配置基础环境。[0057]更进一步地,在某些实施例中,上述的Sl步骤,获取需要转换的COBOL源码以及对应的配置规则的步骤,包括以下具体步骤:[0058]SI1、加载配置文件,读取配置文件内的配置数据;[0059]S12、根据配置数据读入需要转换的COBOL源码。[0060]对于上述的Sll步骤,加载配置文件,读取配置文件内的配置数据的步骤中,所述配置数据包括配置参数、转换模板信息以及运行参数。[0061]对于上述的配置参数,包括系统参数、转换配置参数以及转换规则参数,其中,系统参数主要包括日志文件目录,转换规则及模板配置目录等系统运行相关参数;转换配置参数主要包括转换程序名及程序类型,源码目录及目标目录等参数;转换规则参数主要包括语法关键字转换规则,程序流程转换规则配置等参数。[0062]对于上述的S12步骤,具体是根据转换配置参数读取待转换的COBOL源码,主要包括Onlie、Batch、CalIed、CopyBook文件。如COBOL源码内有COPY或INCLUDE语句,则再读取相应的COPYBOOK文件进行语法分析。[0063]更进一步地,在某些实施例中,上述的S2步骤,将⑶BOL源码按照对应配置规则转换生成相应的JAVA源码的步骤,包括以下具体步骤:[0064]S21、根据⑶BOL关键字、CICS关键字以及SQL关键字对⑶BOL源码进行逐行代码解析,生成语法分析文件;[0065]S22、分析语法分析文件中语法关键字,生成语法树;[0066]S23、对语法树进行对应语法转换,生成目标代码Map数组;[0067]S24、根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件;[0068]S25、将转换过程写入转换日志。[0069]对于上述的S21步骤,具体是根据COBOL语法及关键字规则分析COBOL源码,生成语法分析文件,如COBOL源码不符合解析规则,则提示相应错误信息记录日志文件。[0070]对于上述的S22步骤,根据对语法分析文件中的语法关键字分析生成语法树文件,语法树文件为XML文件,每个COBOL源代码文件对应一个语法树文件。[0071]对于上述的S23步骤,对语法树进行对应语法转换,生成目标代码Map数组的步骤,包括以下具体步骤:[0072]S231、将语法树内的COBOL命名的变量按照驼峰命名法转换为JAVA变量名;[0073]S232、对语法树的语句进行转换,结合JAVA变量名,形成目标代码Map数组。[0074]对于上述的S231步骤,若变量以数字开头,则添加前缀符号$,变量转换中使用到了Backing对象和Segment对象,Backing对象为JAVA封装好的一段Byte缓存数组,初始构造Backing对象时需要指定申请的缓存数组长度,Segment则是封装好的一段指向Backing对象的缓存数组一段数据的对象,构造时需要指定Backing对象、Backing对象的偏移位置、缓存的长度值三个要素。[0075]变量转换可分为普通变量和组合变量转换两大类,对于普通变量类型的转换过程如下:根据COBOL定义变量代码在变量所属实现类的变量定义处声明相应类型的Mutable抽象类变量;根据所属实现类当前Byte缓存数组的偏移量自动计算当前变量所对应的偏移量相对位置;在变量所属实现类中的构造方法中添加对应变量所属类型的Union对象代码;在变量所属实现类中的初始化方法中initialize〇添加对应变量初始化方法代码。组合变量转换过程如下:每个组合变量对应一个UnionData的组合类,首先在该组合变量所属实现类的变量定义区声明该组合变量,类型为MutableData;在该组合变量所属实现类内部定义该组合变量类的实现框架,该类继承自UnionData类,构造方法包含一段Byte数组缓冲区对象Backing对象,以及该类对于Backing对象的Offset偏移量两个参数;在该组合变量所属类的构造方法中添加该组合变量的实现代码,即生成对应类的UnionData对象,在转换时会自动计算出当前组合变量所对应的Offset偏移位置,若变量为Redefines重定向指向,根据重定向指向的变量对应的Offset偏移位置设置偏移量;若该组合变量还有对应的子变量,则在该组合变量的定义变量区也声明相同的变量,并在该实现类的构造方法中通过该组合变量引用赋值到子变量;在所属实现类的初始化initialized中,添加该组合类对象的initialize。方法。[0076]举个例子,该例子包含了组合变量嵌套、字符变量、无符号数字变量、有小数位有符号数字变量、Comp和Comp3压缩型数字变量、88层变量、Redefinces重定向等。[0077]COBOL代码如下:[0078][0079][0080][0081][0084]对于上述的S232步骤,具体包括赋值语句、算数计算语句、关系运算、逻辑运算、流程控制语句、CICS指令、文件操作、内部函数以及数据库操作等语句的转换,实现对COBOL语言的全面支持,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值等处理。[0085]对于上述的赋值语句的转换而言,COBOL中赋值语句主要是MOVE语句,转换工具根据不同的数据类型,在赋值时均采用JAVA的GetSet方法进行取值赋值,同数据类型之间赋值遵循COBOL赋值规则,COBOL中MOVE语句支持不同数据类型间的赋值,转换工具检查当源数据类型与目标数据类型不一致,需要将取出值的类型转换为与源数据类型相符的数据类型,如将字符型变量通过Get方法获取到字符后再转为数值型数据后,再赋值给数值型变量。若转换的数据类型不匹配,则JAVA编译器会提示报错。[0086]对于上述的算数计算语句转换而言,COBOL中的算数计算语句⑶MPUTEADDSUBTRACTMULTIPLYDIVIDE转换成JAVA算数运算,封装了各种计算式的实现方法,支持COBOL各种数字类型的计算,底层使用BigDecimal进行计算,保证精度不丢失。[0087]对于源码中相同数据类型的关系运算转换成JAVA关系运算,而不同类型的关系运作则转换成封装的的关系运算方法,封装的方法根据数据类型不同进行了重载,确保关系运算结果一致。[0088]对于COBOL中的逻辑运算转换成JAVA中的逻辑运算,转换后的逻辑运算顺序及结果保持一致。[0089]COBOL中的流程控制语句主要有IF、EVALUATE和PERFORM,其中IF和EVALUATE语句将转换成JAVA的if,而PERFORM则通过JAVA的for或whiIe实现循环处理。根据对应的CICS指令转换规则转换成对应的基础平台调用接口。VSam文件转换为数据库操作,而QSam文件则转换为JAVA的10对文件进行操作。COBOL中日期、数学、字符、财务等函数将转换成SDK中对应的方法。[0090]使用基础平台提供的Accessor数据库操作对象进行数据库操作,该对象可在平台级提供数据库操作的原子交易完整性,批量交易使用SDK提供的JAVADB模块的Accessor对象进行数据库操作,底层使用Jdbc数据库操作,平台的数据库操作使用数据库缓冲池,COBOL嵌入的SQL语法直接转为JAVA的Sql嵌入语法,单个数据表操作使用DaoService封装的Dao对象,提高安全性和易用性,更接近于JAVA的编码规范。[0091]举个例子,COBOL代码如下:MOVEACTF-CE^ACNOTODTL-CES-AGNQMOVEWK-ACTF-DATETODTL-TXN-DATEMOVEWK-DTL-REF-NOTODTL-REF-NOEXECSQLSELECTDTL_CES_ACNO,DTL_TXN_DATE,DTL_REF_N〇,[0092]DTLTXNNET,DTL_TXN_TERM,DTL_TXN_TELLER,DTLTXNSUPER,BTLJTXNJTELJiAME:,DTLTXNSUPNAME,一_一.,DTL—STATUS[0100]更进一步地,在某些实施例中,上述的S24步骤,根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件的步骤,包括以下具体步骤:[0101]S241、将目标代码Map数组内的⑶BOL程序数据部数据项定义将转换成JAVABean,并生成get、set及initalize方法;[0102]S242、将数据部中的COPYBOOK转换生成单独的JAVABean;[0103]S243、对COBOL程序过程部转换成TxnHandler类,过程部中段转换成对应的JAVA方法,并根据配置文件对程序流程进行重组。[0104]上述的S241步骤S243步骤,JAVABean为用Java所编写的可重用组件,依据不同转换模板信息生成不同的目标文件,如图4所示,在生成目标文件同时根据不同的流程模板及配置对生成的程序进行流程重组,目前支持的程序流程模板主要分为以下六种:查询类程序无数据更新)、非金融类程序有数据更新)、金融类程序有账务处理)、批量程序、子程序,上述的查询类程序无数据更新)、非金融类程序有数据更新)、金融类程序有账务处理属于联机程序。将COBOL代码中的各段转换成为JAVA具体是通过读取配置参数将转换后方法转换到既定流程中,以TxnHandler模板为例,提供的流程段如图5所示,在配置相关流程段参数后,把COBOL转换来的相应流程段分派到图中模板所对应的8个流程方法中。实施例如下为:COBOL定义TXN-INITIAL-RTN.段,配置参数将其分配到initial流程方法中,工具自动转换JAVA代码如下:[0105][0106]对于上述的S25步骤,具体是根据转换过程和步骤输出转换日志,日志分为Info、Warning、Erro;r不同级别,为后续对转换过程进行跟踪分析提供依据。[0107]更进一步地,在某些实施例中,上述的S3步骤,对所述JAVA源码配置基础环境的步骤,包括以下具体步骤:[0108]S31、对JAVA源码进行数据类型的封装;[0109]S32、配置JAVA源码运行所需的方法接口。[0110]对于上述的S3步骤,具体是由SDK提供转换后JAVA代码运行所需的方法接口、数据类型定义等必须的基础环境,转化后的JAVA程序需运行在SDK上。[0111]对于上述的S31步骤,转换的JAVA代码使用的是Union系列实现类数据,包含了指针、压缩型、数字型、字符型等COBOL的数据类型。数据类型的封装过程中,MutableField抽象接口类作为数值和字符类型对应变量的基础类,该类包含三个方法setgetlength;设计MutableData抽象接口类作为组合变量的基础类。Union系列实现类继承MutableField抽象类数据并模拟实现COBOL的各种类型变量数字型字符型压缩型指针型),Union系列实现类均指向一段Byte数组缓存区数据来存储当前变量实际数据,实现对应的setgetlength方法从Byte缓存中获取或设置数据;设计UnionData类继承MutableData接口模拟实现COBOL的组合变量定义,构造UnionData类时需要指定该组合变量类对应的Byte缓存数组并且指定对应缓存数组的Offset位置。Basic系列实现JAVA原生态的变量类型,主要实现了字符型BasicMutableAlphabet、数字型BasicMutabIeNumeric两种数据类型的封装,Basic系列的数据类型可在业务扩充或手动新编写JAVA代码时使用,并通过上一层Mutable的抽象父类来对接转换后的原有COBOL数据类型。[0112]对于上述的S32步骤,COBOL程序中大部分语句转换成JAVA原生态原句,对于部分语句需要通过方法接口实现,比如:COBOL联机程序中的ClCS指令;COBOL程序中日期、数学、字符、财务等函数;提供的DBAccess对象及方法进行数据库操作。[0113]另外,在SDK为JAVA源代码提供基础环境的过程中,由基础平台作为联机交易处理平台,为JAVA源代码所对应的应用程序提供了所有运行时事务服务,转换后的联机程序需运行在基础平台上,由基础平台驱动,基础平台使用Scala语言+Akka开发,应用程序使用JAVA语言开发,运行在JAVA虚拟机上,具备跨平台特性;使用AkkaStream技术强调异步处理、非阻塞交易、变量不变性等特性,在处理高并发任务的同时保证多线程的安全性;使用集群架构,提供7X24小时服务,方便硬件扩充,提升系统处理能力;提供例外处理、并发控制及日志处理机制,保证可靠性。转换后的JAVA源代码运行的SDK环境和基础平台用Scala语言开发,且转换后的源代码更接近原生态JAVA源代码,执行效率更高;转换后的JAVA源代码符合目前JAVA的主流编码规范,提高了程序易读性及可维修性;使用基础平台提供的DBAccessor对象进行数据库操作,该对象可在平台提供数据库操作的原子交易完整性。批量交易使用SDK提供的DBAccess对象进行数据库操作,底层使用Jdbc数据库操作。[0114]上述的CICS为IBM提供事务处理中间件平台;JVM为Java虚拟机;SDK为SoftwareDevelopmentKit即软件开发工具包;JavaBean为用Java所编写的可重用组件;TxnHandler为交易处理器;DBAccess:为平台数据库操作组件;Scala为ScalableLanguage,即可伸展语言;AKKA为分布式类库;COPYBOOK为用COBOL所编写的可重用组件。[0115]上述的用于传统程序语言向现代程序语言转换的方法,通过加载配置文件,对需要转换的COBOL源代码进行转换,转换为JAVA源代码,针对转换后的JAVA源代码利用SDK进行数据类型封装以及方法接口的基础环境配置,采用基础平台进行联机交易处理,实现全面支持COBOL语法转换,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值处理,转换后实际运行效率高,可维护性好且能降低维护成本。[0116]如图2所示,本实施例还提供了用于传统程序语言向现代程序语言转换的系统,其包括获取单元1、转换单元2以及配置单元3。[0117]获取单元1,用于获取需要转换的COBOL源码以及对应的配置规则。[0118]转换单元2,用于将COBOL源码按照对应配置规则转换生成相应的JAVA源码。[0119]配置单元3,用于对所述JAVA源码配置基础环境。[0120]更进一步地,在某些实施例中,上述的获取单元1包括加载模块以及读入模块;[0121]加载模块,用于加载配置文件,读取配置文件内的配置数据;所述配置数据包括配置参数、转换模板信息以及运行参数。对于上述的配置参数,包括系统参数、转换配置参数以及转换规则参数,其中,系统参数主要包括日志文件目录,转换规则及模板配置目录等系统运行相关参数;转换配置参数主要包括转换程序名及程序类型,源码目录及目标目录等参数;转换规则参数主要包括语法关键字转换规则,程序流程转换规则配置等参数。[0122]读入模块,用于根据配置数据读入需要转换的COBOL源码。具体是根据转换配置参数读取待转换的COBOL源码,主要包括〇111丨6、83^11、〇31161、:〇?78〇〇1^文件。如0»01^源码内有COPY或INCLUDE语句,则再读取相应的COPYBOOK文件进行语法分析。[0123]更进一步地,在某些实施例中,上述的所述转换单元2包括代码解析模块、语法树生成模块、目标代码生成模块、目标文件生成模块以及写入模块。[0124]代码解析模块,用于根据COBOL关键字、CICS关键字以及SQL关键字对COBOL源码进行逐行代码解析,生成语法分析文件。具体是根据COBOL语法及关键字规则分析COBOL源码,生成语法分析文件,如COBOL源码不符合解析规则,则提示相应错误信息记录日志文件。[0125]语法树生成模块,用于分析语法分析文件中语法关键字,生成语法树;语法树文件为XML文件,每个COBOL源代码文件对应一个语法树文件。[0126]目标代码生成模块,用于对语法树进行对应语法转换,生成目标代码Map数组。[0127]目标文件生成模块,用于根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件。[0128]写入模块,用于将转换过程写入转换日志。[0129]另外,在某些实施例中,上述的目标代码生成模块包括变量名转换子模块以及语法转换子模块。[0130]变量名转换子模块,用于将语法树内的COBOL命名的变量按照驼峰命名法转换为JAVA变量名。若变量以数字开头,则添加前缀符号$,变量转换中使用到了Backing对象和Segment对象,Backing对象为JAVA封装好的一段Byte缓存数组,初始构造Backing对象时需要指定申请的缓存数组长度,Segment则是封装好的一段指向Backing对象的缓存数组一段数据的对象,构造时需要指定Backing对象、Backing对象的偏移位置、缓存的长度值三个要素。[0131]变量转换可分为普通变量和组合变量转换两大类,对于普通变量类型的转换过程如下:根据COBOL定义变量代码在变量所属实现类的变量定义处声明相应类型的Mutable抽象类变量;根据所属实现类当前Byte缓存数组的偏移量自动计算当前变量所对应的偏移量相对位置;在变量所属实现类中的构造方法中添加对应变量所属类型的Union对象代码;在变量所属实现类中的初始化方法中initialize〇添加对应变量初始化方法代码。组合变量转换过程如下:每个组合变量对应一个UnionData的组合类,首先在该组合变量所属实现类的变量定义区声明该组合变量,类型为MutableData;在该组合变量所属实现类内部定义该组合变量类的实现框架,该类继承自UnionData类,构造方法包含一段Byte数组缓冲区对象Backing对象,以及该类对于Backing对象的Offset偏移量两个参数;在该组合变量所属类的构造方法中添加该组合变量的实现代码,即生成对应类的UnionData对象,在转换时会自动计算出当前组合变量所对应的Offset偏移位置,若变量为Redefines重定向指向,根据重定向指向的变量对应的Offset偏移位置设置偏移量;若该组合变量还有对应的子变量,则在该组合变量的定义变量区也声明相同的变量,并在该实现类的构造方法中通过该组合变量引用赋值到子变量;在所属实现类的初始化initialized中,添加该组合类对象的initialize。方法。[0132]语法转换子模块,用于对语法树的语句进行转换,结合JAVA变量名,形成目标代码Map数组。具体包括赋值语句、算数计算语句、关系运算、逻辑运算、流程控制语句、CICS指令、文件操作、内部函数以及数据库操作等语句的转换,实现对COBOL语言的全面支持,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值等处理。[0133]对于上述的赋值语句的转换而言,COBOL中赋值语句主要是MOVE语句,转换工具根据不同的数据类型,在赋值时均采用JAVA的GetSet方法进行取值赋值,同数据类型之间赋值遵循COBOL赋值规则,COBOL中MOVE语句支持不同数据类型间的赋值,转换工具检查当源数据类型与目标数据类型不一致,需要将取出值的类型转换为与源数据类型相符的数据类型,如将字符型变量通过Get方法获取到字符后再转为数值型数据后,再赋值给数值型变量。若转换的数据类型不匹配,则JAVA编译器会提示报错。[0134]对于上述的算数计算语句转换而言,COBOL中的算数计算语句⑶MPUTEADDSUBTRACTMULTIPLYDIVIDE转换成JAVA算数运算,封装了各种计算式的实现方法,支持COBOL各种数字类型的计算,底层使用BigDecimal进行计算,保证精度不丢失。[0135]对于源码中相同数据类型的关系运算转换成JAVA关系运算,而不同类型的关系运作则转换成封装的的关系运算方法,封装的方法根据数据类型不同进行了重载,确保关系运算结果一致。[0136]对于COBOL中的逻辑运算转换成JAVA中的逻辑运算,转换后的逻辑运算顺序及结果保持一致。[0137]COBOL中的流程控制语句主要有IF、EVALUATE和PERFORM,其中IF和EVALUATE语句将转换成JAVA的if,而PERFORM则通过JAVA的for或whiIe实现循环处理。根据对应的CICS指令转换规则转换成对应的基础平台调用接口。VSam文件转换为数据库操作,而QSam文件则转换为JAVA的10对文件进行操作。COBOL中日期、数学、字符、财务等函数将转换成SDK中对应的方法。[0138]使用基础平台提供的Accessor数据库操作对象进行数据库操作,该对象可在平台级提供数据库操作的原子交易完整性,批量交易使用SDK提供的JAVADB模块的Accessor对象进行数据库操作,底层使用Jdbc数据库操作,平台的数据库操作使用数据库缓冲池,COBOL嵌入的SQL语法直接转为JAVA的Sql嵌入语法,单个数据表操作使用DaoService封装的Dao对象,提高安全性和易用性,更接近于JAVA的编码规范。[0139]更进一步地,在某些实施例中,上述的目标文件生成模块包括第一转换子模块、第二转换子模块以及第三转换子模块。[0140]第一转换子模块,用于将目标代码Map数组内的COBOL程序数据部数据项定义将转换成JAVABean,并生成get、set及initalize方法。[0141]第二转换子模块,用于将数据部中的COPYBOOK转换生成单独的JAVABean。[0142]第三转换子模块,用于对⑶BOL程序过程部转换成TxnHandler类,过程部中段转换成对应的JAVA方法,并根据配置文件对程序流程进行重组。[0143]依据不同转换模板信息生成不同的目标文件,如图4所示,在生成目标文件同时根据不同的流程模板及配置对生成的程序进行流程重组,目前支持的程序流程模板主要分为以下六种:查询类程序无数据更新)、非金融类程序有数据更新)、金融类程序有账务处理)、批量程序、子程序,上述的查询类程序无数据更新)、非金融类程序有数据更新)、金融类程序有账务处理属于联机程序。将COBOL代码中的各段转换成为JAVA具体是通过读取配置参数将转换后方法转换到既定流程中,以TxnHandler模板为例,提供的流程段如图5所示,在配置相关流程段参数后,把COBOL转换来的相应流程段分派到图中模板所对应的8个流程方法中。[0144]更进一步地,在某些实施例中,上述的配置单元3具体是由SDK提供转换后JAVA代码运行所需的方法接口、数据类型定义等必须的基础环境,转化后的JAVA程序需运行在SDK上。其包括封装模块以及接口配置模块。[0145]封装模块,用于对JAVA源码进行数据类型的封装。转换的JAVA代码使用的是Union系列实现类数据,包含了指针、压缩型、数字型、字符型等COBOL的数据类型。数据类型的封装过程中,MutableField抽象接口类作为数值和字符类型对应变量的基础类,该类包含三个方法setgetlength;设计MutableData抽象接口类作为组合变量的基础类。Union系列实现类继承MutableField抽象类数据并模拟实现⑶BOL的各种类型变量数字型字符型压缩型指针型),Union系列实现类均指向一段Byte数组缓存区数据来存储当前变量实际数据,实现对应的setgetlength方法从Byte缓存中获取或设置数据;设计UnionData类继承MutableData接口模拟实现⑶BOL的组合变量定义,构造UnionData类时需要指定该组合变量类对应的Byte缓存数组并且指定对应缓存数组的Offset位置。Basic系列实现JAVA原生态的变量类型,主要实现了字符型BasicMutableAlphabet、数字型BasicMutableNumeric两种数据类型的封装,Basic系列的数据类型可在业务扩充或手动新编写JAVA代码时使用,并通过上一层Mutable的抽象父类来对接转换后的原有COBOL数据类型。[0146]接口配置模块,用于配置JAVA源码运行所需的方法接口。COBOL程序中大部分语句转换成JAVA原生态原句,对于部分语句需要通过方法接口实现,比如:COBOL联机程序中的CICS指令;COBOL程序中日期、数学、字符、财务等函数;提供的DBAccess对象及方法进行数据库操作。[0147]另外,在SDK为JAVA源代码提供基础环境的过程中,由基础平台作为联机交易处理平台,为JAVA源代码所对应的应用程序提供了所有运行时事务服务,转换后的联机程序需运行在基础平台上,由基础平台驱动,基础平台使用Scala语言+Akka开发,应用程序使用JAVA语言开发,运行在JAVA虚拟机上,具备跨平台特性;使用AkkaStream技术强调异步处理、非阻塞交易、变量不变性等特性,在处理高并发任务的同时保证多线程的安全性;使用集群架构,提供7X24小时服务,方便硬件扩充,提升系统处理能力;提供例外处理、并发控制及日志处理机制,保证可靠性。转换后的JAVA源代码运行的SDK环境和基础平台用Scala语言开发,且转换后的源代码更接近原生态JAVA源代码,执行效率更高;转换后的JAVA源代码符合目前JAVA的主流编码规范,提高了程序易读性及可维修性;使用基础平台提供的DBAccessor对象进行数据库操作,该对象可在平台提供数据库操作的原子交易完整性。批量交易使用SDK提供的DBAccess对象进行数据库操作,底层使用Jdbc数据库操作。[0148]上述的用于传统程序语言向现代程序语言转换的系统,通过加载配置文件,对需要转换的COBOL源代码进行转换,转换为JAVA源代码,针对转换后的JAVA源代码利用SDK进行数据类型封装以及方法接口的基础环境配置,采用基础平台进行联机交易处理,实现全面支持COBOL语法转换,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值处理,转换后实际运行效率高,可维护性好且能降低维护成本。[0149]上述仅以实施例来进一步说明本发明的技术内容,以便于读者更容易理解,但不代表本发明的实施方式仅限于此,任何依本发明所做的技术延伸或再创造,均受本发明的保护。本发明的保护范围以权利要求书为准。

权利要求:1.用于传统程序语言向现代程序语言转换的方法,其特征在于,所述方法包括:获取需要转换的COBOL源码以及对应的配置规则;将COBOL源码按照对应配置规则转换生成相应的JAVA源码;对所述JAVA源码配置基础环境。2.根据权利要求1所述的用于传统程序语言向现代程序语言转换的方法,其特征在于,获取需要转换的COBOL源码以及对应的配置规则的步骤,包括以下具体步骤:加载配置文件,读取配置文件内的配置数据;根据配置数据读入需要转换的COBOL源码。3.根据权利要求2所述的用于传统程序语言向现代程序语言转换的方法,其特征在于,加载配置文件,读取配置文件内的配置数据的步骤中,所述配置数据包括配置参数、转换模板信息以及运行参数。4.根据权利要求1至3任一项所述的用于传统程序语言向现代程序语言转换的方法,其特征在于,将COBOL源码按照对应配置规则转换生成相应的JAVA源码的步骤,包括以下具体步骤:根据⑶BOL关键字、CICS关键字以及SQL关键字对COBOL源码进行逐行代码解析,生成语法分析文件;分析语法分析文件中语法关键字,生成语法树;对语法树进行对应语法转换,生成目标代码Map数组;根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件;将转换过程写入转换日志。5.根据权利要求4所述的用于传统程序语言向现代程序语言转换的方法,其特征在于,对语法树进行对应语法转换,生成目标代码Map数组的步骤,包括以下具体步骤:将语法树内的COBOL命名的变量按照驼峰命名法转换为JAVA变量名;对语法树的语句进行转换,结合JAVA变量名,形成目标代码Map数组。6.根据权利要求5所述的用于传统程序语言向现代程序语言转换的方法,其特征在于,根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件的步骤,包括以下具体步骤:将目标代码Map数组内的COBOL程序数据部数据项定义将转换成JavaBean,并生成get、set及initalize方法;将数据部中的COPYBOOK转换生成单独的JavaBean;对COBOL程序过程部转换成TxnHandler类,过程部中段转换成对应的JAVA方法,并根据配置文件对程序流程进行重组。7.根据权利要求6所述的用于传统程序语言向现代程序语言转换的方法,其特征在于,对所述JAVA源码配置基础环境的步骤,包括以下具体步骤:对JAVA源码进行数据类型的封装;配置JAVA源码运行所需的方法接口。8.用于传统程序语言向现代程序语言转换的系统,其特征在于,包括获取单元、转换单元以及配置单元;所述获取单元,用于获取需要转换的COBOL源码以及对应的配置规则;所述转换单元,用于将COBOL源码按照对应配置规则转换生成相应的JAVA源码;所述配置单元,用于对所述JAVA源码配置基础环境。9.根据权利要求8所述的用于传统程序语言向现代程序语言转换的系统,其特征在于,所述获取单元包括加载模块以及读入模块;所述加载模块,用于加载配置文件,读取配置文件内的配置数据;所述读入模块,用于根据配置数据读入需要转换的COBOL源码。10.根据权利要求9所述的用于传统程序语言向现代程序语言转换的系统,其特征在于,所述转换单元包括代码解析模块、语法树生成模块、目标代码生成模块、目标文件生成模块以及写入模块;所述代码解析模块,用于根据COBOL关键字、CICS关键字以及SQL关键字对COBOL源码进行逐行代码解析,生成语法分析文件;所述语法树生成模块,用于分析语法分析文件中语法关键字,生成语法树;所述目标代码生成模块,用于对语法树进行对应语法转换,生成目标代码Map数组;所述目标文件生成模块,用于根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件;所述写入模块,用于将转换过程写入转换日志。

百度查询: 深圳四方精创资讯股份有限公司 用于传统程序语言向现代程序语言转换的方法及其系统

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。