(57)【特許請求の範囲】
【請求項１】
集団項目が記述されたＣＯＢＯＬのソースコードをＪａｖａのソースコードに変換するソースコード変換装置において、
前記集団項目が含む基本項目の階層構造、及び従属関係に対応する親子関係を有した親クラス、及び子クラスを含む、プリミティブ型のクラスに前記集団項目を変換する集団項目コンバータを備え、
前記集団項目コンバータは、
前記集団項目の前記基本項目の値が並んだ固定長バイト配列に関する情報を示すアノテーションを前記クラスに付与する
ことを特徴とするソースコード変換装置。
【請求項２】
前記アノテーションは、
前記基本項目のデータ型の情報を含む
ことを特徴とする請求項１に記載のソースコード変換装置。
【請求項３】
前記集団項目コンバータは、
前記アノテーションに基づいて前記固定長バイト配列へのアクセスを含むメソッドを有したスーパークラスを継承した前記親クラスを生成する
ことを特徴とする請求項１または２に記載のソースコード変換装置。
【請求項４】
ＣＯＢＯＬのソースコードに記述される集団項目が含む基本項目の階層構造、及び従属関係に対応する親子関係を有した親クラス、及び子クラスを含む、Ｊａｖａにおけるプリミティブ型のクラスを定義することと、
前記集団項目の前記基本項目の値が並んだ固定長バイト配列に関する情報を示すアノテーションを前記クラスに付与することと、
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースコード変換装置、及びプログラムに関する。
【背景技術】
【０００２】
近年、メインフレームを含む比較的大規模なレガシーシステムを改修する、いわゆるモダナイゼーションが広く行われている（例えば、特許文献１参照）。
多くのレガシーシステムは、一般に、レガシー言語のＣＯＢＯＬによって記述されたプログラムをメインフレームで実行させており、モダナイゼーションの推進の際には、ＣＯＢＯＬによって記述されたソースコードを、Ｊａｖａ（登録商標）によって記述されたソースコードに変換する、いわゆるコンバージョン開発が行われている（例えば、特許文献２、特許文献３、及び特許文献４参照）。
コンバージョン開発に係る文献には、例えば、特許文献５、及び特許文献６があり、これら特許文献５、及び特許文献６には、ＣＯＢＯＬのソースコードのデータ部（ＤＡＴＡ  ＤＩＶＩＳＩＯＮ）に記述された集団項目を、Ｊａｖａのソースコードにおいて、独自定義のラッパークラスを用いて記述する技術が示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１８−１５１７１３号公報
【特許文献２】特開２０１９−０４０３９９号公報
【特許文献３】国際公開第２０１５／０１５６２２号
【特許文献４】特開２００４−１１８３７４号公報
【特許文献５】特開２０１０−８６２１８号公報
【特許文献６】特開２０２０−６０８４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、特許文献５、及び特許文献６の技術において、Ｊａｖａの実行環境は、上記独自定義のラッパークラスを解釈する機能を予め備えている必要があり、また、コンバージョン開発を行うプログラマは、上記独自定義のラッパークラスの仕様を理解している必要がある。このため、変換後のＪａｖａのソースコードは実行環境の汎用性が低く、また、開発者にとっては保守性の点で問題があった。
【０００５】
本発明は、集団項目の記述を含むＣＯＢＯＬのソースコードに対応するＪａｖａのソースコードの汎用性及び保守性を高めることができるソースコード変換装置、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一態様は、集団項目が記述されたＣＯＢＯＬのソースコードをＪａｖａのソースコードに変換するソースコード変換装置において、前記集団項目が含む基本項目の階層構造、及び従属関係に対応する親子関係を有した親クラス、及び子クラスを含む、プリミティブ型のクラスに前記集団項目を前記Ｊａｖａのソースコードにおいて定義する集団項目コンバータを備え、前記集団項目コンバータは、前記集団項目の前記基本項目の値が並んだ固定長バイト配列に関する情報を示すアノテーションを前記クラスに付与することを特徴とする。
【０００７】
本発明の一態様は、ＣＯＢＯＬのソースコードに対応したＪａｖａのソースコードをコンピュータに生成させるプログラムであって、前記ＣＯＢＯＬのソースコードに記述される集団項目が含む基本項目の階層構造、及び従属関係に対応する親子関係を有した親クラス、及び子クラスを含む、プリミティブ型のクラスを定義することと、前記集団項目の前記基本項目の値が並んだ固定長バイト配列に関する情報を示すアノテーションを前記クラスに付与することと、をコンピュータに実行させるプログラムである。
【発明の効果】
【０００８】
本発明の一態様によれば、集団項目の記述を含むＣＯＢＯＬのソースコードに対応するＪａｖａのソースコードの汎用性及び保守性が高められる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施形態に係るソースコード変換装置の構成を、プロセッサの機能的構成とともに示す図である。
【図２】変換処理部の機能的構成を示す図である。
【図３】ＣＯＢＯＬソースの構成を集団項目の一例とともに模式的に示す図である。
【図４】変換後のＪａｖａのクラスの一例を模式的に示す図である。
【図５】ＣＯＢＯＬの基本項目のデータ型とＪａｖａのプリミティブ型との対応を示す図である。
【図６】集団項目変換処理のフローチャートである。
【図７】集団項目からクラスへの変換の一例を示す図である。
【図８】ＣＯＢＯＬとＪａｖａとの記述例を示す図である。
【図９】ＣＯＢＯＬにおける配列を含む集団項目と、Ｊａｖａにおけるクラスとの対応を示す図である。
【図１０】ＣＯＢＯＬにおける「再定義」を含む集団項目と、Ｊａｖａにおけるクラスとの対応を示す図である。
【図１１】Ｓｅｔｔｅｒメソッドの一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を参照して本発明の実施形態について説明する。
図１は、本実施形態に係るソースコード変換装置１の構成を、プロセッサ１６の機能的構成とともに示す図である。
ソースコード変換装置１は、ＣＯＢＯＬで記述されたソースコード（以下、ＣＯＢＯＬソースＮＣという）を、Ｊａｖａで記述されたソースコード（以下、ＪａｖａソースＮＪという）に言語変換する装置であり、入力Ｉ／Ｆ回路１０と、出力Ｉ／Ｆ回路１２と、記憶デバイス１４と、プロセッサ１６と、を有するコンピュータによって構成されている。
【００１１】
入力Ｉ／Ｆ回路１０は、入力装置２が接続されるインターフェース回路である。
入力装置２は、ＣＯＢＯＬソースＮＣのデータをソースコード変換装置１へ入力する装置であり、ユーザ操作装置や、読取装置、受信装置といった、データ入力機能を有する各種の装置が該当する。ユーザ操作装置は、キーボードやマウス、タッチパネルなどのユーザ操作型の装置である。読取装置は、半導体メモリや光記録ディスク、紙媒体などの記録媒体に記録されたＣＯＢＯＬソースＮＣを読み取る装置である。受信装置は、有線通信又は無線通信を通じて外部装置からＣＯＢＯＬソースＮＣを受信する装置である。なお、ソースコード変換装置１が入力装置２を内蔵してもよい。
【００１２】
出力Ｉ／Ｆ回路１２は、出力装置４が接続されるインターフェース回路である。
出力装置４は、ＪａｖａソースＮＪをソースコード変換装置１から出力する装置であり、表示装置や、書込装置、送信装置といった、データ出力機能を有する各種の装置が該当する。表示装置は、ＪａｖａソースＮＪを表示する装置である。書込装置は、半導体メモリや光記録ディスク、紙媒体などの記録媒体にＪａｖａソースＮＪを書き込む装置である。送信装置は、有線通信又は無線通信を通じ外部装置へＪａｖａソースＮＪを送信する装置である。なお、ソースコード変換装置１が出力装置４を内蔵してもよい。
【００１３】
記憶デバイス１４は、ＣＯＢＯＬソースＮＣやＪａｖａソースＮＪなどの各種のデータを記憶する装置であり、例えば、ＲＡＭやＲＯＭなどのメモリデバイス（主記憶装置とも呼ばれる）、及び、ＨＤＤやＳＳＤなどのディスクドライブ装置（補助記憶装置とも呼ばれる）が該当する。また、記憶デバイス１４は、ソースコード変換を実現するプログラム１８を記憶する。
【００１４】
プロセッサ１６は、記憶デバイス１４に記憶されているＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）を実行することでソースコード変換装置１の各部を中枢的に制御する演算処理装置である。また、プロセッサ１６は上記プログラム１８を実行することで、ソースコード変換に要する各種の機能的構成を実現する。
かかる機能的構成は、図１に示すように、取得部２０と、変換処理部２２と、出力部２４と、を含んでいる。
【００１５】
取得部２０は、ＣＯＢＯＬソースＮＣを記憶デバイス１４から取得し、変換処理部２２へ出力する。変換処理部２２は、ＣＯＢＯＬソースＮＣをＪａｖａソースＮＪに変換し、出力部２４へ出力するものであり、詳細な構成については後述する。出力部２４は、ＪａｖａソースＮＪを記憶デバイス１４へ出力する。
【００１６】
図２は変換処理部２２の機能的構成を示す図である。また図３はＣＯＢＯＬソースＮＣの構成を集団項目５０の一例とともに模式的に示す図である。
変換処理部２２は、図２に示すように、ＣＯＢＯＬソースＮＣをＪａｖａソースＮＪに変換する言語変換部３０と、ＣＯＢＯＬソースＮＣを解析するＣＯＢＯＬコンパイラ３２と、を備え、さらに言語変換部３０は、集団項目コンバータ３４を備え、当該集団項目コンバータ３４がＣＯＢＯＬソースＮＣに記述された集団項目５０（図３、図５参照）を、Ｊａｖａのクラス７０（図５参照）に変換する。
【００１７】
変換元であるＣＯＢＯＬソースＮＣは、図３に示すように、一般に、見出し部（「ＩＤＥＮＴＩＦＩＣＡＴＩＯＮ  ＤＩＶＩＳＩＯＮ」とも呼ばれる）４０と、環境部（「ＥＮＶＩＲＯＮＭＥＮＴ  ＤＩＶＩＳＩＯＮ」とも呼ばれる）４１と、データ部（「ＤＡＴＡ  ＤＩＶＩＳＩＯＮ」とも呼ばれる）４２と、手続き部（「ＰＲＯＣＥＤＵＲＥ  ＤＩＶＩＳＩＯＮ」とも呼ばれる）４３と、を含み、これらが、この順番で記述されている。
見出し部４０は、ＣＯＢＯＬソースＮＣを識別するための情報（プログラム名など）が記述される箇所である。環境部４１は、主に、ＣＯＢＯＬソースＮＣを実行するコンピュータ名や、環境変数などの情報の定義などが記述される箇所である。データ部４２は、主に、集団項目５０やファイルのレコードの宣言が記述される箇所である。手続き部４３は、主に、メインの処理内容が記述される箇所である。
【００１８】
本実施形態の言語変換部３０は、データ部４２に記述された集団項目５０を、集団項目コンバータ３４によってＪａｖａのクラス７０に変換するとともに、それ以外の部分については、例えば機械翻訳的にＪａｖａのソースコードに変換する。「機械翻訳的な変換」とは、命令語単位、構文単位、又はＣＯＢＯＬ文法に則した様々な単位で、ＣＯＢＯＬソースＮＣの文字列を、Ｊａｖａの文字列に変換することを言う。なお、集団項目５０以外の部分の変換には、「機械翻訳的な変換」の他にも、公知または周知の任意の手法を用いることができる。
【００１９】
ＣＯＢＯＬ文法において、集団項目５０は、１つ以上の基本項目５１の集合体であり、各基本項目５１に付されたラベル番号５２によって、基本項目５１の階層構造及び従属関係が規定されている。基本項目５１は、基本のデータ型５４が宣言された単一のデータ項目の場合もある。データ項目は、使用するデータ型５４の長さ（確保すべき記憶領域の大きさ）と、データ項目の名称との対を含む定義文であり、ＪａｖａやＣ言語などの他の言語における変数に対応する。かかる集団項目５０は、コンパイラによってコンパイルされると、各基本項目５１の値を格納した配列要素が並んだ固定長バイト配列８０（図７参照）に変換される。このように、集団項目５０は固定長バイト配列８０で表されるため、集団項目５０の定義は、一般に、プログラムなどの間で集団項目５０に係るデータを送受する際のデータのレイアウトにも用いられている。
【００２０】
ＣＯＢＯＬコンパイラ３２は、ＣＯＢＯＬをコンパイルする一般的なコンパイラの機能を備え、ＣＯＢＯＬソースＮＣに対して、字句解析、構文解析、及び意味解析等の解析処理を実行し、当該解析処理によって得られた解析結果３６を言語変換部３０に出力する。
本実施形態のＣＯＢＯＬコンパイラ３２は、集団項目５０の各基本項目５１の階層構造及び従属関係、並びに、集団項目５０の定義に基づいて記憶領域に確保される固定長バイト配列８０に関する情報を少なくとも解析し、これらの解析の結果を上記解析結果３６に含めて言語変換部３０に出力する。固定長バイト配列８０に関する情報は、固定長バイト配列８０の配列要素の数、当該固定長バイト配列８０における各基本項目５１のデータ長、及び位置などを含む。
なお、言語変換部３０は、ＣＯＢＯＬソースＮＣの集団項目５０以外の部分の変換に、ＣＯＢＯＬコンパイラ３２の解析結果３６を用いてもよい。また以下の説明において、固定長バイト配列８０の各配列要素の順番は、先頭をゼロ番目（ｉ＝０）としてカウントする。
【００２１】
集団項目コンバータ３４は、ＣＯＢＯＬソースＮＣの集団項目５０を、Ｊａｖａにおけるプリミティブ型のクラス７０に変換する。
【００２２】
図４は、変換後のＪａｖａのクラス７０の一例を模式的に示す図である。
同図に示すように、クラス７０は、１つの親クラス７１と、１又は複数の子クラス７２とを含む。これら親クラス７１、及び子クラス７２の各フィールド７３が基本項目５１に対応し、また、親クラス７１、及び子クラス７２の親子関係が基本項目５１の階層構造及び従属関係に対応する。すなわち、ある子クラス７２が含むフィールド７３は、その子クラス７２の派生元の子クラス７２又は親クラス７１よりも下の階層に位置し、また、子クラス７２の派生関係が基本項目５１の従属関係に対応する。
【００２３】
さらに、本実施形態のクラス７０において、親クラス７１、及び子クラス７２には、クラス用アノテーション７５Ａが付され、フィールド７３には、フィールド用アノテーション７５Ｂが付される。クラス用アノテーション７５Ａ、及びフィールド用アノテーション７５Ｂは、集団項目５０の固定長バイト配列８０に関する情報を示すものであり、その詳細については後述する。
【００２４】
またクラス７０において、親クラス７１は、独自に定義したスーパークラス（以下、「オリジナルスーパークラス」という）６５を継承したクラスであり、このオリジナルスーパークラス６５には、クラス用アノテーション７５Ａ、及びフィールド用アノテーション７５Ｂが示す、固定長バイト配列８０に関する情報に基づいて、固定長バイト配列８０へアクセスするメソッドなどが定義されている。
【００２５】
本実施形態の集団項目コンバータ３４は、基本項目５１の階層構造及び従属関係、並びに、固定長バイト配列８０に関する情報を、ＣＯＢＯＬコンパイラ３２の解析結果３６に基づいて特定しており、プログラマによる集団項目５０の記述の仕方に依存することなく、これらの情報が正確かつ簡単に特定可能になっている。
【００２６】
図５は、ＣＯＢＯＬの基本項目５１のデータ型５４とＪａｖａのプリミティブ型との対応を示す図である。
Ｊａｖａのプリミティ型は、「ｓｈｏｒｔ型」、「ｂｙｔｅ型」、「ｌｏｎｇ型」、「ｉｎｔ型」、「ｄｏｕｂｌｅ型」、「ｆｌｏａｔ型」、「Ｓｔｒｉｎｇ型」、「ｂｏｏｌｅａｎ型」、「ＢｉｇＤｅｃｉｍａｌ型」などの型があり、図５に示すように、ＣＯＢＯＬの基本項目５１が取り得る各データ型５４が、Ｊａｖａのプリミティブ型のいずれかに予め対応付けられている。ＣＯＢＯＬの固定小数点における小数点の位置は、Ｊａｖａの「ＢｉｇＤｅｃｉｍａｌ型」における「ｓｃａｌｅ」の値に対応付けられる。
かかる対応付けを示す型対応データ３７（図２参照）は、集団項目コンバータ３４に予め組み込まれており、集団項目コンバータ３４は、当該型対応データ３７を参照して、各基本項目５１をプリミティブ型のフィールド７３に変換する。
【００２７】
このように、変換後のクラス７０（親クラス７１、及び子クラス７２）はプリミティブ型となるため（すなわち全てのフィールド７３がプリミティブ型であるため）、Ｊａｖａの開発環境、及び実行環境が特別なライブラリ（上記特許文献５及び特許文献６に記載された独自定義のラッパークラス含むライブラリ）をインポートせずともクラス７０を使用できる。すなわち、変換後のクラス７０は、いわゆるＰＯＪＯ（Ｐｌａｉｎ  Ｏｌｄ  Ｊａｖａ  Ｏｂｊｅｃｔ）となるため、変換後のＪａｖａソースＮＪの汎用性、及び保守性が大幅に向上することとなる。
また、ＪａｖａソースＮＪにおいて、プリミティブ型のクラス７０は、フィールド７３の値を「値渡し」により他の関数等に渡すため、ＣＯＢＯＬにおける「ＭＯＶＥ」命令と同じ動きとなり、開発者が誤解を生じ難くできる。また、プリミティブ型以外のクラス７０を用いた場合、「値渡し」ではなく「参照渡し」が行われる可能性があり、バグを内包する危険性がある。これに対し、本実施形態のクラス７０によれば、かかる危険性を確実に回避することができる。
【００２８】
ここで、ＣＯＢＯＬのデータ型５４をＪａｖａのプリミティブ型に対応付ける場合、Ｊａｖａにおける一つのプリミティブ型に、ＣＯＢＯＬにおける異なるデータ型５４が対応付けられることがある。例えば、図５において、ＣＯＢＯＬのパック１０進数、及びゾーン１０進数の数値はいずれもＪａｖａの「ｌｏｎｇ型」に対応付けられている。
そこで、前掲図４に示すように、フィールド用アノテーション７５Ｂは、基本項目５１のデータ型５４を示す第１引数７５Ｂ１を含み、この第１引数７５Ｂ１によって、フィールド７３に対応する基本項目５１のデータ型５４が識別可能となる。
一方、クラス用アノテーション７５Ａは、承継元の上記オリジナルスーパークラスを示す第１引数７５Ａ１を含んでいる。
【００２９】
また、本実施形態のクラス用アノテーション７５Ａ、及びフィールド用アノテーション７５Ｂはいずれも、集団項目５０の固定長バイト配列８０に関する情報を示す引数を含んでいる。
具体的には、クラス用アノテーション７５Ａは、固定長バイト配列８０のデータ長（本実施形態では配列要素の数）を示す第２引数７５Ａ２を含み、フィールド用アノテーション７５Ｂは、基本項目５１の桁数（文字型の場合は文字数に相当）を示す第２引数７５Ｂ２と、固定長バイト配列８０における位置（本実施形態では開始位置）を示す第３引数７５Ｂ３と、を含む。
これら第２引数７５Ａ２、７５Ｂ２、第３引数７５Ｂ３によって、集団項目５０に対応する固定長バイト配列８０に関する情報がクラス７０に記述される。
【００３０】
次いで集団項目コンバータ３４による変換動作を説明する。
【００３１】
図６は集団項目変換処理のフローチャートである。図７は集団項目５０からクラス７０への変換の一例を示す図である。
図６に示すように、集団項目コンバータ３４は、先ず、ＣＯＢＯＬソースＮＣ、又は、ＣＯＢＯＬコンパイラ３２の解析結果３６に基づいて、集団項目５０の全ての基本項目５１についてプリミティブ型のフィールド７３を定義し、基本項目５１の階層構造及び従属関係に対応する親子関係の親クラス７１、及び子クラス７２を定義する（ステップＳ１）。
【００３２】
図７に示すように、集団項目５０が、例えば、ラベル番号５２が「０１」、「０２」、及び「０３」から成る３層構造である場合、集団項目コンバータ３４は、トップ層（第１層）の「０１  ＳＴＲＵＣＴ＿ＴＯＰ」に対応して「ｃｌａｓｓ  ＳＴＲＵＣＴ＿ＴＯＰ」と命名した親クラス７１を定義し、また、第２層（ラベル番号５２＝「０２」）の各基本項目５１に対応して、親クラス７１の各フィールド７３を定義する。なお、図７において、上記オリジナルスーパークラス６５の名称は「Ｓｔｒｕｃｔ」であり、集団項目コンバータ３４は、この「Ｓｔｒｕｃｔ」クラスを「ｅｘｔｅｎｄｓ」によって承継した親クラス７１を定義する。
【００３３】
また図７において、第２層の「０２  ＳＴＲＵＣＴ＿ＣＨＩＬＤ」も集団項目５０であるため、集団項目コンバータ３４は、この「０２  ＳＴＲＵＣＴ＿ＣＨＩＬＤ」に対応して「ｃｌａｓｓ  ＳＴＲＵＣＴ＿ＣＨＩＬＤ」と命名した子クラス７２を定義する。そして、集団項目コンバータ３４は、第３層（ラベル番号５２＝「０３」）の各基本項目５１に対応して、この子クラス７２の各フィールド７３を定義する。
【００３４】
図７に示すように、集団項目コンバータ３４は、親クラス７１、子クラス７２、及びフィールド７３の定義において、それらの名称に、対応する集団項目５０、及び基本項目５１の名称の全部又は一部を含めており、クラス７０と集団項目５０との互いの対応関係を開発者が把握し易くなっている。
【００３５】
図６に戻り、集団項目コンバータ３４は、ＣＯＢＯＬコンパイラ３２の解析結果３６（固定長バイト配列８０に係る解析結果）に基づいて、クラス用アノテーション７５Ａ及びフィールド用アノテーション７５Ｂをクラス７０に付与する（ステップＳ２）。
これにより、集団項目５０がプリミティブ型のクラス７０に変換される。
【００３６】
クラス用アノテーション７５Ａ及びフィールド用アノテーション７５Ｂの生成について、より詳細には、集団項目コンバータ３４は、集団項目５０の固定長バイト配列８０に基づいてクラス用アノテーション７５Ａを生成し、当該クラス用アノテーション７５Ａを親クラス７１及び子クラス７２に付与する。また、集団項目コンバータ３４は、固定長バイト配列８０、基本項目５１のデータ型５４、及び桁数に基づいてフィールド用アノテーション７５Ｂを生成し、当該フィールド用アノテーション７５Ｂをフィールド７３に付与する。
【００３７】
図７の例では、集団項目５０のコンパイルの結果、１６進数で表記された値が格納された６バイト長の固定長バイト配列８０が生成される。かかる固定長バイト配列８０において、先頭（ｉ＝０）の配列要素に「０１  ＣＨＡＲＡ＿ＶＡＬＵＥ」の値（図示例「４１」（＝ＡＳＣＩＩ文字「Ａ」））が格納されており、１番目（i＝１）の配列要素に「０３  ＣＨＡＲＡ＿ＶＡＬＵＥ」の値（図示例「４２」（＝ＡＳＣＩＩ文字「Ｂ」））が格納されており、２番目（i＝２）から３番目（i＝３）の配列要素にかけて「０３  ＳＨＯＲＴ＿ＶＡＬＵＥ」の値（図示例「００」「０Ｂ」）が格納されており、また、４番目（i＝４）から５番目（i＝５）の配列要素にかけて「０３  ＰＡＣＫ＿ＶＡＬＵＥ」の値（図示例「１２」「３Ｃ」）が格納されている。
【００３８】
集団項目コンバータ３４は、クラス用アノテーション７５Ａを生成する場合、親クラス７１及び子クラス７２について、固定長バイト配列８０に占める配列要素の数を特定し、当該配列要素の数を第２引数７５Ａ２に格納する。
図７の例では、親クラス７０に対応する「０１  ＳＴＲＵＣＴ＿ＴＯＰ」、及び、子クラス７２に対応する「０２  ＳＴＲＵＣＴ＿ＣＨＩＬＤ」のそれぞれの配列要素の数は「６」及び「５」であるため、集団項目コンバータ３４は、親クラス７１のクラス用アノテーション７５Ａの第２引数７５Ａ２（名称：ｌｅｎｇｔｈ）に「６」を格納し、子クラス７２のクラス用アノテーション７５Ａの第２引数７５Ａ２に「５」を格納する。
【００３９】
一方、集団項目コンバータ３４は、フィールド用アノテーション７５Ｂを生成する場合、各フィールド７３について、対応する基本項目５１のデータ型５４、桁数、及び、固定長バイト配列８０における開始位置を特定し、それぞれを第１引数７５Ｂ１、第２引数７５Ｂ２、及び第３引数７５Ｂ３に格納する。
【００４０】
図７の例では、「０２  ＣＨＡＲＡ＿ＶＡＬＵＥ」は、データ型５４がＸ型（半角文字）であり、桁数が「１」であり、固定長バイト配列８０における開始位置が先頭（i＝０）の配列要素である。この場合、集団項目コンバータ３４は、フィールド用アノテーション７５Ｂの第１引数７５Ｂ１（名称：ｔｙｐｅ）に、Ｘ型であることを明示する「ＣＢＬＴｙｐｅ．Ｘ」を格納し、第２引数７５Ｂ２（名称：ｄｉｇｉｔ）に「１」を格納し、第３引数７５Ｂ３（名称：ｌｏｃａｔｉｏｎ）に、先頭の配列要素を示す「０」を格納する。
【００４１】
また図７の例では、「０３  ＰＡＣＫ＿ＶＡＬＵＥ」は、データ型５４がパック１０進数型であり、桁数が「３」である。この「０３  ＰＡＣＫ＿ＶＡＬＵＥ」に対応するフィールド７３は子クラス７２に属するため、固定長バイト配列８０における開始位置には、固定長バイト配列８０内で子クラス７２が占めるバイト配列８０Ａにおける開始位置が用いられる。図７の例では、子クラス７２が占めるバイト配列８０Ａにおいて、「０３  ＰＡＣＫ＿ＶＡＬＵＥ」の開始位置は３番目（ｊ＝３）の配列要素である。
この場合、集団項目コンバータ３４は、フィールド用アノテーション７５Ｂの第１引数７５Ｂ１に、パック１０進数型であることを明示する「ＣＢＬＴｙｐｅ．ｕｓ９＿ＣＯＭＰ９」を格納し、第２引数７５Ｂ２に「３」を格納し、第３引数７５Ｂ３に開始位置の「３」を格納する。
【００４２】
なお、本実施形態において、フィールド用アノテーション７５Ｂの第１引数７５Ｂ１に使用する文字列は、ＣＯＢＯＬの基本項目５１のデータ型５４に対応して予め設定されており、また、当該文字列は、対応するフィールド７３に設定されたアノテーション情報から参照される。また、このオリジナルスーパークラス６５には、上述の通り、フィールド用アノテーション７５Ｂの第１引数７５Ｂ１、第２引数７５Ｂ２、及び第３引数７５Ｂ３に基づいて、固定長バイト配列８０へアクセスするメソッドなどが定義されている。固定長バイト配列８０へのアクセスは、例えば、固定長バイト配列８０に対する値の読み書きや、固定長バイト配列８０の生成などを含む。
【００４３】
このように、クラス７０は、集団項目５０の基本項目５１に対応する親クラス７１、子クラス７２、及びフィールド７３のそれぞれに、固定長バイト配列８０に関する情報を含むクラス用アノテーション７５Ａ及びフィールド用アノテーション７５Ｂが付与される。
これにより、変換後のＪａｖａソースＮＪにおいては、固定長バイト配列８０に関する処理（例えば、フィールド７３と固定長バイト配列８０との間のデータのやり取り）を、クラス用アノテーション７５Ａ及びフィールド用アノテーション７５Ｂを用いて実現することができる。本実施形態では、クラス７０は、固定長バイト配列８０へのアクセスするメソッドを含むオリジナルスーパークラス６５を継承しているため、固定長バイト配列８０を扱う処理のコーディングに要する労力が低減される。
さらに、クラス用アノテーション７５Ａ及びフィールド用アノテーション７５Ｂは、クラス７０に付随する形でＪａｖａソースＮＪに記述されるため可読性を向上させることができる。
【００４４】
また、クラス７０は、基本項目５１の階層構造及び従属関係に対応する親子関係の親クラス７１、及び子クラス７２を有するため、ＣＯＢＯＬ文法における「ＯＦ修飾」と同様の表記が、言語変換部３０による変換後のＪａｖａソースＮＪにおいて記述される。例えば、図７に示した集団項目５０の第３層の「０３  ＣＨＡＲ＿ＶＡＬＵＥ」の「ＭＯＶＥ」命令は、図８に示すように、記述例１のように記述される。一方、ＪａｖａソースＮＪにおいては、記述例１と同等の命令が記述例２のように記述され、変換後のＪａｖａソースＮＪの可読性が向上する。
【００４５】
図９は、ＣＯＢＯＬにおける配列を含む集団項目５０と、Ｊａｖａにおけるクラス７０との対応を示す図である。
集団項目５０の中において、「配列」は、「ＯＣＣＵＲＳ句」を用いて宣言され、図９の例では、単一のデータ項目形式の配列が「０２  ＣＨＡＲ＿ＶＡＬＵＥ  ＰＩＣ  Ｘ（０２）  ＯＣＣＵＲＳ  ２．」によって定義されており、また、集団項目形式の配列が「０２  ＳＴＲＵＣＴ＿ＣＨＩＬＤ  ＯＣＣＵＲＳ  ２．」によって定義されている。
同図の例では、単一のデータ項目形式の配列に対応する固定長バイト配列８０−１は、２バイト×２の一次元配列となっており、文字「Ａ」、「１」、「Ａ」、「２」のそれぞれを１６進数によって示した値が各配列要素に格納されている。
また、同図の例では、集団項目形式の配列は、文字型のデータ項目と数値型のデータ項目とから成る配列であり、当該配列に対応する固定長バイト配列８０−２の各配列要素には、文字「Ｂ」、符号付き数値「＋１０」、文字「Ｃ」、符号付き数値「＋１１」のそれぞれを１６進数によって示した値が格納されている。
【００４６】
集団項目コンバータ３４が、かかる集団項目５０をＪａｖａのクラス７０に変換する場合、先ず、基本項目５１の階層構造及び従属関係に対応する親子関係の親クラス７１、及び子クラス７２を定義する。図９の例では、集団項目コンバータ３４は、集団項目５０の「０１  ＯＣＣＵＲＳ＿ＳＴＲＵＣＴ」に対応する「ｃｌａｓｓ  ＯＣＣＵＲＳ＿ＳＴＲＵＣＴ」を親クラス７１として定義し、「０２  ＳＴＲＵＣ＿ＣＨＩＬＤ  ＯＣＣＵＲＳ  ２．」に対応する「ｃｌａｓｓ  ＳＴＲＵＣＴ＿ＣＨＩＬＤ」を子クラス７２として定義する。また、集団項目コンバータ３４は、ＣＯＢＯＬの配列に対応するフィールド７３を同じく配列として定義する。なお、図９では、配列として定義されたフィールド７３には、他のフィールド７３と区別するために、符号７３−１、７３−２を付している。
【００４７】
次いで、集団項目コンバータ３４は、クラス用アノテーション７５Ａ及びフィールド用アノテーション７５Ｂをクラス７０に付与する。この場合において、ＣＯＢＯＬの配列に対応するフィールド７３−１、７３−２に付与されるフィールド用アノテーション７５Ｂは、ＣＯＢＯＬの配列に対応する旨を示す第４引数７５Ｂ４（図示例、「ｏｃｃｕｒｓ」）を含んでおり、この第４引数７５Ｂ４によって配列に関する情報がクラス７０に記述される。そして、この第４引数７５Ｂ４と、固定長バイト配列８０−１、８０−２に関する情報を示す上述した他の引数（第２引数７５Ａ２、７５Ｂ２、第３引数７５Ｂ３）とによって、ＣＯＢＯＬにおける「配列」と同等の機能がＪａｖａのクラス７０によって実現される。
【００４８】
本実施形態では、オリジナルスーパークラス６５（図示例では「Ｓｔｒｕｃｔクラス」）は、フィールド用アノテーション７５Ｂが含む第４引数７５Ｂ４（「ｏｃｃｕｒｓ」）の値に基づいて、フィールド７３−１、７３−２が配列に対応することを特定し、当該配列に対応した固定長バイト配列８０−１、８０−２に基づいて、フィールド７３−１、７３−２に値を設定する機能を有することで、「ＣＯＢＯＬ」の配列と同等の機能が実現されている。
例えば、図９において、単一のデータ項目形式の配列に対応したフィールド７３−１について、オリジナルスーパークラス６５は、フィールド７３−１の「Ｓｔｒｉｎｇ［］」の各配列要素に「ＣＨＡＲ＿ＶＡＬＵＥ［０］＝”Ａ１”」、「ＣＨＡＲ＿ＶＡＬＵＥ［１］＝”Ａ２”」となるように値を設定する。
また、集団項目形式の配列に対応したフィールド７３−２について、オリジナルスーパークラス６５は、フィールド７３−２の「ＳＴＲＵＣＴ＿ＣＨＩＬＤ［］」の各配列要素に、次のように値を設定する。すなわち、オリジナルスーパークラス６５は、「ＳＴＲＵＣＴ＿ＣＨＩＬＤ［０］」に「Ｓｔｒｉｎｇ＝”Ｂ”」と「ｓｈｏｒｔ＝＋１０」の値を設定し、「ＳＴＲＵＣＴ＿ＣＨＩＬＤ［１］」に「Ｓｔｒｉｎｇ＝”Ｃ”」と「ｓｈｏｒｔ＝＋１１」の値を設定する。
【００４９】
図１０は、ＣＯＢＯＬにおける「再定義」を含む集団項目５０と、Ｊａｖａにおけるクラス７０との対応を示す図である。
集団項目５０の中において、「再定義」は、「ＲＥＤＥＦＩＮＥＳ句」を用いて宣言され、図１０の例では、「ＹＹＹＹＭＭＤＤ」が「ＲＥＤＥＦＩＮＥＳ句」によって「ＹＹＭＭＤＤ＿Ｒ」として再定義されている。また、同図において、「ＹＹＹＹＭＭＤＤ」は年月日を８桁の文字列数字（年が３桁、月及び日がそれぞれ２桁）で示す基本項目５１であり、「ＹＹＭＭＤＤ＿Ｒ」は年月日を６桁の文字列数字（年、月、及び日がそれぞれ２桁）で示す基本項目６１として定義されている。
そして、かかる「ＹＹＹＹＭＭＤＤ」は、コンパイラによってコンパイルされると、８個の配列要素から成る固定長バイト配列８０に変換され、各配列要素には、年月日の各桁の文字列数字を１６進数によって表記した値が格納される。
【００５０】
図１０の例は、「ＹＹＹＹＭＭＤＤ」が示す年月日が「２０２１年０８月１０日」である場合を示しており、かかる年月日を示す８桁の文字列数値は１６進数表記を用いると、「３２」「３０」「３２」「３１」「３０」「３８」「３１」「３０」と表記され、これらの各値が固定長バイト配列８０の各配列要素に格納される。
一方、「ＹＹＭＭＤＤ＿Ｒ」については、図１０における「０３  ＦＩＬＬＥＲ  ＰＩＣ  Ｘ（０２）」によって固定長バイト配列８０の０番目（i＝０）及び１番目（i＝１）の配列要素が無視され、「０３  ＹＹＭＭＤＤ  ＰＩＣ  Ｘ（０６）」によって固定長バイト配列８０の２番目（i＝２）から７番目（i＝７）までの配列要素が参照される。
【００５１】
集団項目コンバータ３４が、かかる集団項目５０をＪａｖａのクラス７０に変換する場合、先ず、基本項目５１の階層構造及び従属関係に対応する親子関係の親クラス７１、及び子クラス７２を定義する。図１０の例では、集団項目コンバータ３４は、集団項目５０の「０１  ＲＥＤＥＦＩＮＥＳ＿ＳＴＲＵＣＴ」に対応する「ｃｌａｓｓ  ＲＥＤＥＦＩＮＥＳ＿ＳＴＲＵＣＴ」を親クラス７１として定義し、「０２  ＹＹＭＭＤＤ＿Ｒ  ＲＥＤＥＦＩＮＥＳ  ＹＹＹＹＭＭＤＤ」に対応する「ｃｌａｓｓ  ＹＹＭＭＤＤ＿Ｒ」を子クラス７２として定義する。
【００５２】
次いで、集団項目コンバータ３４は、クラス用アノテーション７５Ａ及びフィールド用アノテーション７５Ｂをクラス７０に付与する。この場合において、再定義句に対応するフィールド７３（図１０における「Ｐｕｂｌｉｃ  ＹＹＭＭＤＤ＿Ｒ  ＹＹＭＭＤＤ＿Ｒ；」）に付与するフィールド用アノテーション７５Ｂは、再定義元の基本項目５１を示す第５引数７５Ｂ５（図示例、「ｒｅｄｅｆｉｎｅｓ」）を含んでおり、この第５引数７５Ｂ５によって再定義に関する情報がクラス７０に記述される。そして、この第５引数７５Ｂ５と、固定長バイト配列８０に関する情報を示す上述した他の引数（第２引数７５Ａ２、７５Ｂ２、第３引数７５Ｂ３）とによって、ＣＯＢＯＬにおける「再定義」と同等の機能がＪａｖａのクラス７０によって実現されることとなる。
【００５３】
なお、ＪａｖａソースＮＪにおいて、再定義先に対応する子クラス７２（図１０における「ｃｌａｓｓ  ＹＹＭＭＤＤ＿Ｒ」）のフィールド７３（図１０における「Ｓｔｒｉｎｇ  ＹＹＭＭＤＤ；」）の更新は、図１１に示すＳｅｔｔｅｒメソッド７７を子クラス７２に追加し、再定義先に対応する子クラス７２の変更を再定義元に対応する親クラス７１に反映することで可能である。同図において、かかる反映のためのプロセスがロジック部７７Ａにコーディングされている。
【００５４】
本実施形態によれば、次の効果を奏する。
【００５５】
本実施形態のソースコード変換装置１は、集団項目５０が記述されたＣＯＢＯＬソースＮＣをＪａｖａソースＮＪに変換する装置であって、集団項目コンバータ３４を備える。
集団項目コンバータ３４は、集団項目５０が含む基本項目５１の階層構造、及び従属関係に対応する親子関係を有した親クラス７１、及び子クラス７２を含む、プリミティブ型のクラス７０に集団項目５０を変換する。また集団項目コンバータ３４は、集団項目５０の基本項目５１の値が並んだ固定長バイト配列８０に関する情報を示すクラス用アノテーション７５Ａ及びフィールド用アノテーション７５Ｂをクラス７０に付与する。
【００５６】
この構成によれば、集団項目５０を変換したクラス７０がプリミティブ型であるため、Ｊａｖａの開発環境、及び実行環境が特別なライブラリをインポートせずともクラス７０を使用でき、変換後のＪａｖａソースＮＪの汎用性、及び保守性が大幅に向上する。
加えて、クラス７０は、固定長バイト配列８０に関する情報を含むクラス用アノテーション７５Ａ及びフィールド用アノテーション７５Ｂが付与されため、固定長バイト配列８０に関する処理を、クラス用アノテーション７５Ａ及びフィールド用アノテーション７５Ｂを用いて実現することができる。
さらに、クラス用アノテーション７５Ａ及びフィールド用アノテーション７５Ｂは、クラス７０に付随する形でＪａｖａソースＮＪに記述されるため可読性を向上させることができる。
【００５７】
本実施形態のソースコード変換装置１において、基本項目５１に対応するフィールド７３に付与されるフィールド用アノテーション７５Ｂは、対応する基本項目５１のデータ型５４の情報を含んでいる。
この構成によれば、ＣＯＢＯＬの複数のデータ型５４が１つのプリミティブ型に対応付けられていても、各データ型５４をフィールド用アノテーション７５Ｂによって正しく識別できる。
【００５８】
本実施形態のソースコード変換装置１において、集団項目コンバータ３４は、クラス用アノテーション７５Ａ及びフィールド用アノテーション７５Ｂに基づいて、固定長バイト配列８０へのアクセスを含むメソッドを有した独自定義のオリジナルスーパークラス６５を継承した親クラス７１を生成する。
【００５９】
この構成によれば、固定長バイト配列８０を扱う処理のコーディングに要する労力を低減することができる。
【００６０】
なお、上述した実施形態は、あくまでも本発明の一態様の例示であり、本発明の主旨を逸脱しない範囲において任意に変形、及び応用が可能である。
【００６１】
上述した実施形態において、集団項目コンバータ３４は、固定長バイト配列８０に関する情報を示すアノテーションとして、クラス用アノテーション７５Ａ及びフィールド用アノテーション７５Ｂの２種類のアノテーションを生成した。しかしながら、アノテーションの態様は、固定長バイト配列８０に関する情報を示すものでれば任意である。
【００６２】
上述した実施形態において、上記プログラム１８は、ＣＯＢＯＬソースＮＣの全部をＪａｖａソースＮＪに変換する機能を実現するものではなく、少なくとも集団項目コンバータ３４の機能を実現するものであってもよい。
この場合、プログラム１８は、ＣＯＢＯＬソースＮＣに記述される集団項目５０が含む基本項目５１の階層構造、及び従属関係に対応する親子関係を有した親クラス７１、及び子クラス７２を含む、Ｊａｖａにおけるプリミティブ型のクラス７０を定義することと、集団項目５０の基本項目５１の値が並んだ固定長バイト配列８０に関する情報を示すアノテーションをクラス７０に付与することと、をコンピュータに実行させるものとなる。
コンピュータがプログラム１８を実行することで、ＣＯＢＯＬソースＮＣに記述される集団項目５０に対応するクラス７０を生成する。
なお、光ディスクや可搬型半導体メモリ等の記録媒体にプログラム１８を記録することで、又は、電気通信回線を通じて送信することで、当該プログラム１８を頒布可能である。
【００６３】
図１及び図２に示す機能ブロックは、本願発明を理解容易にするために、構成要素を主な処理内容に応じて分類して示した概略図であり、各構成要素は、処理内容に応じて、さらに多くの構成要素に分類することもできる。また、１つの構成要素がさらに多くの処理を実行するように分類することもできる。
【符号の説明】
【００６４】
１  ソースコード変換装置
２２  変換処理部
３０  言語変換部
３２  ＣＯＢＯＬコンパイラ
３４  集団項目コンバータ
３６  解析結果
３７  型対応データ
４２  データ部
５０  集団項目
５１  基本項目
５４  データ型
６５  オリジナルスーパークラス
７０  クラス
７１  親クラス
７２  子クラス
７３  フィールド
７５Ａ  クラス用アノテーション
７５Ｂ  フィールド用アノテーション
８０  固定長バイト配列
ＮＣ  ＣＯＢＯＬソース
ＮＪ  Ｊａｖａソース
【要約】
【課題】集団項目の記述を含むＣＯＢＯＬのソースコードに対応するＪａｖａのソースコードの汎用性及び保守性を高める。
【解決手段】集団項目５０が記述されたＣＯＢＯＬのソースコードをＪａｖａのソースコードに変換するソースコード変換装置１において、前記集団項目５０が含む基本項目５１の階層構造、及び従属関係に対応する親子関係を有した親クラス７１、及び子クラス７２を含む、プリミティブ型のクラス７０に前記集団項目５０を変換する集団項目コンバータ３４を備え、前記集団項目コンバータ３４は、前記集団項目５０の前記基本項目５１の値が並んだ固定長バイト配列８０に関する情報を示すアノテーションを前記クラス７０に付与する。
【選択図】図２【図１】
0006982920.tif 000002
【図２】
0006982920.tif 000003
【図３】
0006982920.tif 000004
【図４】
0006982920.tif 000005
【図５】
0006982920.tif 000006
【図６】
0006982920.tif 000007
【図７】
0006982920.tif 000008
【図８】
0006982920.tif 000009
【図９】
0006982920.tif 000010
【図１０】
0006982920.tif 000011
【図１１】
0006982920.tif 000012