CN110879710A - 一种rpg程序自动转成java程序的方法 - Google Patents

一种rpg程序自动转成java程序的方法 Download PDF

Info

Publication number
CN110879710A
CN110879710A CN201910673794.0A CN201910673794A CN110879710A CN 110879710 A CN110879710 A CN 110879710A CN 201910673794 A CN201910673794 A CN 201910673794A CN 110879710 A CN110879710 A CN 110879710A
Authority
CN
China
Prior art keywords
rpg
program
java
processor
conversion
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.)
Granted
Application number
CN201910673794.0A
Other languages
English (en)
Other versions
CN110879710B (zh
Inventor
王燕
陈蓓
刘良俊
江子能
田磊
阎珅
李龙
李兴
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Citic Bank Corp Ltd
Original Assignee
China Citic Bank Corp Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by China Citic Bank Corp Ltd filed Critical China Citic Bank Corp Ltd
Priority to CN201910673794.0A priority Critical patent/CN110879710B/zh
Publication of CN110879710A publication Critical patent/CN110879710A/zh
Application granted granted Critical
Publication of CN110879710B publication Critical patent/CN110879710B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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

本发明提供了一种RPG程序自动转成JAVA程序的方法,属于软件技术领域。该方法首先通过读取RPG源代码生成RPG结构树,再通过RPG结构树转成对应的JAVA结构树,最后将JAVA结构树生成相应的JAVA代码,实现支撑银行核心系统的不同编程语言之间可执行代码的自动转换,从而降低银行核心系统从集中式架构向分布式架构转型过程中的人力、物力和财力。

Description

一种RPG程序自动转成JAVA程序的方法
技术领域
本发明涉及可执行代码在不同编程语言之间的转换,尤其涉及一种RPG程序自动转成JAVA程序的方法。
背景技术
现阶段,信息化成为了银行发展的重要路径,而信息化最明显的表现即为银行核心系统的普及。银行核心系统,又称银行综合业务系统,是银行信息化建设的核心部分,也是银行业务经营的基础,有效地保证了银行各项业务的正常开展和进行。
从信息化运维的角度看,银行核心系统往往需要全天候无间断地运行。目前,各商业银行和相关金融机构在转换核心系统底层的可执行代码(例如,从RPG程序转成JAVA程序)时,主要依靠人工转换手段,手工将RPG程序编码,进而转成JAVA程序。这种转换方式不但需要更大的工作量,明显增加时间、人力以及财力资源,而且在转换过程中容易出现质量问题,导致风险无法预估。
发明内容
鉴于人工转换代码的诸多弊端,本发明提出了将银行核心系统中 RPG程序自动转成JAVA程序的方法,从而促进银行核心系统从集中式架构向分布式架构的转型。
本发明的技术解决方案如下:
一种RPG程序自动转成JAVA程序的方法,其实现方式主要基于以下三个步骤:
(一)读取RPG源代码生成RPG结构树;
(二)根据RPG结构树转成对应的JAVA结构树;
(三)根据JAVA结构树生成相应的JAVA代码。
其中,读取RPG源代码生成RPG结构树的步骤主要实现把文本文件的源代码RPG结构树。
RPG程序主要分为4个部分,第一部分是F表,用于定义程序中需要操作的文件(数据库表);第二部分是D表,用于定义程序中需要使用到的变量;第三部分是COPY/INCLUDE,用于定义需要引入的头文件信息;第四部分是子例程,属于程序的处理部分。
根据RPG程序的语法特点,在处理RPG程序四大部分时候,读取RPG源程序文本文件,生成RpgStruct对象,每个文本文件的源代码对应一个RpgStruct对象,利用正则表达式逐行解析源代码。主要处理流程如下图1所示。
RpgStruct结构图如图2所示。
其中,RPG结构树转成JAVA结构树的步骤是通过语法分析和转换,实现RPG程序RpgStruct类(RPG结构树)向JAVA结构树 ComposeDescriptor的转变。生成的每个JAVA程序对应 ComposeDescriptor对象,主要涉及F表、D表、子例程、内置函数、 COPY结构等语法转换,转换方式如图3所示。
其中,转换过程包括以下四个步骤:首先对RPG程序中F表的语法进行转换,其次对RPG程序中D表的语法进行转换,再次对子例程(自由格式)进行语法转换,最后是对COPY结构进行处理。具体处理流程如图4所示。
1、F表的语法转换
由于java程序中一般没有逻辑文件的概念,但相当于 DOMAIN/DAO。一般情况,数据库中每张表对应一个DOMAIN/DAO。如图5所示,在RPG中定义了逻辑文件(数据库的表),可以转成JAVA 程序中的DOMAIN/DAO。
除此之外,还需要处理RPG程序中的PREFIX等关键字,将这些关键字相应的信息保持在上下文中,以方便后续程序逻辑的转换。 PREFIX表示F表中的字段增加或者修改字段前缀,例如图6逻辑文件定义中,有PREFIX关键字P_,则表示此文件的属性字段名都会加上P_前缀,CDSVINO为其中的一个字段,在RPG程序中直接使用P_CDSVINO,而在JAVA中需要加上所属的对象。P_CDSVINO将变成了ddcdsp.setVino(…)形式。
2、D表的转换
RPG每个DS可以转成为一个JAVA内部类,下挂的变量相当于 JAVA内部类中的成员变量。如图7所示,RPG程序中定义了 DS_VLDT结构体,转换为JAVA的Ds_vldt内部类,而DS_VLDT 结构体下挂的V_TYPE和V_DATE转成java程序后对应Ds_vldt内部类的私有成员变量v_type和v_date,并生成相应的get和set方法。
除此之外,还需对LIKE等关键字进行一一处理。例如处理 LIKE关键字,首先需要找到CKRAQST所属类,再加载相应的类,通过反射机制获取CKRAQST的类型。如图8所示,RPG程序中 C_AQST变量like变量CKRAQST,如果CKRAQST如A型(字符型),则转成JAVA程序后,对应为String类型。
下表1中描述了RPG类型转成对应的JAVA类型,例如RPG程序中的A/O/U类型可转成java中的String类型。
Figure RE-GDA0002361980220000041
Figure RE-GDA0002361980220000051
表1
3、子例程的转换
RPG程序中的子例程是程序的主要处理逻辑部分,也是转成java 程序的关键。根据RPG语法特性和特征信息,使用不同的处理器 (Processor)进行语法分析和语法转换,具体处理器如下表2所示:
Figure RE-GDA0002361980220000052
Figure RE-GDA0002361980220000061
Figure RE-GDA0002361980220000071
表2
(1)Assign Val Processor处理器:
Assign Val Processor主要处理赋值、条件判断等语句的语法转换,是主要的语法转换器之一。主要涉及语法解析、类型转换、运算符优先级处理和转换等。赋值语句语法解析:主要思路是先把语句解析成树状结构,从顶向下解析;然后处理分析叶子节点每一个词组,然后从底向上融合。目前采用了把赋值语句、条件判断语句解析成树状结构,然后对叶子节点进行处理后再一层一层组装成符合java语法规范的语句。对于叶子节点进行处理,包括*BLANK转成java格式,单引号换成双引号,=转成==,对于字符型应该使用equals等等,还需要扩充变量、处理内置的方法(如%DEC、%LEN)等。如下图所示,下面以一个简单实例说明条件判断语句的语法转换过程。
例如IAIACST='T'AND%SUBST(IAUPDACBIS.ISKACF:1:1)<> 'N'语句的解析过程,先把语句解析成树状图如图9结构。处理左叶子节点,如图10所示。左叶子向上融合,如图11所示。处理右叶子节点如图12所示。右叶子节点向上融合如图13所示。从底向上,一层一层向上消去叶子节点,直到根部则获得最终的转换结果,如图14 实线框中表示最终的转换结果。
Big Decimal类型的处理:
在进行金额运算时,金额计算需要精确值,不能把RPG数值类型转成浮点数,而是转成Big Decimal。转成Big Decimal后,不能使用加减乘除(+-*/)等进行运算,而必须使用api进行处理。如图15 所示,RPG程序中两个金额相加和第三个金额进行比较,转成java 程序后,需要使用API的add方法和compare To方法进行处理。进行Big Decimal、Date等类型转换时,RPG语法和JAVA语法差异较大。实际转换过程中,由于情景较多,例如Big Decimal数组的处理、 Big Decimal和整数相加,Big Decimal和整形之间相互赋值等;需要考虑多种情况,不再一一赘述。
运算符优先级处理
在转换赋值表达式时,还需考虑运算符优先级。例如:a+b*c,假定a、b、c均为BigDecimal型,则需转换为a.add(b.multiply(c)),而不是a.add(b).multiply(c)。
具体处理方法是给高优先级运算符加括号,加括号后则可以消除所有运算符优先级,按普通赋值表达式统一处理。
例如:a+b*c添加括号后为a+(b*c),a+b+c添加括号后为(a+b) +c。如图16所示:
(2)Chain Processor处理器
Chain Processor主要解析CHAIN语句,在JAVA中一般都在DAO 层封装数据库操作。因而CHAIN语句翻译成JAVA后,主要调用DAO 层两个方法:setIndexedFieldName01(intlen)设置查询索引,01代表使用01索引,而len含义是使用01索引的前两个字段,调用Select With Lock()方法查询数据库表,并将查询结果返回,如图17所示。
(3)Clear Processor处理器
Clear在RPG中初始化相关变量值,翻译成JAVA时根据不同的平台可转换成new语句或调用对象的initialize方法。
(4)IF Processor处理器
IF Processor主要处理条件判断语句,涉及语法解析、类型转换、运算符优先级处理和转换、连接词的转换等。其语法解析可复用赋值语句处理器。
(5)Invocation Processor处理器
Invocation Processor处理器主要处理程序CALLP调用语句。
CALLP语句转换通过工厂方法创建对应的组件对象后,然后调用Process方法进行处理,并将请求对象送入,获得响应对象,如图18所示。
(6)Point Processor处理器
Point Processor主要处理%ADDR赋值语句。JAVA中没有指针的概念,目前此处理器只支持两种%ADDR语句的转换,一是接口,二是简单内存copy。
接口转换规则比较简单,强转成相应的类型即可,如图19所示。
内存copy的方式,主要分为以下三种情形:
把地址赋值给字符数组指针,其转换方法是通过反射机制获取连续变量名称,然后赋值给字符数组。转换效果如图20所示。
另外两种情况是把指针赋值给结构体数组或者结构体数组,这两种处理方式和上面一种类似。
(7)Test Processor处理器
Test Processor主要处理TEST语句的转换,其转换方法是封装 check Date方法,然后通过返回值判断格式是否正确,如图21 所示。
(8)Dou Processor和Dow Processor处理器
Dou Processor、Dow Processor主要处理DOU、DOW循环语句,主要分为以下两种情况进行转换:
(1)涉及数据库操作的循环语句,需要与SETLL和SETGT 等数据库操作语句配合转换。如图22所示,循环判断是否满足条件。
(2)一般条件循环语句。
对于一般条件循环语句,处理方式和IF Processor类似。
(9)Setll Processor和Setgt Processor处理器
Setll Processor、Setgt Processor主要处理RPG中SETLL和 SETGT语句,数据库操作语句的转换和DAO层封装相关。
SETLL转换方法是先设置索引以及所使用到的索引字段个数,然后通过DAO进行多笔查询,再把查询下标index置为-1备用;
SETGT转换方法类似,只是index设置为sql Data Table.get Row Count()。如图23所示。
(10)Read Processor和Reade Processor处理器
Read Processor、Reade Processor主要处理RPG中READ和 READE语句。结合SETLL和SETGT语句,需要将索引值加1,并设置响应的索引值。如图24所示。
(11)Readp Processor和Readpe Processor处理器
Readp Processor、Readpe Processor处理RPG中READP和 READPE语句。结合SETLL和SETGT语句,需要将索引值减1,并设置相应的索引值。
结合SETLL、READE、DOW等语句,其转换效果如图所示。如图25中RPG程序含义为循环读取表DPACRA02数据,如果查到满足条件数据则退出。
(12)Update Processor和Write Processor处理器
Update Processor、Write Processor主要处理RPG中UPDATE和 WRITE语句。基于目前平台,Update语句直接调用DAO层的update 方法即可,Write语句直接调用DAO层的insert方法。如图26所示。 (13)Select Processor处理器
Select Processor主要处理RPG中查询语句,先设置所使用的索引和字段数目,然后调用select方法,根据返回结果判断是否成功查询。如图27所示。
(14)Leave Processor和Iter Processor处理器
Leave Processor、Iter Processor分别处理RPG程序中LEAVE、 LEAVESR和ITER语句。LEAVE语句转成break语句,LEAVESR语句转成return语句,ITER语句转成continue语句。
(15)Other Processor和Enddo Processor处理器
Other Processor、Iter Processor主要处理OTHER、ENDDO语句, OTHER语句转成else语句,ENDO语句转成右大括号。
(16)For Processor和End for Processor处理器
For Processor、End for Processor主要处理RPG语句中的FOR 和ENDFOR语句。FOR语句的处理类似于赋值语句和条件判断语句的处理,请参考Assign Val Processor和IF Processor。End for Processor 在JAVA中添加}即可。
(17)Eval Processor处理器
Eval Processor处理RPG语句中的EVAL-CORR、EVALR语句。 EVAL-CORR语句比较特殊,JAVA中两个不同类型的变量无法直接赋值,需要通过Initialize方法进行处理。如图28所示。
(18)Monitor Processor、End Mon Processor、On Error Processor处理器
Monitor Processor、End Mon Processor、On Error Processor处理 RPG程序中Monitor、End Mon以及On Error语句,转换成JAVA的 try…catch语句。
(19)Comments Processor处理器
Comments Processor处理RPG程序当成注释放到程序中,方便对比。
3、内置函数的处理
对于RPG中的内置函数的转换方法是,如果jdk存在对应的api 则直接转换,否则封装成公用的静态方法。
4、COPY结构的处理
COPY结构主要引入RPG程序的头文件,头文件中定义了相关变量。因而其处理方法和上述D表的转换一致。
其中,根据JAVA结构树生成相应JAVA代码的步骤实现将RPG 程序中各语句语法完全转成JAVA程序语句语法后,根据生成JAVA 语句(存储在Compose Descriptor对象中),利用模板生成相应的类,组装成相应的java类。其中,根据模板生成相应的JAVA类相对于在程序中组装相应的类更灵活。
本发明的有益效果:借助本发明提供的RPG程序自动转成JAVA 程序的方法,可以让商业银行核心系统在面临从集中式架构向分布式架构转型过程中,能够非常有效地将多个程序(组件)全量转成JAVA 程序,从而节省巨大的人力、物力和财力。
具体实施方式
以下采用实施例和附图来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。
一种RPG程序自动转成JAVA程序的方法,其实现方式主要基于以下三个步骤:
(一)读取RPG源代码生成RPG结构树;
(二)根据RPG结构树转成对应的JAVA结构树;
(三)根据JAVA结构树生成相应的JAVA代码。
其中,读取RPG源代码生成RPG结构树的步骤主要实现把文本文件的源代码RPG结构树。
RPG程序主要分为4个部分,第一部分是F表,用于定义程序中需要操作的文件(数据库表);第二部分是D表,用于定义程序中需要使用到的变量;第三部分是COPY/INCLUDE,用于定义需要引入的头文件信息;第四部分是子例程,用于是程序的处理逻辑部分。
根据RPG程序的语法特点,在处理RPG程序四大部分时候,读取RPG源程序文本文件,生成RpgStruct对象,每个文本文件的源代码对应一个RpgStruct对象,利用正则表达式逐行解析源代码。主要处理流程如图1所示。
Rpg Struct结构图2所示。
其中,RPG结构树转成JAVA结构树的步骤是通过语法分析和转换,实现RPG程序RpgStruct类(RPG结构树)向JAVA结构树 Compose Descriptor的转变。生成的每个JAVA程序对应Compose Descriptor对象,主要涉及F表、D表、子例程、内置函数、COPY 结构等语法转换。转换方式如图3所示。
其中,转换过程包括以下四个步骤:首先对RPG程序中F表的语法进行转换,其次对RPG程序中D表的语法进行转换,再次对子例程 (自由格式)进行语法转换,最后是对COPY结构进行处理。具体处理流程如图4所示。
1、F表的语法转换
由于java程序中一般没有逻辑文件的概念,但相当于 DOMAIN/DAO。一般情况,数据库中每张表对应一个DOMAIN/DAO。如图5所示,在RPG中定义了逻辑文件(数据库的表),可以转成JAVA 程序中的DOMAIN/DAO。
除此之外,还需要处理RPG程序中的PREFIX等关键字,将这些关键字相应的信息保持在上下文中,以方便后续程序逻辑的转换。 PREFIX表示F表中的字段增加或者修改字段前缀,例如图6逻辑文件定义中,有PREFIX关键字P_,则表示此文件的属性字段名都会加上P_前缀,CDSVINO为其中的一个字段,在RPG程序中直接使用P_CDSVINO,而在JAVA中需要加上所属的对象。P_CDSVINO将变成了ddcdsp.setVino(…)形式。
2、D表的转换
RPG每个DS可以转成为一个JAVA内部类,下挂的变量相当于 JAVA内部类中的成员变量。如图7所示,RPG程序中定义了DS_VLDT结构体,转换为JAVA的Ds_vldt内部类,而DS_VLDT 结构体下挂的V_TYPE和V_DATE转成java程序后对应Ds_vldt内部类的私有成员变量v_type和v_date,并生成相应的get和set方法。
除此之外,还需对LIKE等关键字进行一一处理。例如处理LIKE 关键字,首先需要找到CKRAQST所属类,再加载相应的类,通过反射机制获取CKRAQST的类型。如图8所示,RPG程序中C_AQST 变量like变量CKRAQST,如果CKRAQST如A型(字符型),则转成JAVA程序后,对应为String类型。
见表1中描述了RPG类型转成对应的JAVA类型,例如RPG程序中的A/O/U类型可转成java中的String类型。
3、子例程的转换
RPG程序中的子例程是程序的主要处理逻辑部分,也是转成java 程序的关键。根据RPG语法特性和特征信息,使用不同的处理器 (Processor)进行语法分析和语法转换,具体处理器见表2所示:
(1)Assign Val Processor处理器:
Assign Val Processor主要处理赋值、条件判断等语句的语法转换,是主要的语法转换器之一。主要涉及语法解析、类型转换、运算符优先级处理和转换等。赋值语句语法解析:主要思路是先把语句解析成树状结构,从顶向下解析;然后处理分析叶子节点每一个词组,然后从底向上融合。目前采用了把赋值语句、条件判断语句解析成树状结构,然后对叶子节点进行处理后再一层一层组装成符合java语法规范的语句。对于叶子节点进行处理,包括*BLANK转成java格式,单引号换成双引号,=转成==,对于字符型应该使用equals等等,还需要扩充变量、处理内置的方法(如%DEC、%LEN)等。如下图所示,下面图9以一个简单实例说明条件判断语句的语法转换过程。
例如IAIACST='T'AND%SUBST(IAUPDACBIS.ISKACF:1:1)<> 'N'语句的解析过程:先把语句解析成树状图如图9结构。处理左叶子节点,如图10所示。左叶子向上融合,如图11所示。处理右叶子节点,如下图12所示。右叶子节点向上融合,如图13所示。从底向上,一层一层向上消去叶子节点,直到根部则获得最终的转换结果,如图14实线框中表示最终的转换结果。
Big Decimal类型的处理:
在进行金额运算时,金额计算需要精确值,不能把RPG数值类型转成浮点数,而是转成Big Decimal。转成Big Decimal后,不能使用加减乘除(+-*/)等进行运算,而必须使用api进行处理。如图15 所示,RPG程序中两个金额相加和第三个金额进行比较,转成java 程序后,需要使用API的add方法和compare To方法进行处理。
进行Big Decimal、Date等类型转换时,RPG语法和JAVA语法差异较大。实际转换过程中,由于情景较多,例如Big Decimal数组的处理、Big Decimal和整数相加,Big Decimal和整形之间相互赋值等;需要考虑多种情况,不再一一赘述。
运算符优先级处理
在转换赋值表达式时,还需考虑运算符优先级。例如:a+b*c,假定a、b、c均为BigDecimal型,则需转换为a.add(b.multiply(c)),而不是a.add(b).multiply(c)。
具体处理方法是给高优先级运算符加括号,加括号后则可以消除所有运算符优先级,按普通赋值表达式统一处理。
例如:a+b*c添加括号后为a+(b*c),a+b+c添加括号后为(a+b) +c。如图16所示。
(2)Chain Processor处理器
Chain Processor主要解析CHAIN语句,在JAVA中一般都在DAO 层封装数据库操作。因而CHAIN语句翻译成JAVA后,主要调用DAO 层两个方法:setIndexedFieldName01(intlen)设置查询索引,01代表使用01索引,而len含义是使用01索引的前两个字段,调用Select With Lock()方法查询数据库表,并将查询结果返回,如图17所示。
(3)Clear Processor处理器
Clear在RPG中初始化相关变量值,翻译成JAVA时根据不同的平台可转换成new语句或调用对象的initialize方法。
(4)IF Processor处理器
IF Processor主要处理条件判断语句,涉及语法解析、类型转换、运算符优先级处理和转换、连接词的转换等。其语法解析可复用赋值语句处理器。
(5)Invocation Processor处理器
Invocation Processor处理器主要处理程序CALLP调用语句。
CALLP语句转换通过工厂方法创建对应的组件对象后,然后调用Process方法进行处理,并将请求对象送入,获得响应对象。如图18所示。
(6)Point Processor处理器
Point Processor主要处理%ADDR赋值语句。JAVA中没有指针的概念,目前此处理器只支持两种%ADDR语句的转换,一是接口,二是简单内存copy。
接口转换规则比较简单,强转成相应的类型即可,如图19所示。
内存copy的方式,主要分为以下三种情形:
把地址赋值给字符数组指针,其转换方法是通过反射机制获取连续变量名称,然后赋值给字符数组。转换效果如图20所示。
另外两种情况是把指针赋值给结构体数组或者结构体数组,这两种处理方式和上面一种类似。
(7)Test Processor处理器
Test Processor主要处理TEST语句的转换,其转换方法是封装 check Date方法,然后通过返回值判断格式是否正确,如图21 所示。
(8)Dou Processor和Dow Processor处理器
Dou Processor、Dow Processor主要处理DOU、DOW循环语句,主要分为以下两种情况进行转换。
(1)、涉及数据库操作的循环语句,需要与SETLL和SETGT 等数据库操作语句配合转换。如图22所示,循环判断是否满足条件。
(2)一般条件循环语句。
对于一般条件循环语句,处理方式和IF Processor类似。
(9)Setll Processor和Setgt Processor处理器
Setll Processor、Setgt Processor主要处理RPG中SETLL和 SETGT语句,数据库操作语句的转换和DAO层封装相关。
SETLL转换方法是先设置索引以及所使用到的索引字段个数,然后通过DAO进行多笔查询,再把查询下标index置为-1备用;
SETGT转换方法类似,只是index设置为sql Data Table.get Row Count()。如图23所示。
(10)Read Processor和Reade Processor处理器
Read Processor、Reade Processor主要处理RPG中READ和 READE语句。结合SETLL和SETGT语句,需要将索引值加 1,并设置响应的索引值。如图24所示。
(11)Readp Processor和Readpe Processor处理器
Readp Processor、Readpe Processor处理RPG中READP和 READPE语句。结合SETLL和SETGT语句,需要将索引值减1,并设置相应的索引值。
结合SETLL、READE、DOW等语句,其转换效果如图25所示,图25中RPG程序含义为循环读取表DPACRA02数据,如果查到满足条件数据则退出。
(12)Update Processor和Write Processor处理器
Update Processor、Write Processor主要处理RPG中UPDATE和 WRITE语句。基于目前平台,Update语句直接调用DAO层的update 方法即可,Write语句直接调用DAO层的insert方法,如图26所示。 (13)Select Processor处理器
Select Processor主要处理RPG中查询语句,先设置所使用的索引和字段数目,然后调用select方法,根据返回结果判断是否成功查询。如图27所示。
(14)Leave Processor和Iter Processor处理器
Leave Processor、Iter Processor分别处理RPG程序中LEAVE、 LEAVESR和ITER语句。LEAVE语句转成break语句,LEAVESR语句转成return语句,ITER语句转成continue语句。
(15)Other Processor和Enddo Processor处理器
Other Processor、Iter Processor主要处理OTHER、ENDDO语句, OTHER语句转成else语句,ENDO语句转成右大括号。
(16)For Processor和End for Processor处理器
For Processor、End for Processor主要处理RPG语句中的FOR 和ENDFOR语句。FOR语句的处理类似于赋值语句和条件判断语句的处理,请参考Assign Val Processor和IF Processor。End for Processor 在JAVA中添加}即可。
(17)Eval Processor处理器
Eval Processor处理RPG语句中的EVAL-CORR、EVALR语句。 EVAL-CORR语句比较特殊,JAVA中两个不同类型的变量无法直接赋值,需要通过Initialize方法进行处理。如图28所示。
(18)Monitor Processor、End Mon Processor、On Error Processor处理器
Monitor Processor、End Mon Processor、On Error Processor处理 RPG程序中Monitor、End Mon以及On Error语句,转换成JAVA的 try…catch语句。
(19)Comments Processor处理器
Comments Processor处理RPG程序当成注释放到程序中,方便对比。
3、内置函数的处理
对于RPG中的内置函数的转换方法是,如果jdk存在对应的api 则直接转换,否则封装成公用的静态方法。
4、COPY结构的处理
COPY结构主要引入RPG程序的头文件,头文件中定义了相关变量。因而其处理方法和上述D表的转换一致。
其中,根据JAVA结构树生成相应JAVA代码的步骤实现将RPG 程序中各语句语法完全转成JAVA程序语句语法后,根据生成JAVA 语句(存储在Compose Descriptor对象中),利用模板生成相应的类,组装成相应的java类。
所有上述的首要实施这一知识产权,并没有设定限制其他形式的实施这种新产品和/或新方法。本领域技术人员将利用这一重要信息,上述内容修改,以实现类似的执行情况。但是,所有修改或改造基于本发明新产品属于保留的权利。
以上所述,仅是本发明的较佳实施例而已,并非是对本发明作其它形式的限制,任何熟悉本专业的技术人员可能利用上述揭示的技术内容加以变更或改型为等同变化的等效实施例。但是凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与改型,仍属于本发明技术方案的保护范围。

Claims (8)

1.一种RPG程序自动转成JAVA程序的方法,其特征在于:其实现方式主要基于以下三个步骤:
(一)读取RPG源代码生成RPG结构树;
(二)根据RPG结构树转成对应的JAVA结构树;
(三)根据JAVA结构树生成相应的JAVA代码。
2.如权利要求1所述的方法,其特征在于:读取RPG源代码生成RPG结构树包括处理RPG程序中的操作文件,变量,头文件信息,以及逻辑部分的步骤。
3.如权利要求1所述的方法,其特征在于:根据RPG结构树转成对应的JAVA结构树包括分别对RPG程序中操作文件,变量,头文件信息,以及逻辑部分进行语法转换和处理的步骤。
4.如权利要求3所述的方法,其特征在于:对RPG程序中操作文件进行语法转换时,将所述RPG程序中定义的文件转成JAVA程序中DOMAIN/DAO的对象。
5.如权利要求3所述的方法,其特征在于:对RPG程序中变量进行语法转换时,利用所述RPG程序中的DS结构转成JAVA内部类,其下挂变量转成内部类的成员变量。
6.如权利要求3所述的方法,其特征在于:对RPG程序中内部函数进行语法转换时,JAVA的jdk中存在对应的api,进行直接转换。
7.如权利要求3所述的方法,其特征在于:对RPG程序中内部函数进行语法转换时,JAVA的jdk不存在对应的api,封装成公用的静态方法。
8.如权利要求3所述的方法,其特征在于:对RPG程序中头文件信息进行语法转换时,结构转成JAVA内部类,其下挂变量转成内部类的成员变量。
CN201910673794.0A 2019-07-24 2019-07-24 一种rpg程序自动转成java程序的方法 Active CN110879710B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910673794.0A CN110879710B (zh) 2019-07-24 2019-07-24 一种rpg程序自动转成java程序的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910673794.0A CN110879710B (zh) 2019-07-24 2019-07-24 一种rpg程序自动转成java程序的方法

Publications (2)

Publication Number Publication Date
CN110879710A true CN110879710A (zh) 2020-03-13
CN110879710B CN110879710B (zh) 2023-07-07

Family

ID=69728139

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910673794.0A Active CN110879710B (zh) 2019-07-24 2019-07-24 一种rpg程序自动转成java程序的方法

Country Status (1)

Country Link
CN (1) CN110879710B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112346737A (zh) * 2021-01-08 2021-02-09 深圳壹账通智能科技有限公司 编程语言翻译模型的训练方法、装置、设备及存储介质
CN112416365A (zh) * 2020-11-18 2021-02-26 中信银行股份有限公司 文件转换方法、装置及存储介质
CN112527309A (zh) * 2020-12-11 2021-03-19 中信银行股份有限公司 As400操作语句转换优化方法、装置、设备及存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6467079B1 (en) * 1999-03-30 2002-10-15 International Business Machines Corporation Report program language source code translation to object-oriented language source code which emulates report program language behavior
WO2002093367A1 (en) * 2001-05-11 2002-11-21 Computer Associates Think, Inc. Method and system for transforming legacy software applications into modern object-oriented systems
CN1855052A (zh) * 2005-04-25 2006-11-01 罗迪平 一种从树型结构数据和一组代码片断结构体生成目标源代码的方法
CN101208660A (zh) * 2005-06-27 2008-06-25 奎朴兹有限公司 代码转换
US20130227533A1 (en) * 2008-11-06 2013-08-29 Albert Donald Tonkin Code transformation
JP5405684B1 (ja) * 2013-03-28 2014-02-05 株式会社バリュー ソースプログラムのプログラミング言語変換装置
CN107111503A (zh) * 2014-12-22 2017-08-29 华为技术有限公司 用于将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的方法
CN107861728A (zh) * 2017-10-25 2018-03-30 深圳四方精创资讯股份有限公司 用于传统程序语言向现代程序语言转换的方法及其系统

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6467079B1 (en) * 1999-03-30 2002-10-15 International Business Machines Corporation Report program language source code translation to object-oriented language source code which emulates report program language behavior
WO2002093367A1 (en) * 2001-05-11 2002-11-21 Computer Associates Think, Inc. Method and system for transforming legacy software applications into modern object-oriented systems
CN1855052A (zh) * 2005-04-25 2006-11-01 罗迪平 一种从树型结构数据和一组代码片断结构体生成目标源代码的方法
CN101208660A (zh) * 2005-06-27 2008-06-25 奎朴兹有限公司 代码转换
US20130227533A1 (en) * 2008-11-06 2013-08-29 Albert Donald Tonkin Code transformation
JP5405684B1 (ja) * 2013-03-28 2014-02-05 株式会社バリュー ソースプログラムのプログラミング言語変換装置
CN107111503A (zh) * 2014-12-22 2017-08-29 华为技术有限公司 用于将呈第一编程语言的源代码编译为呈第二编程语言的程序代码的方法
CN107861728A (zh) * 2017-10-25 2018-03-30 深圳四方精创资讯股份有限公司 用于传统程序语言向现代程序语言转换的方法及其系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
HARRY M. SNEED 等: "Migrating AS400-COBOL to Java A Report from the Field", 《2013 17TH EUROPEAN CONFERENCE ON SOFTWARE MAINTENANCE AND REENGINEERING》, pages 232 - 240 *
程亚强: "基于AS/400的FATCA系统设计与实现", 《 中国优秀硕士学位论文全文数据库信息科技辑》, pages 138 - 184 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112416365A (zh) * 2020-11-18 2021-02-26 中信银行股份有限公司 文件转换方法、装置及存储介质
CN112416365B (zh) * 2020-11-18 2024-05-24 中信银行股份有限公司 文件转换方法、装置及存储介质
CN112527309A (zh) * 2020-12-11 2021-03-19 中信银行股份有限公司 As400操作语句转换优化方法、装置、设备及存储介质
CN112527309B (zh) * 2020-12-11 2024-08-06 中信银行股份有限公司 As400操作语句转换优化方法、装置、设备及存储介质
CN112346737A (zh) * 2021-01-08 2021-02-09 深圳壹账通智能科技有限公司 编程语言翻译模型的训练方法、装置、设备及存储介质
CN112346737B (zh) * 2021-01-08 2021-04-13 深圳壹账通智能科技有限公司 编程语言翻译模型的训练方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN110879710B (zh) 2023-07-07

Similar Documents

Publication Publication Date Title
CN107644323B (zh) 一种面向业务流的智能审核系统
TW308676B (en) Incremental compilation of C++ programs
US9959098B1 (en) Data processing systems and methods
US6055370A (en) Apparatus which allows data sharing amongst computer programs from different program environments
US9122540B2 (en) Transformation of computer programs and eliminating errors
US7460996B2 (en) Using strong data types to express speech recognition grammars in software programs
WO2014078747A1 (en) Natural language command string for controlling target applications
US8849673B2 (en) Rule generation
CN110879710A (zh) 一种rpg程序自动转成java程序的方法
US20070050707A1 (en) Enablement of multiple schema management and versioning for application-specific xml parsers
CN110019314B (zh) 基于数据项分析的动态数据封装方法、客户端和服务端
CN107103007B (zh) 一种sql代码转换方法及装置
CN111008020B (zh) 将逻辑表达式解析为通用查询语句的方法
CN113010183B (zh) 一种代码转换方法及装置
US11537448B1 (en) Adapting application programming interfaces with schema mappings
CN108536728A (zh) 一种数据查询方法和装置
US7711740B2 (en) Data access layer design and code generation
CN111309751A (zh) 大数据处理方法及装置
Gil et al. Formal language recognition with the Java type checker
CN108766507A (zh) 一种基于CQL与标准信息模型openEHR的临床质量指标计算方法
US20230185639A1 (en) Mapping application programming interface schemas with semantic representations
CN113608748B (zh) C语言转换Java语言的数据处理方法、装置及设备
CN110928535B (zh) 衍生变量部署方法、装置、设备及可读存储介质
US20030196195A1 (en) Parsing technique to respect textual language syntax and dialects dynamically
CN114238469A (zh) 数据提取接口开放方法、装置、计算机设备及存储介质

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