IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社日立製作所の特許一覧

特許7558014プログラム変換システム及びプログラム変換方法
<>
  • 特許-プログラム変換システム及びプログラム変換方法 図1
  • 特許-プログラム変換システム及びプログラム変換方法 図2
  • 特許-プログラム変換システム及びプログラム変換方法 図3
  • 特許-プログラム変換システム及びプログラム変換方法 図4
  • 特許-プログラム変換システム及びプログラム変換方法 図5
  • 特許-プログラム変換システム及びプログラム変換方法 図6
  • 特許-プログラム変換システム及びプログラム変換方法 図7
  • 特許-プログラム変換システム及びプログラム変換方法 図8
  • 特許-プログラム変換システム及びプログラム変換方法 図9A
  • 特許-プログラム変換システム及びプログラム変換方法 図9B
  • 特許-プログラム変換システム及びプログラム変換方法 図9C
  • 特許-プログラム変換システム及びプログラム変換方法 図10
  • 特許-プログラム変換システム及びプログラム変換方法 図11
  • 特許-プログラム変換システム及びプログラム変換方法 図12
  • 特許-プログラム変換システム及びプログラム変換方法 図13
  • 特許-プログラム変換システム及びプログラム変換方法 図14
  • 特許-プログラム変換システム及びプログラム変換方法 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-19
(45)【発行日】2024-09-30
(54)【発明の名称】プログラム変換システム及びプログラム変換方法
(51)【国際特許分類】
   G06F 8/40 20180101AFI20240920BHJP
【FI】
G06F8/40
【請求項の数】 8
(21)【出願番号】P 2020161507
(22)【出願日】2020-09-25
(65)【公開番号】P2022054354
(43)【公開日】2022-04-06
【審査請求日】2023-08-01
(73)【特許権者】
【識別番号】000005108
【氏名又は名称】株式会社日立製作所
(74)【代理人】
【識別番号】110001689
【氏名又は名称】青稜弁理士法人
(72)【発明者】
【氏名】三浦 洋一郎
(72)【発明者】
【氏名】栗田 繁
(72)【発明者】
【氏名】宮城 翔一
【審査官】西間木 祐紀
(56)【参考文献】
【文献】特許第6475888(JP,B1)
【文献】特許第6458196(JP,B1)
【文献】特許第6457692(JP,B1)
【文献】特許第6261147(JP,B1)
【文献】特開2016-115070(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/40
(57)【特許請求の範囲】
【請求項1】
処理装置と記憶装置を有し、COPY句を含むCOBOLプログラムをJavaプログラムに変換するプログラム変換システムであって、
前記記憶装置は項目名対応表を有し、
前記処理装置は、
前記COBOLプログラムのCOPY句ファイルを入力としてJavaデータクラスを出力し、前記COBOLプログラムと前記Javaプログラムの種別と名称の対応を前記項目名対応表に格納するCOPY句変換処理部と、
COBOLプログラムファイルを入力として、前記項目名対応表を参照し、Javaプログラムを出力するプログラム変換処理部と
を備えることを特徴とするプログラム変換システム。
【請求項2】
請求項1に記載のプログラム変換システムであって、
前記COPY句変換処理部は、前記COPY句ファイルからCOPY句を1ファイルずつ取得し、取得したCOPY句に対して1ファイルずつCOPY句解析処理を行ない、前記COPY句ファイルから取得したすべてのCOPY句について前記COPY句解析処理を行なうことを特徴とするプログラム変換システム。
【請求項3】
請求項2に記載のプログラム変換システムであって、
前記COPY句解析処理は、処理対象行に含まれるCOBOLのデータ項目名及びCOPY句名と対応するJavaに変換した変数名とJavaデータクラス名を対にして前記項目名対応表に格納することを特徴とするプログラム変換システム。
【請求項4】
請求項2に記載のプログラム変換システムであって、
前記COPY句解析処理は、前記COPY句の定義をJavaの定義に変換する際に、階層の単位に分割して、前記Javaデータクラスを作成しデータ定義を行なうことを特徴とするプログラム変換システム。
【請求項5】
請求項3または4に記載のプログラム変換システムであって、
前記プログラム変換処理部は、前記COBOLプログラムファイルからCOBOLプログラムを1ファイルずつ取得し、取得したCOBOLプログラムに対して1ファイルずつデータ定義部解析処理と処理部解析処理を行ない、前記COBOLプログラムファイルから取得したすべてのCOBOLプログラムについて前記データ定義部解析処理と前記処理部解析処理を行なうことを特徴とするプログラム変換システム。
【請求項6】
請求項5に記載のプログラム変換システムであって、
前記データ定義部解析処理は、前記Javaデータクラスのオブジェクトを格納する変数について階層項目名を付けオブジェクトを生成することを特徴とするプログラム変換システム。
【請求項7】
請求項5に記載のプログラム変換システムであって、
前記データ定義部解析処理は、前記Javaデータクラスのインスタンス生成時に、インスタンス変数名にREPLACINGする文字列をインスタンス変数名に付与することを特徴とするプログラム変換システム。
【請求項8】
処理装置がCOPY句を含むCOBOLプログラムをJavaプログラムに変換することを実行するプログラム変換方法であって、
前記処理装置は、
前記COBOLプログラムのCOPY句ファイルを入力としてJavaデータクラスを出力し、前記COBOLプログラムと前記Javaプログラムの種別と名称の対応を項目名対応表に格納する手段と、
COBOLプログラムファイルを入力として、前記項目名対応表を参照し、Javaプログラムを出力する手段と
を実行することを特徴とするプログラム変換方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム変換システムに関する。
【背景技術】
【0002】
オープン環境もしくはクラウド環境の増大化に伴い、COBOLなどで構築された大規模な基幹システムのJava(登録商標)への変換が注目されている。
【0003】
本技術分野に関連する技術として特許文献1がある。特許文献1では、COBOLにおけるプログラムとCOPY句をコンパイラで一つのソースに展開し、それをJavaに変換し、プログラムとCOPY句相当に再度切り分けるプログラム変換システムが開示されている。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2016-115071号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
基幹システムで構築されるほとんどのCOBOL資産では、COPY句と呼ばれる機構を使い、データ項目定義(変数定義)の部分的な共通化を行っている。
【0006】
COPY句は複数プログラムから使用することが可能な共有資産であり、データ項目名は以下のように定義することができる。
(1)データの定義を階層的に行うことができ、同一の階層でなければ、同じ名称の変数を定義が可能である。重複するデータ項目には項目使用時に“OF修飾”を行うことで項目名を一意に特定している。
(2)1つのプログラムから複数のCOPY句を呼び出し、プレフィックスをCOBOLプログラム側で与え、データコンパイルの際に項目名称を変更し、データ項目が重複しない仕組みを“REPLACING句”としてCOBOLコンパイラが提供している。
【0007】
ここで、Javaでは上記と同等の仕組みがない。そのためCOBOLからJavaへの変換を実施するうえで、上記のようなCOBOL言語の対応が課題となっている。
【0008】
すなわち、課題1として、Javaでは階層型の定義ができず、“OF修飾”の概念もないため、重複するデータ項目を区別することができない。
【0009】
課題2として、COBOL言語で“REPLACING句”を使用しているCOPY句をJavaに変換した場合、Javaではコンパイル時に変数名を置き換えるということができない。その結果、プログラム側で変数名を付け替えてしまうことになり、各プログラム専用のデータ定義を作成せざるを得ない。
【0010】
特許文献1は、COBOLからJavaへの変換においてコンパイラによる展開を行っているが、コンパイラによる展開を行わず直接変換する際の上記の“OF修飾”や“REPLACING句”の解決に対して記載されていない。
【0011】
本発明は、COBOLからJavaへの変換においてプログラムとCOPY句を直接変換する際に“OF修飾”や“REPLACING句”の課題を解決するプログラム変換システム及びプログラム変換方法を提供することを目的とする。
【課題を解決するための手段】
【0012】
本発明は、その一例を挙げるならば、処理装置と記憶装置を有し、COPY句を含むCOBOLプログラムをJavaプログラムに変換するプログラム変換システムであって、記憶装置は項目名対応表を有し、処理装置は、COBOLプログラムのCOPY句ファイルを入力としてJavaデータクラスを出力し、COBOLプログラムとJavaプログラムの種別と名称の対応を項目名対応表に格納するCOPY句変換処理部と、COBOLプログラムファイルを入力として、項目名対応表を参照し、Javaプログラムを出力するプログラム変換処理部とを備える。
【発明の効果】
【0013】
本発明によれば、COBOLからJavaへの変換においてプログラムとCOPY句を直接変換する際に“OF修飾”や“REPLACING句”の課題を解決するプログラム変換システム及びプログラム変換方法を提供できる。
【図面の簡単な説明】
【0014】
図1】実施例1におけるプログラム変換システムの概略構成図である。
図2】実施例1におけるCOPY句変換処理の全体処理フローチャートである。
図3】実施例1におけるCOPY句変換処理内のCOPY句解析処理の処理フローチャートである。
図4】実施例1におけるプログラム変換処理の全体処理フローチャートである。
図5】実施例1におけるプログラム変換処理内のデータ定義部解析処理の処理フローチャートである。
図6】実施例1におけるプログラム変換処理内の処理部解析処理の処理フローチャートである。
図7】実施例1におけるCOBOLCOPY句ファイルの例を示す図である。
図8】実施例1におけるCOBOLプログラムファイルの例を示す図である。
図9A】実施例1におけるJavaデータクラスの例を示す図である。
図9B】実施例1におけるJavaデータクラスの例を示す図である。
図9C】実施例1におけるJavaデータクラスの例を示す図である。
図10】実施例1における変換後のJavaプログラムの具体例を示す図である。
図11】実施例1における項目対応表の例を示す図である。
図12】実施例2におけるプログラム変換処理内のデータ定義部解析処理の処理フローチャートである。
図13】実施例2におけるCOBOLCOPY句ファイル、及び、COBOLプログラムファイルの例を示す図である。
図14】実施例2における変換後のJavaプログラムの具体例を示す図である。
図15】実施例2における項目対応表の例を示す図である。
【発明を実施するための形態】
【0015】
以下、本発明の実施例について図面を用いて説明する。
【実施例1】
【0016】
図1は、本実施例におけるプログラム変換システムの概略構成図である。図1において、プログラム変換システム100は、処理部10と記憶部20で構成される。また、処理部10はCOPY句変換処理11とプログラム変換処理12の機能を有する。また、図示しない入出力インターフェースを介して各種データファイルである、COBOLCOPY句ファイル30、Javaデータクラス60、COBOLプログラムファイル40、Javaプログラム50が入出力される。
【0017】
COPY句変換処理11は、COBOLCOPY句ファイル30を入力とし、Javaデータクラス60を出力する。また後続のプログラム変換処理12へ引き継ぐ項目名対応表21を記憶部20保持する。
【0018】
また、プログラム変換処理12は、COBOLプログラムファイル40を入力として、項目名対応表21を参照し、Javaプログラム50を出力する。
【0019】
なお、図1のプログラム変換システム100は、ハードウェアイメージとしては、一般的な情報処理装置である、処理装置(CPU)と記憶装置(メモリ)と入出力インターフェース(I/F)を有する装置によって実現される。すなわち、プログラム変換システム100の処理部10のCOPY句変換処理11とプログラム変換処理12は、記憶装置に格納されたそれらの処理プログラムをCPUがソフトウェア処理することにより実行される。また、記憶部20は記憶装置に対応する。
【0020】
図2は、本実施例におけるCOPY句変換処理11の全体処理フローチャートである。図2において、まず、ステップS11において、COBOLCOPY句ファイル30からCOPY句を1ファイルずつ取得する。
【0021】
図7にCOBOLCOPY句ファイル30の例を示す。図7において、31はCOBOLのCOPY句のデータ定義1の内容を示し、32はCOBOLのCOPY句のデータ定義2の内容を示している。33は基本項目として階層01において文字型の8桁の変数AAAAとBBBBを定義している。また、34は集団項目として階層01において変数CCCCを定義している。また、35はCOPY句を取り込む命令であるCOPY文の処理を定義しており、COPY句のデータ定義2を取り込むことを定義している。
【0022】
次に、図2のステップS12において、ステップS11での取得の結果、COBOLCOPY句ファイル30からすべてのCOPY句を取得済の場合は、処理を終了する。ステップS12において、すべてのCOPY句を取得済でない場合は、ステップS20において、取得したCOCPY句に対して、1ファイルずつCOPY句解析処理を行ない、その後ステップS11に戻る。
【0023】
図3は、本実施例におけるCOPY句変換処理11内のCOPY句解析処理S20の処理フローチャートである。図3において、まず、ステップS21において、Javaプログラム側での定義、及び、Javaオブジェクト生成用のJavaデータクラス60を作成し出力する。また、項目名対応表21にも格納する。具体的には、Javaデータクラス60の例として、図9A図9B図9Cを示す。また、項目名対応表21の例として図11を示す。すなわち、図7の基本項目としての階層01における文字型の8桁の変数AAAAとBBBBの定義33に対応して、図9Aが作成され、図11の項目名対応表21の項番1-4が格納される。また、同様に、図7の集団項目としての階層01における変数CCCCの定義34に対応して、図9Bが作成され、図11の項目名対応表21の項番5-6が格納される。さらに、図7のCOPY句のデータ定義2である32、35に対応して、図9Cが作成され、図11の項目名対応表21の項番8が格納される。
【0024】
次にステップS22において、COPY句から1行ずつ定義内容を取り出して順次ステップS23以降の処理を行う。
ステップS23において、ステップS22での取得の結果、COPY句からすべての行を取得済である場合は、ステップS32に進む。ステップS23において、すべての行を取得済でない場合は、ステップS24に進み、処理対象行に含まれる項目が集団項目かを判断し、集団項目ではない場合、ステップS25に進み、集団項目の場合はステップS27に進む。
【0025】
ステップS25では、処理対象行の集団項目の階層とひとつ前の処理対象行の階層の比較結果により処理の振り分けを行う。そして、ステップS25で前の行より「上位の階層」の場合は、ステップS32の処理に進む。ステップS25で前の行より「下位の階層」の場合は、ステップS26に進み、階層が異なるので新たにデータクラスを作成するため、処理対象行の階層を第一階層として、新たにCOPY句解析処理を行ない、ステップS27に進む。ステップS25で前の行と階層が「その他」場合は、ステップS27に進む。
【0026】
ステップS27では、処理対象行に含まれる項目の種類によって処理を振り分ける。すなわち、処理対象行に含まれる項目がCOPY文の場合ステップS28に進み、COBOLのCOPY文をJavaのデータクラスを格納する変数としてJavaクラス部に定義する。具体的には、図7のCOPY句のデータ定義2である32、35に対応して、図9CのJavaデータクラスが作成される。また、処理対象行に含まれる項目が集団項目の場合ステップS29に進み、COBOLのデータ項目をJavaのデータクラスを格納する変数としてJavaクラス部に定義する。具体的には、図7の集団項目としての階層01における変数CCCCの定義34に対応して、図9BのJavaデータクラスが作成される。また、処理対象行に含まれる項目が基本項目の場合ステップS30に進み、COBOLのデータ項目をJava変数としてJavaクラス部に定義する。具体的には、図7の基本項目としての階層01における変数AAAAとBBBBの定義33に対応して、図9AのJavaデータクラスが作成される。
【0027】
ステップS28、S29、S30の何れかの処理後は、ステップS31に進み、処理対象行に含まれるCOBOLのデータ項目名、COPY句名と対応するJavaに変換した変数名とデータクラス名を対にして項目名対応表21に格納する。そして、ステップS22に戻り処理を繰り返す。
【0028】
ステップS32では、ステップS28、S29、S30それぞれで定義した各変数をもとに、オブジェクトを作成する処理を定義する。具体的には、図9Aの67の部分、図9Bの76の部分、図9Cの86の部分が対応する。
【0029】
そして、ステップS33で図9A図9B図9Cに示すようなJavaデータクラス60を出力する。
【0030】
図4は、本実施例におけるプログラム変換処理12の全体処理フローチャートである。図4において、まず、ステップS41において、COBOLプログラムファイル40からプログラムを1ファイルずつ取得する。
【0031】
図8にCOBOLプログラムファイル40の例を示す。図8において、41はCOBOLプログラムファイル40内のCOBOLプログラムの例であり、42は、データ部の例としてCOPY句のデータ定義1を示し、43は処理部の例として“OF修飾”を用い、COPY句のデータ定義2の変数名AAAA(OF修飾)を変数名AAAAへ移動するMOVE命令、及び、変数名BBBBをCOPY句のデータ定義2の変数名BBBB(OF修飾)へ移動するMOVE命令を示している。
【0032】
次に、図4のステップS42において、ステップS41での取得の結果、COBOLプログラムファイル40からすべてのプログラムを取得済の場合は、処理を終了する。ステップS42において、すべてのプログラムを取得済でない場合は、ステップS50において、取得したプログラムに対して、1ファイルずつデータ定義部解析処理を行なう。そして、ステップS60において1ファイルずつ処理部解析処理を行う。その後ステップS41に戻る。
【0033】
図5は、本実施例におけるプログラム変換処理12内のデータ定義部解析処理S50の処理フローチャートである。図5において、まず、ステップS51において、処理対象プログラムのソースコードを先頭から順次取得する。次にステップS52において、取得した処理対象行がデータ定義部でない場合は、ステップS51に戻って次のソースコードを取得する。
【0034】
ステップS52において取得した処理対象行がデータ定義部である場合は、ステップS53に進み、データ定義部の処理対象行のデータ項目部分を取得する。
【0035】
そして、ステップS54において、データ定義部が終了した場合は、処理を終了する。ステップS54においてデータ定義部が終了でない場合は、ステップS55に進み、COBOLプログラムのCOPY文の名称を項目名対応表21の内容をもとにJavaのデータクラス名に対応させ、Javaデータクラス60の呼び出し処理を行いJavaプログラム50に出力する。変換後のJavaプログラム50の具体例を図10に示す。図8のデータ部の例としてCOPY句のデータ定義1である42が図10の52の部分に対応する。ステップS55の処理後はステップS53に戻り、データ項目の取得を繰り返す。
【0036】
図6は、本実施例におけるプログラム変換処理12内の処理部解析処理S60の処理フローチャートである。図6において、まず、ステップS61において、処理対象プログラムのソースコードを先頭から順次取得する。次にステップS62において、取得した処理対象行が処理部でない場合は、ステップS61に戻って次のソースコードを取得する。
【0037】
ステップS62において取得した処理対象行が処理部である場合は、ステップS63に進み、処理部の処理対象行のデータ項目部分を取得する。
【0038】
そして、ステップS64において、処理部が終了した場合は、処理を終了する。ステップS64において処理部が終了でない場合は、ステップS65に進み、COBOLプログラムのデータ項目の名称を項目名対応表21の内容をもとにJavaの変数名に対応させ、Java変数名で出力する。具体的には図8の43の部分の変数名が図10の53の変数名に対応する。
【0039】
次にステップS66において、COBOL言語の処理命令をJava言語に変換し、ステップS65で変換した変数名とともに、Javaプログラム50として出力する。
【0040】
このように、本実施例では、COBOLのCOPY句の定義をJavaの定義に変換する際に、階層の単位に分割して、Javaデータクラスを作成しデータ定義を行う。そして、このJavaデータクラスのオブジェクトを格納する変数については、階層項目名を付けオブジェクトを生成する。これにより、COBOLからJavaへの変換においてプログラムとCOPY句を直接変換する際に“OF修飾”の課題を解決し、同一名称で別の変数を一意に識別し、データアクセスの実現が可能になるプログラム変換システム及びプログラム変換方法を提供できる。
【実施例2】
【0041】
本実施例は、COBOLからJavaへの変換においてCOPY句を用いた“REPLACING句”の課題を解決するプログラム変換システム及びプログラム変換方法について説明する。
【0042】
本実施例において、プログラム変換システムの概略構成図は図1と同じであり、COPY句変換処理の全体処理フローチャートも図2と同じであり、COPY句変換処理内のCOPY句解析処理の処理フローチャートも図3と同じであり、プログラム変換処理の全体処理フローチャートも図4と同じである。
【0043】
図12は、本実施例におけるプログラム変換処理内のデータ定義部解析処理S50の処理フローチャートである。
図12において、図5と同じ構成は同じ符号を付し、その説明は省略する。図12において、図5と異なる点は、ステップS56、S57である。
【0044】
図12において、ステップS54においてデータ定義部が終了でない場合は、ステップS56に進み、REPLACINGの内容を付加して、COBOLプログラムのCOPY文の名称を項目名対応表21の内容をもとにJavaのデータクラス名に対応させ、Javaデータクラス60の呼び出し処理を行いJavaプログラム50に出力する。
【0045】
図13に、本実施例におけるCOBOLCOPY句ファイル30、及び、COBOLプログラムファイル40の例を示す。図13において、36はCOBOLのCOPY句のデータ定義1の内容を示し、37は基本項目として階層01において文字型の8桁の変数ABC-AAAAとABC-BBBBを定義している。また、44はCOBOLプログラムファイル40内のCOBOLプログラムの例であり、45はデータ定義部の例として、ABCをXX及びYYに置き換えてCOPY句のデータ定義1を取り込むことを示し、処理部の例とし46、47で示す置き換えたXX、YYを用い、変数名XX-AAAAとYY-BBBBを変数名YY-AAAAとXX-BBBBへ移動するMOVE命令を示している。
【0046】
図14は、本実施例における変換後のJavaプログラム50の具体例である。図13の45、46、47がそれぞれ、図14の54、55及び57、56及び58の部分に対応する。
【0047】
図12に戻って、ステップS56の次はステップS57に進み、項目名対応表21にREPLACINGで変換する部分を除外した項目名を追加する。図15は、本実施例における項目名対応表21の例であり、ステップS57での処理は、図15の項番5-8に対応する。
【0048】
ステップS57の処理後はステップS53に戻り、データ項目の取得を繰り返す。
【0049】
このように、本実施例では、COBOLのCOPY句の定義をJavaの定義に変換する際に、階層の単位に分割して、Javaデータクラスを作成しデータ定義を行う。そして、Javaデータクラスのインスタンス生成時に、インスタンス変数名にxxやyyなどREPLACINGする文字列(置換後文字列)をインスタンス変数名の前or後に付与する。これにより、COBOLからJavaへの変換においてプログラムとCOPY句を直接変換する際に“REPLACING句”の課題を解決し、Javaデータクラスのクラス名に関係なく、Java処理クラス側でインスタンス名を切り替え可能になるため、1つのJava処理クラスの中で同じJavaデータクラス(コピー句に相当するクラス)を呼び出しているケース、及び、複数のJava処理クラスで同じJavaデータクラスを使用している場合のいずれについても、Javaデータクラスを共用することが可能になる。
【0050】
以上実施例について説明したが、本発明は、上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した各実施例は、本発明を分かりやすく説明するために詳細に説明したものであり、本発明が、必ずしも説明した全ての構成要素を備えるものに限定されるものではない。また、ある実施例の構成の一部を、他の実施例の構成に置き換えることが可能であり、ある実施例の構成に、他の実施例の構成を加えることも可能となる。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能となる。
【符号の説明】
【0051】
10:処理部、11:COPY句変換処理、12:プログラム変換処理、20:記憶部、21:項目名対応表、30:COBOLCOPY句ファイル、40:COBOLプログラムファイル、50:Javaプログラム、60:Javaデータクラス、100:プログラム変換システム。
図1
図2
図3
図4
図5
図6
図7
図8
図9A
図9B
図9C
図10
図11
図12
図13
図14
図15