CN107861728B - 用于传统程序语言向现代程序语言转换的方法及其系统 - Google Patents
用于传统程序语言向现代程序语言转换的方法及其系统 Download PDFInfo
- Publication number
- CN107861728B CN107861728B CN201711009889.XA CN201711009889A CN107861728B CN 107861728 B CN107861728 B CN 107861728B CN 201711009889 A CN201711009889 A CN 201711009889A CN 107861728 B CN107861728 B CN 107861728B
- Authority
- CN
- China
- Prior art keywords
- cobol
- java
- conversion
- configuration
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/51—Source to source
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及用于传统程序语言向现代程序语言转换的方法及其系统,该方法包括获取需要转换的COBOL源码以及对应的配置规则;将COBOL源码按照对应配置规则转换生成相应的JAVA源码;对JAVA源码配置基础环境。本发明通过加载配置文件,对需要转换的CoBol源代码进行转换,转换为Java源代码,针对转换后的Java源代码利用SDK进行数据类型封装以及方法接口的基础环境配置,采用基础平台进行联机交易处理,实现全面支持COBOL语法转换,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值处理,转换后实际运行效率高,可维护性好且能降低维护成本。
Description
技术领域
本发明涉及程序语言转换方法,更具体地说是指用于传统程序语言向现代程序语言转换的方法及其系统。
背景技术
传统程序语言向现代高级程序语言转换一直是计算机编译领域重要的研究方向。
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加以使用。
而目前大部分的COBOL转JAVA工具只支持了简单的COBOL语法转换,对于较复杂的语法支持不够完善,如CICS指令、COBOL函数、数据库及文件的操作;对于COBOL数据计算,当前的转换工具容易造成精度丢失;由于COBOL语言作为传统面向过程语言,具有一定的独特性,很多的处理是建立在对内存的操作上,而JAVA语言是作为面向对象语言,较难真正实现COBOL的重定向、指针赋值等处理,所以目前的转换工具主要是模拟COBOL程序的实现,从而导致转换后的代码的实际运行效率并不高;转换工具转换后的JAVA代码,在某种程度上来说更类似COBOL代码,程序的可维护性比较差;在修改或新增加代码时,需遵循原来JAVA模拟COBOL的规则,这样需要开发维护人员需同时掌握COBOL和JAVA语法,从而导致转换后的系统维护难道增加,维护成本提高。
因此,有必要设计一种用于传统程序语言向现代程序语言转换的方法,实现全面支持COBOL语法转换,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值等处理,转换后实际运行效率高,可维护性好且能降低维护成本。
发明内容
本发明的目的在于克服现有技术的缺陷,提供用于传统程序语言向现代程序语言转换的方法及其系统。
为实现上述目的,本发明采用以下技术方案:用于传统程序语言向现代程序语言转换的方法,所述方法包括:
获取需要转换的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程序过程部转换成Txn Handler类,过程部中段转换成对应的JAVA方法,并根据配置文件对程序流程进行重组。
其进一步技术方案为:对所述JAVA源码配置基础环境的步骤,包括以下具体步骤:
对JAVA源码进行数据类型的封装;
配置JAVA源码运行所需的方法接口。
本发明还提供了用于传统程序语言向现代程序语言转换的系统,包括获取单元、转换单元以及配置单元;
所述获取单元,用于获取需要转换的COBOL源码以及对应的配置规则;
所述转换单元,用于将COBOL源码按照对应配置规则转换生成相应的JAVA源码;
所述配置单元,用于对所述JAVA源码配置基础环境。
其进一步技术方案为:所述获取单元包括加载模块以及读入模块;
所述加载模块,用于加载配置文件,读取配置文件内的配置数据;
所述读入模块,用于根据配置数据读入需要转换的COBOL源码。
其进一步技术方案为:所述转换单元包括代码解析模块、语法树生成模块、目标代码生成模块、目标文件生成模块以及写入模块;
所述代码解析模块,用于根据COBOL关键字、CICS关键字以及SQL关键字对COBOL源码进行逐行代码解析,生成语法分析文件;
所述语法树生成模块,用于分析语法分析文件中语法关键字,生成语法树;
所述目标代码生成模块,用于对语法树进行对应语法转换,生成目标代码Map数组;
所述目标文件生成模块,用于根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件;
所述写入模块,用于将转换过程写入转换日志。
本发明与现有技术相比的有益效果是:本发明的用于传统程序语言向现代程序语言转换的方法,通过加载配置文件,对需要转换的COBOL源代码进行转换,转换为JAVA源代码,针对转换后的JAVA源代码利用SDK进行数据类型封装以及方法接口的基础环境配置,采用基础平台进行联机交易处理,实现全面支持COBOL语法转换,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值处理,转换后实际运行效率高,可维护性好且能降低维护成本。
下面结合附图和具体实施例对本发明作进一步描述。
附图说明
图1为本发明具体实施例提供的用于传统程序语言向现代程序语言转换的方法的流程图;
图2为本发明具体实施例提供的用于传统程序语言向现代程序语言转换的系统的结构框图;
图3为本发明具体实施例提供的用于传统程序语言向现代程序语言转换的系统的架构图;
图4为本发明具体实施例提供的生成目标文件的规则框图;
图5为本发明具体实施例提供的Txn Handler模板的流程段示意图;
具体实施方式
为了更充分理解本发明的技术内容,下面结合具体实施例对本发明的技术方案进一步介绍和说明,但不局限于此。
如图1~5所示的具体实施例,本实施例提供的用于传统程序语言向现代程序语言转换的方法,可以运用在传统高级程序语言COBOL向现代高级程序语言JAVA的转换过程中,实现全面支持COBOL语法转换,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值等处理,转换后实际运行效率高,可维护性好且能降低维护成本。
如图1所示,本实施例提供了用于传统程序语言向现代程序语言转换的方法,该方法包括:
S1、获取需要转换的COBOL源码以及对应的配置规则;
S2、将COBOL源码按照对应配置规则转换生成相应的JAVA源码;
S3、对所述JAVA源码配置基础环境。
更进一步地,在某些实施例中,上述的S1步骤,获取需要转换的COBOL源码以及对应的配置规则的步骤,包括以下具体步骤:
S11、加载配置文件,读取配置文件内的配置数据;
S12、根据配置数据读入需要转换的COBOL源码。
对于上述的S11步骤,加载配置文件,读取配置文件内的配置数据的步骤中,所述配置数据包括配置参数、转换模板信息以及运行参数。
对于上述的配置参数,包括系统参数、转换配置参数以及转换规则参数,其中,系统参数主要包括日志文件目录,转换规则及模板配置目录等系统运行相关参数;转换配置参数主要包括转换程序名及程序类型,源码目录及目标目录等参数;转换规则参数主要包括语法关键字转换规则,程序流程转换规则配置等参数。
对于上述的S12步骤,具体是根据转换配置参数读取待转换的COBOL源码,主要包括Onlie、Batch、Called、CopyBook文件。如COBOL源码内有COPY或INCLUDE语句,则再读取相应的COPY BOOK文件进行语法分析。
更进一步地,在某些实施例中,上述的S2步骤,将COBOL源码按照对应配置规则转换生成相应的JAVA源码的步骤,包括以下具体步骤:
S21、根据COBOL关键字、CICS关键字以及SQL关键字对COBOL源码进行逐行代码解析,生成语法分析文件;
S22、分析语法分析文件中语法关键字,生成语法树;
S23、对语法树进行对应语法转换,生成目标代码Map数组;
S24、根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件;
S25、将转换过程写入转换日志。
对于上述的S21步骤,具体是根据COBOL语法及关键字规则分析COBOL源码,生成语法分析文件,如COBOL源码不符合解析规则,则提示相应错误信息记录日志文件。
对于上述的S22步骤,根据对语法分析文件中的语法关键字分析生成语法树文件,语法树文件为XML文件,每个COBOL源代码文件对应一个语法树文件。
对于上述的S23步骤,对语法树进行对应语法转换,生成目标代码Map数组的步骤,包括以下具体步骤:
S231、将语法树内的COBOL命名的变量按照驼峰命名法转换为JAVA变量名;
S232、对语法树的语句进行转换,结合JAVA变量名,形成目标代码Map数组。
对于上述的S231步骤,若变量以数字开头,则添加前缀符号$,变量转换中使用到了Backing对象和Segment对象,Backing对象为JAVA封装好的一段Byte缓存数组,初始构造Backing对象时需要指定申请的缓存数组长度,Segment则是封装好的一段指向Backing对象的缓存数组一段数据的对象,构造时需要指定Backing对象、Backing对象的偏移位置、缓存的长度值三个要素。
变量转换可分为普通变量和组合变量转换两大类,对于普通变量类型的转换过程如下:根据COBOL定义变量代码在变量所属实现类的变量定义处声明相应类型的Mutable抽象类变量;根据所属实现类当前Byte缓存数组的偏移量自动计算当前变量所对应的偏移量相对位置;在变量所属实现类中的构造方法中添加对应变量所属类型的Union对象代码;在变量所属实现类中的初始化方法中initialize()添加对应变量初始化方法代码。组合变量转换过程如下:每个组合变量对应一个UnionData的组合类,首先在该组合变量所属实现类的变量定义区声明该组合变量,类型为MutableData;在该组合变量所属实现类内部定义该组合变量类的实现框架,该类继承自UnionData类,构造方法包含一段Byte数组缓冲区对象Backing对象,以及该类对于Backing对象的Offset偏移量两个参数;在该组合变量所属类的构造方法中添加该组合变量的实现代码,即生成对应类的UnionData对象,在转换时会自动计算出当前组合变量所对应的Offset偏移位置,若变量为Redefines重定向指向,根据重定向指向的变量对应的Offset偏移位置设置偏移量;若该组合变量还有对应的子变量,则在该组合变量的定义变量区也声明相同的变量,并在该实现类的构造方法中通过该组合变量引用赋值到子变量;在所属实现类的初始化initialize()中,添加该组合类对象的initialize()方法。
举个例子,该例子包含了组合变量嵌套、字符变量、无符号数字变量、有小数位有符号数字变量、Comp和Comp3压缩型数字变量、88层变量、Redefinces重定向等。
COBOL代码如下:
转换后的JAVA代码如下:
对于上述的S232步骤,具体包括赋值语句、算数计算语句、关系运算、逻辑运算、流程控制语句、CICS指令、文件操作、内部函数以及数据库操作等语句的转换,实现对COBOL语言的全面支持,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值等处理。
对于上述的赋值语句的转换而言,COBOL中赋值语句主要是MOVE语句,转换工具根据不同的数据类型,在赋值时均采用JAVA的Get/Set方法进行取值/赋值,同数据类型之间赋值遵循COBOL赋值规则,COBOL中MOVE语句支持不同数据类型间的赋值,转换工具检查当源数据类型与目标数据类型不一致,需要将取出值的类型转换为与源数据类型相符的数据类型,如将字符型变量通过Get方法获取到字符后再转为数值型数据后,再赋值给数值型变量。若转换的数据类型不匹配,则JAVA编译器会提示报错。
对于上述的算数计算语句转换而言,COBOL中的算数计算语句COMPUTE/ADD/SUBTRACT/MULTIPLY/DIVIDE转换成JAVA算数运算,封装了各种计算式的实现方法,支持COBOL各种数字类型的计算,底层使用BigDecimal进行计算,保证精度不丢失。
对于源码中相同数据类型的关系运算转换成JAVA关系运算,而不同类型的关系运作则转换成封装的的关系运算方法,封装的方法根据数据类型不同进行了重载,确保关系运算结果一致。
对于COBOL中的逻辑运算转换成JAVA中的逻辑运算,转换后的逻辑运算顺序及结果保持一致。
COBOL中的流程控制语句主要有IF、EVALUATE和PERFORM,其中IF和EVALUATE语句将转换成JAVA的if,而PERFORM则通过JAVA的for或while实现循环处理。根据对应的CICS指令转换规则转换成对应的基础平台调用接口。VSam文件转换为数据库操作,而QSam文件则转换为JAVA的IO对文件进行操作。COBOL中日期、数学、字符、财务等函数将转换成SDK中对应的方法。
使用基础平台提供的Accessor数据库操作对象进行数据库操作,该对象可在平台级提供数据库操作的原子交易完整性,批量交易使用SDK提供的JAVADB模块的Accessor对象进行数据库操作,底层使用Jdbc数据库操作,平台的数据库操作使用数据库缓冲池,COBOL嵌入的SQL语法直接转为JAVA的Sql嵌入语法,单个数据表操作使用DaoService封装的Dao对象,提高安全性和易用性,更接近于JAVA的编码规范。
举个例子,COBOL代码如下:
转换后JAVA代码如下:
更进一步地,在某些实施例中,上述的S24步骤,根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件的步骤,包括以下具体步骤:
S241、将目标代码Map数组内的COBOL程序数据部数据项定义将转换成JAVABean,并生成get()、set()及initalize()方法;
S242、将数据部中的COPYBOOK转换生成单独的JAVABean;
S243、对COBOL程序过程部转换成Txn Handler类,过程部中段转换成对应的JAVA方法,并根据配置文件对程序流程进行重组。
上述的S241步骤S243步骤,JAVA Bean为用Java所编写的可重用组件,依据不同转换模板信息生成不同的目标文件,如图4所示,在生成目标文件同时根据不同的流程模板及配置对生成的程序进行流程重组,目前支持的程序流程模板主要分为以下六种:查询类程序(无数据更新)、非金融类程序(有数据更新)、金融类程序(有账务处理)、批量程序、子程序,上述的查询类程序(无数据更新)、非金融类程序(有数据更新)、金融类程序(有账务处理)属于联机程序。将COBOL代码中的各段转换成为JAVA具体是通过读取配置参数将转换后方法转换到既定流程中,以Txn Handler模板为例,提供的流程段如图5所示,在配置相关流程段参数后,把COBOL转换来的相应流程段分派到图中模板所对应的8个流程方法中。实施例如下为:COBOL定义TXN-INITIAL-RTN.段,配置参数将其分配到initial流程方法中,工具自动转换JAVA代码如下:
对于上述的S25步骤,具体是根据转换过程和步骤输出转换日志,日志分为Info、Warning、Error不同级别,为后续对转换过程进行跟踪分析提供依据。
更进一步地,在某些实施例中,上述的S3步骤,对所述JAVA源码配置基础环境的步骤,包括以下具体步骤:
S31、对JAVA源码进行数据类型的封装;
S32、配置JAVA源码运行所需的方法接口。
对于上述的S3步骤,具体是由SDK提供转换后JAVA代码运行所需的方法接口、数据类型定义等必须的基础环境,转化后的JAVA程序需运行在SDK上。
对于上述的S31步骤,转换的JAVA代码使用的是Union系列实现类数据,包含了指针、压缩型、数字型、字符型等COBOL的数据类型。数据类型的封装过程中,MutableField抽象接口类作为数值和字符类型对应变量的基础类,该类包含三个方法set/get/length;设计MutableData抽象接口类作为组合变量的基础类。Union系列实现类继承MutableField抽象类数据并模拟实现COBOL的各种类型变量(数字型/字符型/压缩型/指针型),Union系列实现类均指向一段Byte数组缓存区数据来存储当前变量实际数据,实现对应的set/get/length方法从Byte缓存中获取或设置数据;设计UnionData类继承MutableData接口模拟实现COBOL的组合变量定义,构造UnionData类时需要指定该组合变量类对应的Byte缓存数组并且指定对应缓存数组的Offset位置。Basic系列实现JAVA原生态的变量类型,主要实现了字符型BasicMutableAlphabet、数字型BasicMutableNumeric两种数据类型的封装,Basic系列的数据类型可在业务扩充或手动新编写JAVA代码时使用,并通过上一层Mutable的抽象父类来对接转换后的原有COBOL数据类型。
对于上述的S32步骤,COBOL程序中大部分语句转换成JAVA原生态原句,对于部分语句需要通过方法接口实现,比如:COBOL联机程序中的CICS指令;COBOL程序中日期、数学、字符、财务等函数;提供的DB Access对象及方法进行数据库操作。
另外,在SDK为JAVA源代码提供基础环境的过程中,由基础平台作为联机交易处理平台,为JAVA源代码所对应的应用程序提供了所有运行时事务服务,转换后的联机程序需运行在基础平台上,由基础平台驱动,基础平台使用Scala语言+Akka开发,应用程序使用JAVA语言开发,运行在JAVA虚拟机上,具备跨平台特性;使用Akka Stream技术强调异步处理、非阻塞交易、变量不变性等特性,在处理高并发任务的同时保证多线程的安全性;使用集群架构,提供7X24小时服务,方便硬件扩充,提升系统处理能力;提供例外处理、并发控制及日志处理机制,保证可靠性。转换后的JAVA源代码运行的SDK环境和基础平台用Scala语言开发,且转换后的源代码更接近原生态JAVA源代码,执行效率更高;转换后的JAVA源代码符合目前JAVA的主流编码规范,提高了程序易读性及可维修性;使用基础平台提供的DBAccessor对象进行数据库操作,该对象可在平台提供数据库操作的原子交易完整性。批量交易使用SDK提供的DB Access对象进行数据库操作,底层使用Jdbc数据库操作。
上述的CICS为IBM提供事务处理中间件平台;JVM为Java虚拟机;SDK为SoftwareDevelopment Kit即软件开发工具包;Java Bean为用Java所编写的可重用组件;TxnHandler为交易处理器;DB Access:为平台数据库操作组件;Scala为Scalable Language,即可伸展语言;AKKA为分布式类库;COPY BOOK为用COBOL所编写的可重用组件。
上述的用于传统程序语言向现代程序语言转换的方法,通过加载配置文件,对需要转换的COBOL源代码进行转换,转换为JAVA源代码,针对转换后的JAVA源代码利用SDK进行数据类型封装以及方法接口的基础环境配置,采用基础平台进行联机交易处理,实现全面支持COBOL语法转换,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值处理,转换后实际运行效率高,可维护性好且能降低维护成本。
如图2所示,本实施例还提供了用于传统程序语言向现代程序语言转换的系统,其包括获取单元1、转换单元2以及配置单元3。
获取单元1,用于获取需要转换的COBOL源码以及对应的配置规则。
转换单元2,用于将COBOL源码按照对应配置规则转换生成相应的JAVA源码。
配置单元3,用于对所述JAVA源码配置基础环境。
更进一步地,在某些实施例中,上述的获取单元1包括加载模块以及读入模块;
加载模块,用于加载配置文件,读取配置文件内的配置数据;所述配置数据包括配置参数、转换模板信息以及运行参数。对于上述的配置参数,包括系统参数、转换配置参数以及转换规则参数,其中,系统参数主要包括日志文件目录,转换规则及模板配置目录等系统运行相关参数;转换配置参数主要包括转换程序名及程序类型,源码目录及目标目录等参数;转换规则参数主要包括语法关键字转换规则,程序流程转换规则配置等参数。
读入模块,用于根据配置数据读入需要转换的COBOL源码。具体是根据转换配置参数读取待转换的COBOL源码,主要包括Onlie、Batch、Called、CopyBook文件。如COBOL源码内有COPY或INCLUDE语句,则再读取相应的COPY BOOK文件进行语法分析。
更进一步地,在某些实施例中,上述的所述转换单元2包括代码解析模块、语法树生成模块、目标代码生成模块、目标文件生成模块以及写入模块。
代码解析模块,用于根据COBOL关键字、CICS关键字以及SQL关键字对COBOL源码进行逐行代码解析,生成语法分析文件。具体是根据COBOL语法及关键字规则分析COBOL源码,生成语法分析文件,如COBOL源码不符合解析规则,则提示相应错误信息记录日志文件。
语法树生成模块,用于分析语法分析文件中语法关键字,生成语法树;语法树文件为XML文件,每个COBOL源代码文件对应一个语法树文件。
目标代码生成模块,用于对语法树进行对应语法转换,生成目标代码Map数组。
目标文件生成模块,用于根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件。
写入模块,用于将转换过程写入转换日志。
另外,在某些实施例中,上述的目标代码生成模块包括变量名转换子模块以及语法转换子模块。
变量名转换子模块,用于将语法树内的COBOL命名的变量按照驼峰命名法转换为JAVA变量名。若变量以数字开头,则添加前缀符号$,变量转换中使用到了Backing对象和Segment对象,Backing对象为JAVA封装好的一段Byte缓存数组,初始构造Backing对象时需要指定申请的缓存数组长度,Segment则是封装好的一段指向Backing对象的缓存数组一段数据的对象,构造时需要指定Backing对象、Backing对象的偏移位置、缓存的长度值三个要素。
变量转换可分为普通变量和组合变量转换两大类,对于普通变量类型的转换过程如下:根据COBOL定义变量代码在变量所属实现类的变量定义处声明相应类型的Mutable抽象类变量;根据所属实现类当前Byte缓存数组的偏移量自动计算当前变量所对应的偏移量相对位置;在变量所属实现类中的构造方法中添加对应变量所属类型的Union对象代码;在变量所属实现类中的初始化方法中initialize()添加对应变量初始化方法代码。组合变量转换过程如下:每个组合变量对应一个UnionData的组合类,首先在该组合变量所属实现类的变量定义区声明该组合变量,类型为MutableData;在该组合变量所属实现类内部定义该组合变量类的实现框架,该类继承自UnionData类,构造方法包含一段Byte数组缓冲区对象Backing对象,以及该类对于Backing对象的Offset偏移量两个参数;在该组合变量所属类的构造方法中添加该组合变量的实现代码,即生成对应类的UnionData对象,在转换时会自动计算出当前组合变量所对应的Offset偏移位置,若变量为Redefines重定向指向,根据重定向指向的变量对应的Offset偏移位置设置偏移量;若该组合变量还有对应的子变量,则在该组合变量的定义变量区也声明相同的变量,并在该实现类的构造方法中通过该组合变量引用赋值到子变量;在所属实现类的初始化initialize()中,添加该组合类对象的initialize()方法。
语法转换子模块,用于对语法树的语句进行转换,结合JAVA变量名,形成目标代码Map数组。具体包括赋值语句、算数计算语句、关系运算、逻辑运算、流程控制语句、CICS指令、文件操作、内部函数以及数据库操作等语句的转换,实现对COBOL语言的全面支持,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值等处理。
对于上述的赋值语句的转换而言,COBOL中赋值语句主要是MOVE语句,转换工具根据不同的数据类型,在赋值时均采用JAVA的Get/Set方法进行取值/赋值,同数据类型之间赋值遵循COBOL赋值规则,COBOL中MOVE语句支持不同数据类型间的赋值,转换工具检查当源数据类型与目标数据类型不一致,需要将取出值的类型转换为与源数据类型相符的数据类型,如将字符型变量通过Get方法获取到字符后再转为数值型数据后,再赋值给数值型变量。若转换的数据类型不匹配,则JAVA编译器会提示报错。
对于上述的算数计算语句转换而言,COBOL中的算数计算语句COMPUTE/ADD/SUBTRACT/MULTIPLY/DIVIDE转换成JAVA算数运算,封装了各种计算式的实现方法,支持COBOL各种数字类型的计算,底层使用BigDecimal进行计算,保证精度不丢失。
对于源码中相同数据类型的关系运算转换成JAVA关系运算,而不同类型的关系运作则转换成封装的的关系运算方法,封装的方法根据数据类型不同进行了重载,确保关系运算结果一致。
对于COBOL中的逻辑运算转换成JAVA中的逻辑运算,转换后的逻辑运算顺序及结果保持一致。
COBOL中的流程控制语句主要有IF、EVALUATE和PERFORM,其中IF和EVALUATE语句将转换成JAVA的if,而PERFORM则通过JAVA的for或while实现循环处理。根据对应的CICS指令转换规则转换成对应的基础平台调用接口。VSam文件转换为数据库操作,而QSam文件则转换为JAVA的IO对文件进行操作。COBOL中日期、数学、字符、财务等函数将转换成SDK中对应的方法。
使用基础平台提供的Accessor数据库操作对象进行数据库操作,该对象可在平台级提供数据库操作的原子交易完整性,批量交易使用SDK提供的JAVADB模块的Accessor对象进行数据库操作,底层使用Jdbc数据库操作,平台的数据库操作使用数据库缓冲池,COBOL嵌入的SQL语法直接转为JAVA的Sql嵌入语法,单个数据表操作使用DaoService封装的Dao对象,提高安全性和易用性,更接近于JAVA的编码规范。
更进一步地,在某些实施例中,上述的目标文件生成模块包括第一转换子模块、第二转换子模块以及第三转换子模块。
第一转换子模块,用于将目标代码Map数组内的COBOL程序数据部数据项定义将转换成JAVABean,并生成get()、set()及initalize()方法。
第二转换子模块,用于将数据部中的COPYBOOK转换生成单独的JAVABean。
第三转换子模块,用于对COBOL程序过程部转换成Txn Handler类,过程部中段转换成对应的JAVA方法,并根据配置文件对程序流程进行重组。
依据不同转换模板信息生成不同的目标文件,如图4所示,在生成目标文件同时根据不同的流程模板及配置对生成的程序进行流程重组,目前支持的程序流程模板主要分为以下六种:查询类程序(无数据更新)、非金融类程序(有数据更新)、金融类程序(有账务处理)、批量程序、子程序,上述的查询类程序(无数据更新)、非金融类程序(有数据更新)、金融类程序(有账务处理)属于联机程序。将COBOL代码中的各段转换成为JAVA具体是通过读取配置参数将转换后方法转换到既定流程中,以Txn Handler模板为例,提供的流程段如图5所示,在配置相关流程段参数后,把COBOL转换来的相应流程段分派到图中模板所对应的8个流程方法中。
更进一步地,在某些实施例中,上述的配置单元3具体是由SDK提供转换后JAVA代码运行所需的方法接口、数据类型定义等必须的基础环境,转化后的JAVA程序需运行在SDK上。其包括封装模块以及接口配置模块。
封装模块,用于对JAVA源码进行数据类型的封装。转换的JAVA代码使用的是Union系列实现类数据,包含了指针、压缩型、数字型、字符型等COBOL的数据类型。数据类型的封装过程中,MutableField抽象接口类作为数值和字符类型对应变量的基础类,该类包含三个方法set/get/length;设计MutableData抽象接口类作为组合变量的基础类。Union系列实现类继承MutableField抽象类数据并模拟实现COBOL的各种类型变量(数字型/字符型/压缩型/指针型),Union系列实现类均指向一段Byte数组缓存区数据来存储当前变量实际数据,实现对应的set/get/length方法从Byte缓存中获取或设置数据;设计UnionData类继承MutableData接口模拟实现COBOL的组合变量定义,构造UnionData类时需要指定该组合变量类对应的Byte缓存数组并且指定对应缓存数组的Offset位置。Basic系列实现JAVA原生态的变量类型,主要实现了字符型BasicMutableAlphabet、数字型BasicMutableNumeric两种数据类型的封装,Basic系列的数据类型可在业务扩充或手动新编写JAVA代码时使用,并通过上一层Mutable的抽象父类来对接转换后的原有COBOL数据类型。
接口配置模块,用于配置JAVA源码运行所需的方法接口。COBOL程序中大部分语句转换成JAVA原生态原句,对于部分语句需要通过方法接口实现,比如:COBOL联机程序中的CICS指令;COBOL程序中日期、数学、字符、财务等函数;提供的DB Access对象及方法进行数据库操作。
另外,在SDK为JAVA源代码提供基础环境的过程中,由基础平台作为联机交易处理平台,为JAVA源代码所对应的应用程序提供了所有运行时事务服务,转换后的联机程序需运行在基础平台上,由基础平台驱动,基础平台使用Scala语言+Akka开发,应用程序使用JAVA语言开发,运行在JAVA虚拟机上,具备跨平台特性;使用Akka Stream技术强调异步处理、非阻塞交易、变量不变性等特性,在处理高并发任务的同时保证多线程的安全性;使用集群架构,提供7X24小时服务,方便硬件扩充,提升系统处理能力;提供例外处理、并发控制及日志处理机制,保证可靠性。转换后的JAVA源代码运行的SDK环境和基础平台用Scala语言开发,且转换后的源代码更接近原生态JAVA源代码,执行效率更高;转换后的JAVA源代码符合目前JAVA的主流编码规范,提高了程序易读性及可维修性;使用基础平台提供的DBAccessor对象进行数据库操作,该对象可在平台提供数据库操作的原子交易完整性。批量交易使用SDK提供的DB Access对象进行数据库操作,底层使用Jdbc数据库操作。
上述的用于传统程序语言向现代程序语言转换的系统,通过加载配置文件,对需要转换的COBOL源代码进行转换,转换为JAVA源代码,针对转换后的JAVA源代码利用SDK进行数据类型封装以及方法接口的基础环境配置,采用基础平台进行联机交易处理,实现全面支持COBOL语法转换,保持转换前的程序语言精度,真正实现COBOL的重定向、指针赋值处理,转换后实际运行效率高,可维护性好且能降低维护成本。
上述仅以实施例来进一步说明本发明的技术内容,以便于读者更容易理解,但不代表本发明的实施方式仅限于此,任何依本发明所做的技术延伸或再创造,均受本发明的保护。本发明的保护范围以权利要求书为准。
Claims (4)
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程序过程部转换成Txn Handler类,过程部中段转换成对应的JAVA方法,并根据配置文件对程序流程进行重组;
对JAVA源码配置基础环境的步骤,包括以下具体步骤:
对JAVA源码进行数据类型的封装;
配置JAVA源码运行所需的方法接口;
具体的,转换的JAVA代码使用的是Union系列实现类数据,包含了指针、压缩型、数字型、字符型的COBOL的数据类型;数据类型的封装过程中,MutableField抽象接口类作为数值和字符类型对应变量的基础类,MutableField抽象接口类抽象出数字和字符类型的对应变量的三种方法包含set/get/length;设计MutableData抽象接口类作为组合变量的基础类。
2.用于传统程序语言向现代程序语言转换的系统,其特征在于,包括获取单元、转换单元以及配置单元;
所述获取单元,用于获取需要转换的COBOL源码以及对应的配置规则;
所述转换单元,用于将COBOL源码按照对应配置规则转换生成相应的JAVA源码;
所述配置单元,用于对JAVA源码配置基础环境;
所述配置单元包括封装模块以及接口配置模块;封装模块,用于对JAVA源码进行数据类型的封装;具体的,转换的JAVA代码使用的是Union系列实现类数据,包含了指针、压缩型、数字型、字符型的COBOL的数据类型;数据类型的封装过程中,MutableField抽象接口类作为数值和字符类型对应变量的基础类,MutableField抽象接口类抽象出数字和字符类型的对应变量的三种方法包含set/get/length;设计MutableData抽象接口类作为组合变量的基础类;接口配置模块,用于配置JAVA源码运行所需的方法接口。
3.根据权利要求2所述的用于传统程序语言向现代程序语言转换的系统,其特征在于,所述获取单元包括加载模块以及读入模块;
所述加载模块,用于加载配置文件,读取配置文件内的配置数据;
所述读入模块,用于根据配置数据读入需要转换的COBOL源码。
4.根据权利要求3所述的用于传统程序语言向现代程序语言转换的系统,其特征在于,所述转换单元包括代码解析模块、语法树生成模块、目标代码生成模块、目标文件生成模块以及写入模块;
所述代码解析模块,用于根据COBOL关键字、CICS关键字以及SQL关键字对COBOL源码进行逐行代码解析,生成语法分析文件;
所述语法树生成模块,用于分析语法分析文件中语法关键字,生成语法树;
所述目标代码生成模块,用于对语法树进行对应语法转换,生成目标代码Map数组;
所述目标文件生成模块,用于根据目标代码Map数组,对照关联的不同转换模板信息,生成不同的JAVA目标文件;
所述写入模块,用于将转换过程写入转换日志。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711009889.XA CN107861728B (zh) | 2017-10-25 | 2017-10-25 | 用于传统程序语言向现代程序语言转换的方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711009889.XA CN107861728B (zh) | 2017-10-25 | 2017-10-25 | 用于传统程序语言向现代程序语言转换的方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107861728A CN107861728A (zh) | 2018-03-30 |
CN107861728B true CN107861728B (zh) | 2020-10-16 |
Family
ID=61696657
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711009889.XA Active CN107861728B (zh) | 2017-10-25 | 2017-10-25 | 用于传统程序语言向现代程序语言转换的方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107861728B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4336348A1 (en) * | 2022-09-08 | 2024-03-13 | Neograms SARL | Iterative and interactive method for code conversion |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108595185B (zh) * | 2018-04-11 | 2021-07-27 | 暨南大学 | 一种将以太坊智能合约转换成超级账本智能合约的方法 |
CN110795098B (zh) * | 2018-08-02 | 2022-11-11 | 武汉斗鱼网络科技有限公司 | 一种获取数据的方法和相关装置 |
CN109726213B (zh) * | 2018-12-10 | 2021-11-19 | 阿里巴巴(中国)有限公司 | 一种程序代码转换方法、装置、介质和计算设备 |
CN110109681B (zh) * | 2019-05-08 | 2023-06-09 | 上海携程商务有限公司 | 不同平台间代码的转换方法及系统 |
CN110879710B (zh) * | 2019-07-24 | 2023-07-07 | 中信银行股份有限公司 | 一种rpg程序自动转成java程序的方法 |
CN111506314B (zh) * | 2020-04-08 | 2024-05-14 | 网易(杭州)网络有限公司 | 项目开发的方法、装置、服务器及介质 |
CN112256279B (zh) * | 2020-09-29 | 2024-05-14 | 深圳市广和通无线股份有限公司 | 源码转换方法、装置、计算机设备及可读存储介质 |
CN112416365B (zh) * | 2020-11-18 | 2024-05-24 | 中信银行股份有限公司 | 文件转换方法、装置及存储介质 |
CN112765209A (zh) * | 2021-02-07 | 2021-05-07 | 浪潮云信息技术股份公司 | 一种数据库间的sql语句语法迁移方法及系统 |
CN113157257B (zh) * | 2021-04-12 | 2024-03-29 | 山东省城市商业银行合作联盟有限公司 | 针对银行系统的快速开发装置 |
US20220357934A1 (en) * | 2021-05-05 | 2022-11-10 | Michael Ling | Methods, devices, and media for two-pass source code transformation |
CN113553533A (zh) * | 2021-06-10 | 2021-10-26 | 国网安徽省电力有限公司 | 一种基于数字化内部五级市场考核体系的指标计算方法 |
CN117240894B (zh) * | 2023-11-13 | 2024-01-12 | 湖南超弦科技股份有限公司 | 一种Qt平台与PLC的互通控制方法、系统及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6453464B1 (en) * | 1998-09-03 | 2002-09-17 | Legacyj. Corp., Inc. | Method and apparatus for converting COBOL to Java |
CN1818861A (zh) * | 2006-02-20 | 2006-08-16 | 中国科学院计算技术研究所 | Cobol到java代码翻译中面向对象翻译的方法 |
JP6199278B2 (ja) * | 2014-12-12 | 2017-09-20 | Tis株式会社 | プログラム変換システム |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101208660A (zh) * | 2005-06-27 | 2008-06-25 | 奎朴兹有限公司 | 代码转换 |
US8645932B2 (en) * | 2010-09-19 | 2014-02-04 | Micro Focus (US). Inc. | Control flow analysis methods and computing devices for converting COBOL-sourced programs to object-oriented program structures |
CN104391730B (zh) * | 2014-08-03 | 2017-07-11 | 浙江网新恒天软件有限公司 | 一种软件源码语言翻译系统及方法 |
-
2017
- 2017-10-25 CN CN201711009889.XA patent/CN107861728B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6453464B1 (en) * | 1998-09-03 | 2002-09-17 | Legacyj. Corp., Inc. | Method and apparatus for converting COBOL to Java |
CN1818861A (zh) * | 2006-02-20 | 2006-08-16 | 中国科学院计算技术研究所 | Cobol到java代码翻译中面向对象翻译的方法 |
JP6199278B2 (ja) * | 2014-12-12 | 2017-09-20 | Tis株式会社 | プログラム変換システム |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP4336348A1 (en) * | 2022-09-08 | 2024-03-13 | Neograms SARL | Iterative and interactive method for code conversion |
Also Published As
Publication number | Publication date |
---|---|
CN107861728A (zh) | 2018-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107861728B (zh) | 用于传统程序语言向现代程序语言转换的方法及其系统 | |
Boehm et al. | SystemDS: A declarative machine learning system for the end-to-end data science lifecycle | |
Haynes et al. | PipeGen: Data pipe generator for hybrid analytics | |
Beazley | Python essential reference | |
US8949796B2 (en) | Method for automatic extraction of design from standard source code | |
US7634515B2 (en) | Data model and schema evolution | |
US20100175049A1 (en) | Scope: a structured computations optimized for parallel execution script language | |
CN101887365B (zh) | 用于构造基于组件的应用的可执行代码的方法和编译器 | |
US11354284B2 (en) | System and method for migration of a legacy datastore | |
US7318215B1 (en) | Stored procedure interface language and tools | |
Sneed | Migrating from COBOL to Java | |
CN107665216B (zh) | 一种数据库访问方法及中间件 | |
US20040158820A1 (en) | System for generating an application framework and components | |
Koranne | Handbook of open source tools | |
US8090735B2 (en) | Statement generation using statement patterns | |
KR20080038306A (ko) | 널가능과 후 바인딩 | |
US8914782B2 (en) | Optimization of declarative queries | |
CN116628066B (zh) | 数据传输方法、装置、计算机设备和存储介质 | |
CN113138755A (zh) | 一种json序列化和反序列化的优化方法及系统 | |
CN116955393A (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
Li et al. | J2M: a Java to MapReduce translator for cloud computing | |
US20220075796A1 (en) | Architecture for data map converters | |
CN114579141A (zh) | require框架转化为VUE框架的方法及装置 | |
TWI414995B (zh) | 開發及執行平台 | |
CN114385145A (zh) | 一种Web系统后端架构设计方法及计算机设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP02 | Change in the address of a patent holder | ||
CP02 | Change in the address of a patent holder |
Address after: 518000 Floor 3, Sifang Jingchuang Information Building, No. 8, Gaoxin South 7th Road, High tech Zone Community, Yuehai Street, Nanshan District, Shenzhen, Guangdong Patentee after: SHENZHEN FORMS SYNTRON INFORMATION CO.,LTD. Address before: Room 302, Building 13, Shenzhen Software Park (Phase 2) Patentee before: SHENZHEN FORMS SYNTRON INFORMATION CO.,LTD. |