特許第6982920号(P6982920)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ 株式会社SHIFTの特許一覧

<>
  • 特許6982920-ソースコード変換装置、及びプログラム 図000002
  • 特許6982920-ソースコード変換装置、及びプログラム 図000003
  • 特許6982920-ソースコード変換装置、及びプログラム 図000004
  • 特許6982920-ソースコード変換装置、及びプログラム 図000005
  • 特許6982920-ソースコード変換装置、及びプログラム 図000006
  • 特許6982920-ソースコード変換装置、及びプログラム 図000007
  • 特許6982920-ソースコード変換装置、及びプログラム 図000008
  • 特許6982920-ソースコード変換装置、及びプログラム 図000009
  • 特許6982920-ソースコード変換装置、及びプログラム 図000010
  • 特許6982920-ソースコード変換装置、及びプログラム 図000011
  • 特許6982920-ソースコード変換装置、及びプログラム 図000012
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】6982920
(24)【登録日】2021年11月25日
(45)【発行日】2021年12月17日
(54)【発明の名称】ソースコード変換装置、及びプログラム
(51)【国際特許分類】
   G06F 8/51 20180101AFI20211206BHJP
【FI】
   G06F8/51
【請求項の数】4
【全頁数】17
(21)【出願番号】特願2021-145203(P2021-145203)
(22)【出願日】2021年9月7日
【審査請求日】2021年9月7日
【早期審査対象出願】
(73)【特許権者】
【識別番号】519374184
【氏名又は名称】株式会社SHIFT
(74)【代理人】
【識別番号】110001081
【氏名又は名称】特許業務法人クシブチ国際特許事務所
(72)【発明者】
【氏名】田島 健二
【審査官】 上田 翔太
(56)【参考文献】
【文献】 特開2016−115070(JP,A)
【文献】 特開2016−115071(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/51
(57)【特許請求の範囲】
【請求項1】
集団項目が記述されたCOBOLのソースコードをJavaのソースコードに変換するソースコード変換装置において、
前記集団項目が含む基本項目の階層構造、及び従属関係に対応する親子関係を有した親クラス、及び子クラスを含む、プリミティブ型のクラスに前記集団項目を変換する集団項目コンバータを備え、
前記集団項目コンバータは、
前記集団項目の前記基本項目の値が並んだ固定長バイト配列に関する情報を示すアノテーションを前記クラスに付与する
ことを特徴とするソースコード変換装置。
【請求項2】
前記アノテーションは、
前記基本項目のデータ型の情報を含む
ことを特徴とする請求項1に記載のソースコード変換装置。
【請求項3】
前記集団項目コンバータは、
前記アノテーションに基づいて前記固定長バイト配列へのアクセスを含むメソッドを有したスーパークラスを継承した前記親クラスを生成する
ことを特徴とする請求項1または2に記載のソースコード変換装置。
【請求項4】
COBOLのソースコードに記述される集団項目が含む基本項目の階層構造、及び従属関係に対応する親子関係を有した親クラス、及び子クラスを含む、Javaにおけるプリミティブ型のクラスを定義することと、
前記集団項目の前記基本項目の値が並んだ固定長バイト配列に関する情報を示すアノテーションを前記クラスに付与することと、
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソースコード変換装置、及びプログラムに関する。
【背景技術】
【0002】
近年、メインフレームを含む比較的大規模なレガシーシステムを改修する、いわゆるモダナイゼーションが広く行われている(例えば、特許文献1参照)。
多くのレガシーシステムは、一般に、レガシー言語のCOBOLによって記述されたプログラムをメインフレームで実行させており、モダナイゼーションの推進の際には、COBOLによって記述されたソースコードを、Java(登録商標)によって記述されたソースコードに変換する、いわゆるコンバージョン開発が行われている(例えば、特許文献2、特許文献3、及び特許文献4参照)。
コンバージョン開発に係る文献には、例えば、特許文献5、及び特許文献6があり、これら特許文献5、及び特許文献6には、COBOLのソースコードのデータ部(DATA DIVISION)に記述された集団項目を、Javaのソースコードにおいて、独自定義のラッパークラスを用いて記述する技術が示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2018−151713号公報
【特許文献2】特開2019−040399号公報
【特許文献3】国際公開第2015/015622号
【特許文献4】特開2004−118374号公報
【特許文献5】特開2010−86218号公報
【特許文献6】特開2020−60842号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、特許文献5、及び特許文献6の技術において、Javaの実行環境は、上記独自定義のラッパークラスを解釈する機能を予め備えている必要があり、また、コンバージョン開発を行うプログラマは、上記独自定義のラッパークラスの仕様を理解している必要がある。このため、変換後のJavaのソースコードは実行環境の汎用性が低く、また、開発者にとっては保守性の点で問題があった。
【0005】
本発明は、集団項目の記述を含むCOBOLのソースコードに対応するJavaのソースコードの汎用性及び保守性を高めることができるソースコード変換装置、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【0006】
本発明の一態様は、集団項目が記述されたCOBOLのソースコードをJavaのソースコードに変換するソースコード変換装置において、前記集団項目が含む基本項目の階層構造、及び従属関係に対応する親子関係を有した親クラス、及び子クラスを含む、プリミティブ型のクラスに前記集団項目を前記Javaのソースコードにおいて定義する集団項目コンバータを備え、前記集団項目コンバータは、前記集団項目の前記基本項目の値が並んだ固定長バイト配列に関する情報を示すアノテーションを前記クラスに付与することを特徴とする。
【0007】
本発明の一態様は、COBOLのソースコードに対応したJavaのソースコードをコンピュータに生成させるプログラムであって、前記COBOLのソースコードに記述される集団項目が含む基本項目の階層構造、及び従属関係に対応する親子関係を有した親クラス、及び子クラスを含む、プリミティブ型のクラスを定義することと、前記集団項目の前記基本項目の値が並んだ固定長バイト配列に関する情報を示すアノテーションを前記クラスに付与することと、をコンピュータに実行させるプログラムである。
【発明の効果】
【0008】
本発明の一態様によれば、集団項目の記述を含むCOBOLのソースコードに対応するJavaのソースコードの汎用性及び保守性が高められる。
【図面の簡単な説明】
【0009】
図1】本発明の実施形態に係るソースコード変換装置の構成を、プロセッサの機能的構成とともに示す図である。
図2】変換処理部の機能的構成を示す図である。
図3】COBOLソースの構成を集団項目の一例とともに模式的に示す図である。
図4】変換後のJavaのクラスの一例を模式的に示す図である。
図5】COBOLの基本項目のデータ型とJavaのプリミティブ型との対応を示す図である。
図6】集団項目変換処理のフローチャートである。
図7】集団項目からクラスへの変換の一例を示す図である。
図8】COBOLとJavaとの記述例を示す図である。
図9】COBOLにおける配列を含む集団項目と、Javaにおけるクラスとの対応を示す図である。
図10】COBOLにおける「再定義」を含む集団項目と、Javaにおけるクラスとの対応を示す図である。
図11】Setterメソッドの一例を示す図である。
【発明を実施するための形態】
【0010】
以下、図面を参照して本発明の実施形態について説明する。
図1は、本実施形態に係るソースコード変換装置1の構成を、プロセッサ16の機能的構成とともに示す図である。
ソースコード変換装置1は、COBOLで記述されたソースコード(以下、COBOLソースNCという)を、Javaで記述されたソースコード(以下、JavaソースNJという)に言語変換する装置であり、入力I/F回路10と、出力I/F回路12と、記憶デバイス14と、プロセッサ16と、を有するコンピュータによって構成されている。
【0011】
入力I/F回路10は、入力装置2が接続されるインターフェース回路である。
入力装置2は、COBOLソースNCのデータをソースコード変換装置1へ入力する装置であり、ユーザ操作装置や、読取装置、受信装置といった、データ入力機能を有する各種の装置が該当する。ユーザ操作装置は、キーボードやマウス、タッチパネルなどのユーザ操作型の装置である。読取装置は、半導体メモリや光記録ディスク、紙媒体などの記録媒体に記録されたCOBOLソースNCを読み取る装置である。受信装置は、有線通信又は無線通信を通じて外部装置からCOBOLソースNCを受信する装置である。なお、ソースコード変換装置1が入力装置2を内蔵してもよい。
【0012】
出力I/F回路12は、出力装置4が接続されるインターフェース回路である。
出力装置4は、JavaソースNJをソースコード変換装置1から出力する装置であり、表示装置や、書込装置、送信装置といった、データ出力機能を有する各種の装置が該当する。表示装置は、JavaソースNJを表示する装置である。書込装置は、半導体メモリや光記録ディスク、紙媒体などの記録媒体にJavaソースNJを書き込む装置である。送信装置は、有線通信又は無線通信を通じ外部装置へJavaソースNJを送信する装置である。なお、ソースコード変換装置1が出力装置4を内蔵してもよい。
【0013】
記憶デバイス14は、COBOLソースNCやJavaソースNJなどの各種のデータを記憶する装置であり、例えば、RAMやROMなどのメモリデバイス(主記憶装置とも呼ばれる)、及び、HDDやSSDなどのディスクドライブ装置(補助記憶装置とも呼ばれる)が該当する。また、記憶デバイス14は、ソースコード変換を実現するプログラム18を記憶する。
【0014】
プロセッサ16は、記憶デバイス14に記憶されているOS(Operating System)を実行することでソースコード変換装置1の各部を中枢的に制御する演算処理装置である。また、プロセッサ16は上記プログラム18を実行することで、ソースコード変換に要する各種の機能的構成を実現する。
かかる機能的構成は、図1に示すように、取得部20と、変換処理部22と、出力部24と、を含んでいる。
【0015】
取得部20は、COBOLソースNCを記憶デバイス14から取得し、変換処理部22へ出力する。変換処理部22は、COBOLソースNCをJavaソースNJに変換し、出力部24へ出力するものであり、詳細な構成については後述する。出力部24は、JavaソースNJを記憶デバイス14へ出力する。
【0016】
図2は変換処理部22の機能的構成を示す図である。また図3はCOBOLソースNCの構成を集団項目50の一例とともに模式的に示す図である。
変換処理部22は、図2に示すように、COBOLソースNCをJavaソースNJに変換する言語変換部30と、COBOLソースNCを解析するCOBOLコンパイラ32と、を備え、さらに言語変換部30は、集団項目コンバータ34を備え、当該集団項目コンバータ34がCOBOLソースNCに記述された集団項目50(図3図5参照)を、Javaのクラス70(図5参照)に変換する。
【0017】
変換元であるCOBOLソースNCは、図3に示すように、一般に、見出し部(「IDENTIFICATION DIVISION」とも呼ばれる)40と、環境部(「ENVIRONMENT DIVISION」とも呼ばれる)41と、データ部(「DATA DIVISION」とも呼ばれる)42と、手続き部(「PROCEDURE DIVISION」とも呼ばれる)43と、を含み、これらが、この順番で記述されている。
見出し部40は、COBOLソースNCを識別するための情報(プログラム名など)が記述される箇所である。環境部41は、主に、COBOLソースNCを実行するコンピュータ名や、環境変数などの情報の定義などが記述される箇所である。データ部42は、主に、集団項目50やファイルのレコードの宣言が記述される箇所である。手続き部43は、主に、メインの処理内容が記述される箇所である。
【0018】
本実施形態の言語変換部30は、データ部42に記述された集団項目50を、集団項目コンバータ34によってJavaのクラス70に変換するとともに、それ以外の部分については、例えば機械翻訳的にJavaのソースコードに変換する。「機械翻訳的な変換」とは、命令語単位、構文単位、又はCOBOL文法に則した様々な単位で、COBOLソースNCの文字列を、Javaの文字列に変換することを言う。なお、集団項目50以外の部分の変換には、「機械翻訳的な変換」の他にも、公知または周知の任意の手法を用いることができる。
【0019】
COBOL文法において、集団項目50は、1つ以上の基本項目51の集合体であり、各基本項目51に付されたラベル番号52によって、基本項目51の階層構造及び従属関係が規定されている。基本項目51は、基本のデータ型54が宣言された単一のデータ項目の場合もある。データ項目は、使用するデータ型54の長さ(確保すべき記憶領域の大きさ)と、データ項目の名称との対を含む定義文であり、JavaやC言語などの他の言語における変数に対応する。かかる集団項目50は、コンパイラによってコンパイルされると、各基本項目51の値を格納した配列要素が並んだ固定長バイト配列80(図7参照)に変換される。このように、集団項目50は固定長バイト配列80で表されるため、集団項目50の定義は、一般に、プログラムなどの間で集団項目50に係るデータを送受する際のデータのレイアウトにも用いられている。
【0020】
COBOLコンパイラ32は、COBOLをコンパイルする一般的なコンパイラの機能を備え、COBOLソースNCに対して、字句解析、構文解析、及び意味解析等の解析処理を実行し、当該解析処理によって得られた解析結果36を言語変換部30に出力する。
本実施形態のCOBOLコンパイラ32は、集団項目50の各基本項目51の階層構造及び従属関係、並びに、集団項目50の定義に基づいて記憶領域に確保される固定長バイト配列80に関する情報を少なくとも解析し、これらの解析の結果を上記解析結果36に含めて言語変換部30に出力する。固定長バイト配列80に関する情報は、固定長バイト配列80の配列要素の数、当該固定長バイト配列80における各基本項目51のデータ長、及び位置などを含む。
なお、言語変換部30は、COBOLソースNCの集団項目50以外の部分の変換に、COBOLコンパイラ32の解析結果36を用いてもよい。また以下の説明において、固定長バイト配列80の各配列要素の順番は、先頭をゼロ番目(i=0)としてカウントする。
【0021】
集団項目コンバータ34は、COBOLソースNCの集団項目50を、Javaにおけるプリミティブ型のクラス70に変換する。
【0022】
図4は、変換後のJavaのクラス70の一例を模式的に示す図である。
同図に示すように、クラス70は、1つの親クラス71と、1又は複数の子クラス72とを含む。これら親クラス71、及び子クラス72の各フィールド73が基本項目51に対応し、また、親クラス71、及び子クラス72の親子関係が基本項目51の階層構造及び従属関係に対応する。すなわち、ある子クラス72が含むフィールド73は、その子クラス72の派生元の子クラス72又は親クラス71よりも下の階層に位置し、また、子クラス72の派生関係が基本項目51の従属関係に対応する。
【0023】
さらに、本実施形態のクラス70において、親クラス71、及び子クラス72には、クラス用アノテーション75Aが付され、フィールド73には、フィールド用アノテーション75Bが付される。クラス用アノテーション75A、及びフィールド用アノテーション75Bは、集団項目50の固定長バイト配列80に関する情報を示すものであり、その詳細については後述する。
【0024】
またクラス70において、親クラス71は、独自に定義したスーパークラス(以下、「オリジナルスーパークラス」という)65を継承したクラスであり、このオリジナルスーパークラス65には、クラス用アノテーション75A、及びフィールド用アノテーション75Bが示す、固定長バイト配列80に関する情報に基づいて、固定長バイト配列80へアクセスするメソッドなどが定義されている。
【0025】
本実施形態の集団項目コンバータ34は、基本項目51の階層構造及び従属関係、並びに、固定長バイト配列80に関する情報を、COBOLコンパイラ32の解析結果36に基づいて特定しており、プログラマによる集団項目50の記述の仕方に依存することなく、これらの情報が正確かつ簡単に特定可能になっている。
【0026】
図5は、COBOLの基本項目51のデータ型54とJavaのプリミティブ型との対応を示す図である。
Javaのプリミティ型は、「short型」、「byte型」、「long型」、「int型」、「double型」、「float型」、「String型」、「boolean型」、「BigDecimal型」などの型があり、図5に示すように、COBOLの基本項目51が取り得る各データ型54が、Javaのプリミティブ型のいずれかに予め対応付けられている。COBOLの固定小数点における小数点の位置は、Javaの「BigDecimal型」における「scale」の値に対応付けられる。
かかる対応付けを示す型対応データ37(図2参照)は、集団項目コンバータ34に予め組み込まれており、集団項目コンバータ34は、当該型対応データ37を参照して、各基本項目51をプリミティブ型のフィールド73に変換する。
【0027】
このように、変換後のクラス70(親クラス71、及び子クラス72)はプリミティブ型となるため(すなわち全てのフィールド73がプリミティブ型であるため)、Javaの開発環境、及び実行環境が特別なライブラリ(上記特許文献5及び特許文献6に記載された独自定義のラッパークラス含むライブラリ)をインポートせずともクラス70を使用できる。すなわち、変換後のクラス70は、いわゆるPOJO(Plain Old Java Object)となるため、変換後のJavaソースNJの汎用性、及び保守性が大幅に向上することとなる。
また、JavaソースNJにおいて、プリミティブ型のクラス70は、フィールド73の値を「値渡し」により他の関数等に渡すため、COBOLにおける「MOVE」命令と同じ動きとなり、開発者が誤解を生じ難くできる。また、プリミティブ型以外のクラス70を用いた場合、「値渡し」ではなく「参照渡し」が行われる可能性があり、バグを内包する危険性がある。これに対し、本実施形態のクラス70によれば、かかる危険性を確実に回避することができる。
【0028】
ここで、COBOLのデータ型54をJavaのプリミティブ型に対応付ける場合、Javaにおける一つのプリミティブ型に、COBOLにおける異なるデータ型54が対応付けられることがある。例えば、図5において、COBOLのパック10進数、及びゾーン10進数の数値はいずれもJavaの「long型」に対応付けられている。
そこで、前掲図4に示すように、フィールド用アノテーション75Bは、基本項目51のデータ型54を示す第1引数75B1を含み、この第1引数75B1によって、フィールド73に対応する基本項目51のデータ型54が識別可能となる。
一方、クラス用アノテーション75Aは、承継元の上記オリジナルスーパークラスを示す第1引数75A1を含んでいる。
【0029】
また、本実施形態のクラス用アノテーション75A、及びフィールド用アノテーション75Bはいずれも、集団項目50の固定長バイト配列80に関する情報を示す引数を含んでいる。
具体的には、クラス用アノテーション75Aは、固定長バイト配列80のデータ長(本実施形態では配列要素の数)を示す第2引数75A2を含み、フィールド用アノテーション75Bは、基本項目51の桁数(文字型の場合は文字数に相当)を示す第2引数75B2と、固定長バイト配列80における位置(本実施形態では開始位置)を示す第3引数75B3と、を含む。
これら第2引数75A2、75B2、第3引数75B3によって、集団項目50に対応する固定長バイト配列80に関する情報がクラス70に記述される。
【0030】
次いで集団項目コンバータ34による変換動作を説明する。
【0031】
図6は集団項目変換処理のフローチャートである。図7は集団項目50からクラス70への変換の一例を示す図である。
図6に示すように、集団項目コンバータ34は、先ず、COBOLソースNC、又は、COBOLコンパイラ32の解析結果36に基づいて、集団項目50の全ての基本項目51についてプリミティブ型のフィールド73を定義し、基本項目51の階層構造及び従属関係に対応する親子関係の親クラス71、及び子クラス72を定義する(ステップS1)。
【0032】
図7に示すように、集団項目50が、例えば、ラベル番号52が「01」、「02」、及び「03」から成る3層構造である場合、集団項目コンバータ34は、トップ層(第1層)の「01 STRUCT_TOP」に対応して「class STRUCT_TOP」と命名した親クラス71を定義し、また、第2層(ラベル番号52=「02」)の各基本項目51に対応して、親クラス71の各フィールド73を定義する。なお、図7において、上記オリジナルスーパークラス65の名称は「Struct」であり、集団項目コンバータ34は、この「Struct」クラスを「extends」によって承継した親クラス71を定義する。
【0033】
また図7において、第2層の「02 STRUCT_CHILD」も集団項目50であるため、集団項目コンバータ34は、この「02 STRUCT_CHILD」に対応して「class STRUCT_CHILD」と命名した子クラス72を定義する。そして、集団項目コンバータ34は、第3層(ラベル番号52=「03」)の各基本項目51に対応して、この子クラス72の各フィールド73を定義する。
【0034】
図7に示すように、集団項目コンバータ34は、親クラス71、子クラス72、及びフィールド73の定義において、それらの名称に、対応する集団項目50、及び基本項目51の名称の全部又は一部を含めており、クラス70と集団項目50との互いの対応関係を開発者が把握し易くなっている。
【0035】
図6に戻り、集団項目コンバータ34は、COBOLコンパイラ32の解析結果36(固定長バイト配列80に係る解析結果)に基づいて、クラス用アノテーション75A及びフィールド用アノテーション75Bをクラス70に付与する(ステップS2)。
これにより、集団項目50がプリミティブ型のクラス70に変換される。
【0036】
クラス用アノテーション75A及びフィールド用アノテーション75Bの生成について、より詳細には、集団項目コンバータ34は、集団項目50の固定長バイト配列80に基づいてクラス用アノテーション75Aを生成し、当該クラス用アノテーション75Aを親クラス71及び子クラス72に付与する。また、集団項目コンバータ34は、固定長バイト配列80、基本項目51のデータ型54、及び桁数に基づいてフィールド用アノテーション75Bを生成し、当該フィールド用アノテーション75Bをフィールド73に付与する。
【0037】
図7の例では、集団項目50のコンパイルの結果、16進数で表記された値が格納された6バイト長の固定長バイト配列80が生成される。かかる固定長バイト配列80において、先頭(i=0)の配列要素に「01 CHARA_VALUE」の値(図示例「41」(=ASCII文字「A」))が格納されており、1番目(i=1)の配列要素に「03 CHARA_VALUE」の値(図示例「42」(=ASCII文字「B」))が格納されており、2番目(i=2)から3番目(i=3)の配列要素にかけて「03 SHORT_VALUE」の値(図示例「00」「0B」)が格納されており、また、4番目(i=4)から5番目(i=5)の配列要素にかけて「03 PACK_VALUE」の値(図示例「12」「3C」)が格納されている。
【0038】
集団項目コンバータ34は、クラス用アノテーション75Aを生成する場合、親クラス71及び子クラス72について、固定長バイト配列80に占める配列要素の数を特定し、当該配列要素の数を第2引数75A2に格納する。
図7の例では、親クラス70に対応する「01 STRUCT_TOP」、及び、子クラス72に対応する「02 STRUCT_CHILD」のそれぞれの配列要素の数は「6」及び「5」であるため、集団項目コンバータ34は、親クラス71のクラス用アノテーション75Aの第2引数75A2(名称:length)に「6」を格納し、子クラス72のクラス用アノテーション75Aの第2引数75A2に「5」を格納する。
【0039】
一方、集団項目コンバータ34は、フィールド用アノテーション75Bを生成する場合、各フィールド73について、対応する基本項目51のデータ型54、桁数、及び、固定長バイト配列80における開始位置を特定し、それぞれを第1引数75B1、第2引数75B2、及び第3引数75B3に格納する。
【0040】
図7の例では、「02 CHARA_VALUE」は、データ型54がX型(半角文字)であり、桁数が「1」であり、固定長バイト配列80における開始位置が先頭(i=0)の配列要素である。この場合、集団項目コンバータ34は、フィールド用アノテーション75Bの第1引数75B1(名称:type)に、X型であることを明示する「CBLType.X」を格納し、第2引数75B2(名称:digit)に「1」を格納し、第3引数75B3(名称:location)に、先頭の配列要素を示す「0」を格納する。
【0041】
また図7の例では、「03 PACK_VALUE」は、データ型54がパック10進数型であり、桁数が「3」である。この「03 PACK_VALUE」に対応するフィールド73は子クラス72に属するため、固定長バイト配列80における開始位置には、固定長バイト配列80内で子クラス72が占めるバイト配列80Aにおける開始位置が用いられる。図7の例では、子クラス72が占めるバイト配列80Aにおいて、「03 PACK_VALUE」の開始位置は3番目(j=3)の配列要素である。
この場合、集団項目コンバータ34は、フィールド用アノテーション75Bの第1引数75B1に、パック10進数型であることを明示する「CBLType.us9_COMP9」を格納し、第2引数75B2に「3」を格納し、第3引数75B3に開始位置の「3」を格納する。
【0042】
なお、本実施形態において、フィールド用アノテーション75Bの第1引数75B1に使用する文字列は、COBOLの基本項目51のデータ型54に対応して予め設定されており、また、当該文字列は、対応するフィールド73に設定されたアノテーション情報から参照される。また、このオリジナルスーパークラス65には、上述の通り、フィールド用アノテーション75Bの第1引数75B1、第2引数75B2、及び第3引数75B3に基づいて、固定長バイト配列80へアクセスするメソッドなどが定義されている。固定長バイト配列80へのアクセスは、例えば、固定長バイト配列80に対する値の読み書きや、固定長バイト配列80の生成などを含む。
【0043】
このように、クラス70は、集団項目50の基本項目51に対応する親クラス71、子クラス72、及びフィールド73のそれぞれに、固定長バイト配列80に関する情報を含むクラス用アノテーション75A及びフィールド用アノテーション75Bが付与される。
これにより、変換後のJavaソースNJにおいては、固定長バイト配列80に関する処理(例えば、フィールド73と固定長バイト配列80との間のデータのやり取り)を、クラス用アノテーション75A及びフィールド用アノテーション75Bを用いて実現することができる。本実施形態では、クラス70は、固定長バイト配列80へのアクセスするメソッドを含むオリジナルスーパークラス65を継承しているため、固定長バイト配列80を扱う処理のコーディングに要する労力が低減される。
さらに、クラス用アノテーション75A及びフィールド用アノテーション75Bは、クラス70に付随する形でJavaソースNJに記述されるため可読性を向上させることができる。
【0044】
また、クラス70は、基本項目51の階層構造及び従属関係に対応する親子関係の親クラス71、及び子クラス72を有するため、COBOL文法における「OF修飾」と同様の表記が、言語変換部30による変換後のJavaソースNJにおいて記述される。例えば、図7に示した集団項目50の第3層の「03 CHAR_VALUE」の「MOVE」命令は、図8に示すように、記述例1のように記述される。一方、JavaソースNJにおいては、記述例1と同等の命令が記述例2のように記述され、変換後のJavaソースNJの可読性が向上する。
【0045】
図9は、COBOLにおける配列を含む集団項目50と、Javaにおけるクラス70との対応を示す図である。
集団項目50の中において、「配列」は、「OCCURS句」を用いて宣言され、図9の例では、単一のデータ項目形式の配列が「02 CHAR_VALUE PIC X(02) OCCURS 2.」によって定義されており、また、集団項目形式の配列が「02 STRUCT_CHILD OCCURS 2.」によって定義されている。
同図の例では、単一のデータ項目形式の配列に対応する固定長バイト配列80−1は、2バイト×2の一次元配列となっており、文字「A」、「1」、「A」、「2」のそれぞれを16進数によって示した値が各配列要素に格納されている。
また、同図の例では、集団項目形式の配列は、文字型のデータ項目と数値型のデータ項目とから成る配列であり、当該配列に対応する固定長バイト配列80−2の各配列要素には、文字「B」、符号付き数値「+10」、文字「C」、符号付き数値「+11」のそれぞれを16進数によって示した値が格納されている。
【0046】
集団項目コンバータ34が、かかる集団項目50をJavaのクラス70に変換する場合、先ず、基本項目51の階層構造及び従属関係に対応する親子関係の親クラス71、及び子クラス72を定義する。図9の例では、集団項目コンバータ34は、集団項目50の「01 OCCURS_STRUCT」に対応する「class OCCURS_STRUCT」を親クラス71として定義し、「02 STRUC_CHILD OCCURS 2.」に対応する「class STRUCT_CHILD」を子クラス72として定義する。また、集団項目コンバータ34は、COBOLの配列に対応するフィールド73を同じく配列として定義する。なお、図9では、配列として定義されたフィールド73には、他のフィールド73と区別するために、符号73−1、73−2を付している。
【0047】
次いで、集団項目コンバータ34は、クラス用アノテーション75A及びフィールド用アノテーション75Bをクラス70に付与する。この場合において、COBOLの配列に対応するフィールド73−1、73−2に付与されるフィールド用アノテーション75Bは、COBOLの配列に対応する旨を示す第4引数75B4(図示例、「occurs」)を含んでおり、この第4引数75B4によって配列に関する情報がクラス70に記述される。そして、この第4引数75B4と、固定長バイト配列80−1、80−2に関する情報を示す上述した他の引数(第2引数75A2、75B2、第3引数75B3)とによって、COBOLにおける「配列」と同等の機能がJavaのクラス70によって実現される。
【0048】
本実施形態では、オリジナルスーパークラス65(図示例では「Structクラス」)は、フィールド用アノテーション75Bが含む第4引数75B4(「occurs」)の値に基づいて、フィールド73−1、73−2が配列に対応することを特定し、当該配列に対応した固定長バイト配列80−1、80−2に基づいて、フィールド73−1、73−2に値を設定する機能を有することで、「COBOL」の配列と同等の機能が実現されている。
例えば、図9において、単一のデータ項目形式の配列に対応したフィールド73−1について、オリジナルスーパークラス65は、フィールド73−1の「String[]」の各配列要素に「CHAR_VALUE[0]=”A1”」、「CHAR_VALUE[1]=”A2”」となるように値を設定する。
また、集団項目形式の配列に対応したフィールド73−2について、オリジナルスーパークラス65は、フィールド73−2の「STRUCT_CHILD[]」の各配列要素に、次のように値を設定する。すなわち、オリジナルスーパークラス65は、「STRUCT_CHILD[0]」に「String=”B”」と「short=+10」の値を設定し、「STRUCT_CHILD[1]」に「String=”C”」と「short=+11」の値を設定する。
【0049】
図10は、COBOLにおける「再定義」を含む集団項目50と、Javaにおけるクラス70との対応を示す図である。
集団項目50の中において、「再定義」は、「REDEFINES句」を用いて宣言され、図10の例では、「YYYYMMDD」が「REDEFINES句」によって「YYMMDD_R」として再定義されている。また、同図において、「YYYYMMDD」は年月日を8桁の文字列数字(年が3桁、月及び日がそれぞれ2桁)で示す基本項目51であり、「YYMMDD_R」は年月日を6桁の文字列数字(年、月、及び日がそれぞれ2桁)で示す基本項目61として定義されている。
そして、かかる「YYYYMMDD」は、コンパイラによってコンパイルされると、8個の配列要素から成る固定長バイト配列80に変換され、各配列要素には、年月日の各桁の文字列数字を16進数によって表記した値が格納される。
【0050】
図10の例は、「YYYYMMDD」が示す年月日が「2021年08月10日」である場合を示しており、かかる年月日を示す8桁の文字列数値は16進数表記を用いると、「32」「30」「32」「31」「30」「38」「31」「30」と表記され、これらの各値が固定長バイト配列80の各配列要素に格納される。
一方、「YYMMDD_R」については、図10における「03 FILLER PIC X(02)」によって固定長バイト配列80の0番目(i=0)及び1番目(i=1)の配列要素が無視され、「03 YYMMDD PIC X(06)」によって固定長バイト配列80の2番目(i=2)から7番目(i=7)までの配列要素が参照される。
【0051】
集団項目コンバータ34が、かかる集団項目50をJavaのクラス70に変換する場合、先ず、基本項目51の階層構造及び従属関係に対応する親子関係の親クラス71、及び子クラス72を定義する。図10の例では、集団項目コンバータ34は、集団項目50の「01 REDEFINES_STRUCT」に対応する「class REDEFINES_STRUCT」を親クラス71として定義し、「02 YYMMDD_R REDEFINES YYYYMMDD」に対応する「class YYMMDD_R」を子クラス72として定義する。
【0052】
次いで、集団項目コンバータ34は、クラス用アノテーション75A及びフィールド用アノテーション75Bをクラス70に付与する。この場合において、再定義句に対応するフィールド73(図10における「Public YYMMDD_R YYMMDD_R;」)に付与するフィールド用アノテーション75Bは、再定義元の基本項目51を示す第5引数75B5(図示例、「redefines」)を含んでおり、この第5引数75B5によって再定義に関する情報がクラス70に記述される。そして、この第5引数75B5と、固定長バイト配列80に関する情報を示す上述した他の引数(第2引数75A2、75B2、第3引数75B3)とによって、COBOLにおける「再定義」と同等の機能がJavaのクラス70によって実現されることとなる。
【0053】
なお、JavaソースNJにおいて、再定義先に対応する子クラス72(図10における「class YYMMDD_R」)のフィールド73(図10における「String YYMMDD;」)の更新は、図11に示すSetterメソッド77を子クラス72に追加し、再定義先に対応する子クラス72の変更を再定義元に対応する親クラス71に反映することで可能である。同図において、かかる反映のためのプロセスがロジック部77Aにコーディングされている。
【0054】
本実施形態によれば、次の効果を奏する。
【0055】
本実施形態のソースコード変換装置1は、集団項目50が記述されたCOBOLソースNCをJavaソースNJに変換する装置であって、集団項目コンバータ34を備える。
集団項目コンバータ34は、集団項目50が含む基本項目51の階層構造、及び従属関係に対応する親子関係を有した親クラス71、及び子クラス72を含む、プリミティブ型のクラス70に集団項目50を変換する。また集団項目コンバータ34は、集団項目50の基本項目51の値が並んだ固定長バイト配列80に関する情報を示すクラス用アノテーション75A及びフィールド用アノテーション75Bをクラス70に付与する。
【0056】
この構成によれば、集団項目50を変換したクラス70がプリミティブ型であるため、Javaの開発環境、及び実行環境が特別なライブラリをインポートせずともクラス70を使用でき、変換後のJavaソースNJの汎用性、及び保守性が大幅に向上する。
加えて、クラス70は、固定長バイト配列80に関する情報を含むクラス用アノテーション75A及びフィールド用アノテーション75Bが付与されため、固定長バイト配列80に関する処理を、クラス用アノテーション75A及びフィールド用アノテーション75Bを用いて実現することができる。
さらに、クラス用アノテーション75A及びフィールド用アノテーション75Bは、クラス70に付随する形でJavaソースNJに記述されるため可読性を向上させることができる。
【0057】
本実施形態のソースコード変換装置1において、基本項目51に対応するフィールド73に付与されるフィールド用アノテーション75Bは、対応する基本項目51のデータ型54の情報を含んでいる。
この構成によれば、COBOLの複数のデータ型54が1つのプリミティブ型に対応付けられていても、各データ型54をフィールド用アノテーション75Bによって正しく識別できる。
【0058】
本実施形態のソースコード変換装置1において、集団項目コンバータ34は、クラス用アノテーション75A及びフィールド用アノテーション75Bに基づいて、固定長バイト配列80へのアクセスを含むメソッドを有した独自定義のオリジナルスーパークラス65を継承した親クラス71を生成する。
【0059】
この構成によれば、固定長バイト配列80を扱う処理のコーディングに要する労力を低減することができる。
【0060】
なお、上述した実施形態は、あくまでも本発明の一態様の例示であり、本発明の主旨を逸脱しない範囲において任意に変形、及び応用が可能である。
【0061】
上述した実施形態において、集団項目コンバータ34は、固定長バイト配列80に関する情報を示すアノテーションとして、クラス用アノテーション75A及びフィールド用アノテーション75Bの2種類のアノテーションを生成した。しかしながら、アノテーションの態様は、固定長バイト配列80に関する情報を示すものでれば任意である。
【0062】
上述した実施形態において、上記プログラム18は、COBOLソースNCの全部をJavaソースNJに変換する機能を実現するものではなく、少なくとも集団項目コンバータ34の機能を実現するものであってもよい。
この場合、プログラム18は、COBOLソースNCに記述される集団項目50が含む基本項目51の階層構造、及び従属関係に対応する親子関係を有した親クラス71、及び子クラス72を含む、Javaにおけるプリミティブ型のクラス70を定義することと、集団項目50の基本項目51の値が並んだ固定長バイト配列80に関する情報を示すアノテーションをクラス70に付与することと、をコンピュータに実行させるものとなる。
コンピュータがプログラム18を実行することで、COBOLソースNCに記述される集団項目50に対応するクラス70を生成する。
なお、光ディスクや可搬型半導体メモリ等の記録媒体にプログラム18を記録することで、又は、電気通信回線を通じて送信することで、当該プログラム18を頒布可能である。
【0063】
図1及び図2に示す機能ブロックは、本願発明を理解容易にするために、構成要素を主な処理内容に応じて分類して示した概略図であり、各構成要素は、処理内容に応じて、さらに多くの構成要素に分類することもできる。また、1つの構成要素がさらに多くの処理を実行するように分類することもできる。
【符号の説明】
【0064】
1 ソースコード変換装置
22 変換処理部
30 言語変換部
32 COBOLコンパイラ
34 集団項目コンバータ
36 解析結果
37 型対応データ
42 データ部
50 集団項目
51 基本項目
54 データ型
65 オリジナルスーパークラス
70 クラス
71 親クラス
72 子クラス
73 フィールド
75A クラス用アノテーション
75B フィールド用アノテーション
80 固定長バイト配列
NC COBOLソース
NJ Javaソース
【要約】
【課題】集団項目の記述を含むCOBOLのソースコードに対応するJavaのソースコードの汎用性及び保守性を高める。
【解決手段】集団項目50が記述されたCOBOLのソースコードをJavaのソースコードに変換するソースコード変換装置1において、前記集団項目50が含む基本項目51の階層構造、及び従属関係に対応する親子関係を有した親クラス71、及び子クラス72を含む、プリミティブ型のクラス70に前記集団項目50を変換する集団項目コンバータ34を備え、前記集団項目コンバータ34は、前記集団項目50の前記基本項目51の値が並んだ固定長バイト配列80に関する情報を示すアノテーションを前記クラス70に付与する。
【選択図】図2
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11