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

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

▶ TIS株式会社の特許一覧

<>
  • 特許6475888-プログラム変換システム 図000002
  • 特許6475888-プログラム変換システム 図000003
  • 特許6475888-プログラム変換システム 図000004
  • 特許6475888-プログラム変換システム 図000005
  • 特許6475888-プログラム変換システム 図000006
  • 特許6475888-プログラム変換システム 図000007
  • 特許6475888-プログラム変換システム 図000008
  • 特許6475888-プログラム変換システム 図000009
  • 特許6475888-プログラム変換システム 図000010
  • 特許6475888-プログラム変換システム 図000011
  • 特許6475888-プログラム変換システム 図000012
  • 特許6475888-プログラム変換システム 図000013
  • 特許6475888-プログラム変換システム 図000014
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】6475888
(24)【登録日】2019年2月8日
(45)【発行日】2019年2月27日
(54)【発明の名称】プログラム変換システム
(51)【国際特許分類】
   G06F 8/51 20180101AFI20190218BHJP
   G06F 8/76 20180101ALI20190218BHJP
【FI】
   G06F8/51
   G06F8/76
【請求項の数】7
【全頁数】20
(21)【出願番号】特願2018-189894(P2018-189894)
(22)【出願日】2018年10月5日
【審査請求日】2018年10月5日
【早期審査対象出願】
(73)【特許権者】
【識別番号】514020389
【氏名又は名称】TIS株式会社
(74)【代理人】
【識別番号】100079108
【弁理士】
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【弁理士】
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【弁理士】
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【弁理士】
【氏名又は名称】内藤 和彦
(74)【代理人】
【識別番号】100126480
【弁理士】
【氏名又は名称】佐藤 睦
(72)【発明者】
【氏名】熊谷 宏樹
(72)【発明者】
【氏名】奥 敦詞
(72)【発明者】
【氏名】宮崎 俊郎
【審査官】 北元 健太
(56)【参考文献】
【文献】 特開2010−86218(JP,A)
【文献】 特開2016−115070(JP,A)
【文献】 特開2006−11756(JP,A)
【文献】 米国特許出願公開第2006/0031820(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00 − 8/77
G06F 9/44 − 9/455
(57)【特許請求の範囲】
【請求項1】
COBOLソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、
前記データ定義が集団項目の定義である場合、Javaソースプログラムにおいて当該集団項目を実現するための第1のクラスの第1のインスタンスを生成する第1のソースコードを出力する集団項目定義コード出力部であって、前記第1のクラスは、対応するデータ項目のデータ領域への参照を持つ第4のクラスの第4のインスタンスへの参照、オフセット値、及び前記対応するデータ項目のデータ長を示すバイト数をメンバ変数として保持し、前記オフセット値には、0がセットされる、集団項目定義コード出力部と、
前記データ定義が基本項目の定義であり、かつ、レベルが最上位である場合、前記Javaソースプログラムにおいて当該基本項目を実現するための第2のクラスの第2のインスタンスを生成する第2のソースコードを出力する第1の基本項目定義コード出力部と、
前記データ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、前記Javaソースプログラムにおいて当該基本項目を実現するための第3のクラスの第3のインスタンスを前記第1のクラスのメンバ変数とする第3のソースコードを出力する第2の基本項目定義コード出力部であって、前記第3のクラスは、前記第4のクラスの前記第4のインスタンスへの参照、オフセット値、及び前記対応するデータ項目のデータ長を示すバイト数をメンバ変数として保持し、前記オフセット値には、前記対応するデータ項目が属する最上位の集団項目における先頭のデータ項目の開始位置を0とした場合の、前記対応するデータ項目のデータ領域の開始位置がセットされる、第2の基本項目定義コード出力部と、
を備え、
前記第1のソースコード及び前記第3のソースコードに基づいた前記第1のクラスの前記第1のインスタンスの生成時に、前記第4のクラスの前記第4のインスタンスが生成され、かつ、前記第1のインスタンスのデータ領域内に、前記第1のクラスの前記メンバ変数である前記第3のクラスの前記第3のインスタンスのデータ領域が確保される、
プログラム変換システム。
【請求項2】
請求項1に記載されたプログラム変換システムから出力されたJavaソースプログラムを実行する変換プログラム実行システムであって、
前記第1のインスタンスの生成時に前記第4のインスタンスを生成し、前記第4のクラスは、データ領域への参照、及び、シフト値を保持し、かつ、
前記第1のソースコードを含む呼び出し先プログラムを呼び出すCALL文から変換された命令が実行されると、
前記第1のインスタンスに対して生成された前記第4のインスタンスが参照する前記データ領域を、前記呼び出し先プログラムを呼び出す際に指定される第5のクラスの第5のインスタンスが参照する前記第4のクラスの第6のインスタンスが参照するデータ領域に変更し、及び
前記第4のインスタンスの前記シフト値を、前記第5のインスタンスの前記オフセット値に前記第6のインスタンスの前記シフト値を加えた値に変更する
プロキシインスタンス管理部、
を備える変換プログラム実行システム。
【請求項3】
前記第1のインスタンスの前記メンバ変数である前記第3のインスタンスにアクセスすることは、
前記第3のインスタンスが参照する前記第4のインスタンスが参照するデータ領域を特定することと、
前記第3のインスタンスの前記オフセット値に、前記第4のインスタンスの前記シフト値を加えることで前記第3のインスタンスの開始位置を特定することと、
を含む、請求項2に記載の変換プログラム実行システム。
【請求項4】
COBOLソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、
前記データ定義が集団項目の定義である場合、Javaソースプログラムにおいて当該集団項目を実現するための第1のクラスの第1のインスタンスを生成する第1のソースコードを出力する集団項目定義コード出力部であって、前記第1のクラスは、対応するデータ項目のデータ領域への参照とシフト値とを持つ第4のクラスの第4のインスタンスへの参照、オフセット値、及び前記対応するデータ項目のデータ長を示すバイト数をメンバ変数として保持し、前記オフセット値には、0がセットされる、集団項目定義コード出力部と、
前記データ定義が基本項目の定義であり、かつ、レベルが最上位である場合、前記Javaソースプログラムにおいて当該基本項目を実現するための第2のクラスの第2のインスタンスを生成する第2のソースコードを出力する第1の基本項目定義コード出力部と、
前記データ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、前記Javaソースプログラムにおいて当該基本項目を実現するための第3のクラスの第3のインスタンスを前記第1のクラスのメンバ変数とする第3のソースコードを出力する第2の基本項目定義コード出力部であって、前記第3のクラスは、前記第4のクラスの前記第4のインスタンスへの参照、オフセット値、及び前記対応するデータ項目のデータ長を示すバイト数をメンバ変数として保持し、前記オフセット値には、前記対応するデータ項目が属する最上位の集団項目における先頭のデータ項目の開始位置を0とした場合の、前記対応するデータ項目のデータ領域の開始位置がセットされる、第2の基本項目定義コード出力部と、
前記第1のソースコード及び前記第3のソースコードに基づいた前記第1のクラスの前記第1のインスタンスの生成時に、前記第4のクラスの前記第4のインスタンスを生成し、かつ、
前記第1のソースコードを含む呼び出し先プログラムを呼び出すCALL文から変換された命令が実行されると、
前記第1のインスタンスに対して生成された前記第4のインスタンスが参照する前記データ領域を、前記呼び出し先プログラムを呼び出す際に指定される第5のクラスの第5のインスタンスが参照する前記第4のクラスの第6のインスタンスが参照するデータ領域に変更し、及び
前記第4のインスタンスの前記シフト値を、前記第5のインスタンスの前記オフセット値に前記第6のインスタンスの前記シフト値を加えた値に変更する
プロキシインスタンス管理部と、
を備え、
前記第1のインスタンスのデータ領域内に、前記第1のクラスの前記メンバ変数である前記第3のクラスの前記第3のインスタンスのデータ領域が確保される、
情報処理システム。
【請求項5】
コンピュータが、
COBOLソースプログラムのデータ部におけるデータ定義を順次読み込むことと、
前記データ定義が集団項目の定義である場合、Javaソースプログラムにおいて当該集団項目を実現するための第1のクラスの第1のインスタンスを生成する第1のソースコードを出力することと、
前記データ定義が基本項目の定義であり、かつ、レベルが最上位である場合、前記Javaソースプログラムにおいて当該基本項目を実現するための第2のクラスの第2のインスタンスを生成する第2のソースコードを出力することと、
前記データ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、前記Javaソースプログラムにおいて当該基本項目を実現するための第3のクラスの第3のインスタンスを前記第1のクラスのメンバ変数とする第3のソースコードを出力することであって、前記第1のクラス及び前記第3のクラスは、対応するデータ項目のデータ領域への参照を持つ第4のクラスの第4のインスタンスへの参照、オフセット値、及び前記対応するデータ項目のデータ長を示すバイト数をメンバ変数として保持し、前記オフセット値には、前記対応するデータ項目が最上位の場合、0がセットされ、前記対応するデータ項目が最上位でない場合、前記対応するデータ項目が属する最上位の集団項目における先頭のデータ項目の開始位置を0とした場合の、前記対応するデータ項目のデータ領域の開始位置がセットされる、ことと、
を含み、
前記第1のソースコード及び前記第3のソースコードに基づいた前記第1のクラスの前記第1のインスタンスの生成時に、前記第4のクラスの前記第4のインスタンスが生成され、かつ、前記第1のインスタンスのデータ領域内に、前記第1のクラスの前記メンバ変数である前記第3のクラスの前記第3のインスタンスのデータ領域が確保される、
プログラム変換方法。
【請求項6】
請求項5に記載されたプログラム変換方法により出力されたJavaソースプログラムを実行するコンピュータが、
前記第1のインスタンスの生成時に前記第4のインスタンスを生成することであって、前記第4のクラスは、データ領域への参照、及び、シフト値を保持する、ことと、
前記第1のソースコードを含む呼び出し先プログラムを呼び出すCALL文から変換された命令が実行されると、
前記第1のインスタンスに対して生成された前記第4のインスタンスが参照する前記データ領域を、前記呼び出し先プログラムを呼び出す際に指定される第5のクラスの第5のインスタンスが参照する前記第4のクラスの第6のインスタンスが参照するデータ領域に変更し、及び
前記第4のインスタンスの前記シフト値を、前記第5のインスタンスの前記オフセット値に前記第6のインスタンスの前記シフト値を加えた値に変更することと、
を含む変換プログラム実行方法。
【請求項7】
コンピュータが、
COBOLソースプログラムのデータ部におけるデータ定義を順次読み込むことと、
前記データ定義が集団項目の定義である場合、Javaソースプログラムにおいて当該集団項目を実現するための第1のクラスの第1のインスタンスを生成する第1のソースコードを出力することと、
前記データ定義が基本項目の定義であり、かつ、レベルが最上位である場合、前記Javaソースプログラムにおいて当該基本項目を実現するための第2のクラスの第2のインスタンスを生成する第2のソースコードを出力することと、
前記データ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、前記Javaソースプログラムにおいて当該基本項目を実現するための第3のクラスの第3のインスタンスを前記第1のクラスのメンバ変数とする第3のソースコードを出力することであって、前記第1のクラス及び前記第3のクラスは、対応するデータ項目のデータ領域への参照とシフト値とを持つ第4のクラスの第4のインスタンスへの参照、オフセット値、及び前記対応するデータ項目のデータ長を示すバイト数をメンバ変数として保持し、前記オフセット値には、前記対応するデータ項目が最上位の場合、0がセットされ、前記対応するデータ項目が最上位でない場合、前記対応するデータ項目が属する最上位の集団項目における先頭のデータ項目の開始位置を0とした場合の、前記対応するデータ項目のデータ領域の開始位置がセットされる、ことと、
前記第1のソースコード及び前記第3のソースコードに基づいた前記第1のクラスの前記第1のインスタンスの生成時に、前記第4のクラスの前記第4のインスタンスを生成することと、
前記第1のソースコードを含む呼び出し先プログラムを呼び出すCALL文から変換された命令が実行されると、
前記第1のインスタンスに対して生成された前記第4のインスタンスが参照する前記データ領域を、前記呼び出し先プログラムを呼び出す際に指定される第5のクラスの第5のインスタンスが参照する前記第4のクラスの第6のインスタンスが参照するデータ領域に変更し、及び
前記第4のインスタンスの前記シフト値を、前記第5のインスタンスの前記オフセット値に前記第6のインスタンスの前記シフト値を加えた値に変更することと、
を含み、
前記第1のインスタンスのデータ領域内に、前記第1のクラスの前記メンバ変数である前記第3のクラスの前記第3のインスタンスのデータ領域が確保される、
情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラム変換システムの技術に関する。
【背景技術】
【0002】
基幹システムのオープン化に伴い、COBOLソースプログラムのJava(登録商標)ソースプログラムへの変換が注目されている。
【0003】
COBOLにおけるCALL呼び出しでは、呼び出し元プログラムの引数に“BY REFERENCE”が明示的又は暗黙的に指定されると、呼び出し元プログラムの引数と呼び出し先プログラムの仮引数間でデータ領域の共有が行われる。具体的には、BY REFERENCEを指定した場合、引数の値が格納されたデータ領域のアドレスが呼び出し先プログラムに渡されるので、呼び出し元プログラムと呼び出し先プログラムとで同じアドレスが指し示すデータ領域を参照することになる。この際、COBOLでは、引数と仮引数との間でデータ項目名が異なっていても問題は生じない。一方、Javaでは、引数と仮引数とで型が一致する場合にのみ、引数のアドレスを呼び出し先プログラムに渡す参照渡しが可能である。
【0004】
特許文献1では、COBOLソースプログラムにて引数のデータ項目名を調整することにより、COBOLソースプログラムから変換した後のJavaソースプログラムで引数及び仮引数の型を一致させる手法が提示されている。これにより、通常の変換では引数と仮引数で型が一致しないケースでも引数の参照渡しが可能となり、COBOLソースプログラムから変換されたJavaソースプログラムの性能の劣化を抑制することができる。
また、特許文献2では、COBOLソースプログラムのデータ定義において集団項目が定義される場合におけるデータ領域の管理の手法が提示されている。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2018−55448号公報
【特許文献2】特開2016−115070号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
特許文献1では、CALL呼び出しの呼び出し元プログラムの引数と呼び出し先の仮引数とで共通のCOPY句が使用されている必要があり、それ以外の場合については、COBOLソースプログラムから変換されたJavaソースプログラム上で呼び出し元プログラムの引数と呼び出し先プログラムの仮引数との間で参照渡しを行うことができなかった。特許文献2では、COBOLソースプログラムから変換されたJavaソースプログラムにおいて、集団項目単位でのデータ転送の処理コストの削減には成功したものの、性能を劣化させずに引数と仮引数との間でデータ領域の共有を実現することができなかった。
【0007】
本発明はこのような事情に鑑みてなされたものであり、COBOLソースプログラムから変換されたJavaソースプログラムの性能の劣化を抑制しつつ、CALL呼び出しの呼び出し元プログラムの引数と呼び出し先プログラムの仮引数との間でデータ領域の共有を実現することを目的とする。
【課題を解決するための手段】
【0008】
本発明の一態様に係るプログラム変換システムは、COBOLソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、データ定義が集団項目の定義である場合、Javaソースプログラムにおいて当該集団項目を実現するための第1のクラスの第1のインスタンスを生成する第1のソースコードを出力する集団項目定義コード出力部と、データ定義が基本項目の定義であり、かつ、レベルが最上位である場合、Javaソースプログラムにおいて当該基本項目を実現するための第2のクラスの第2のインスタンスを生成する第2のソースコードを出力する第1の基本項目定義コード出力部と、データ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、Javaソースプログラムにおいて当該基本項目を実現するための第3のクラスの第3のインスタンスを第1のクラスのメンバ変数とする第3のソースコードを出力する第2の基本項目定義コード出力部であって、第1のクラス及び第3のクラスは、対応するデータ項目のデータ領域への参照を持つ第4のクラスの第4のインスタンスへの参照、オフセット値、及び対応するデータ項目のデータ長を示すバイト数をメンバ変数として保持し、オフセット値には、対応するデータ項目が最上位の場合、0がセットされ、対応するデータ項目が最上位でない場合、対応するデータ項目が属する最上位の集団項目における先頭のデータ項目の開始位置を0とした場合の、対応するデータ項目のデータ領域の開始位置がセットされる、第2の基本項目定義コード出力部と、を備え、第1のソースコード及び第3のソースコードに基づいた第1のクラスの第1のインスタンスの生成時に、第4のクラスの第4のインスタンスが生成され、かつ、第1のインスタンスのデータ領域内に、第1のクラスのメンバ変数である第3のクラスの第3のインスタンスのデータ領域が確保される。
【0009】
また、本発明の一態様に係る変換プログラム実行システムは、第1のインスタンスの生成時に第4のインスタンスを生成し、第4のクラスは、データ領域への参照、及び、シフト値を保持し、かつ、第1のソースコードを含む呼び出し先プログラムを呼び出すCALL文から変換された命令が実行されると、第1のインスタンスに対して生成された第4のインスタンスが参照するデータ領域を、呼び出し先プログラムを呼び出す際に指定される第5のクラスの第5のインスタンスが参照する第4のクラスの第6のインスタンスが参照するデータ領域に変更し、及び第4のインスタンスのシフト値を、第5のインスタンスのオフセット値に第6のインスタンスのシフト値を加えた値に変更するプロキシインスタンス管理部、を備える。
【0010】
本発明の一態様に係る情報処理システムは、COBOLソースプログラムのデータ部におけるデータ定義を順次読み込むデータ定義読み取り部と、データ定義が集団項目の定義である場合、Javaソースプログラムにおいて当該集団項目を実現するための第1のクラスの第1のインスタンスを生成する第1のソースコードを出力する集団項目定義コード出力部と、データ定義が基本項目の定義であり、かつ、レベルが最上位である場合、Javaソースプログラムにおいて当該基本項目を実現するための第2のクラスの第2のインスタンスを生成する第2のソースコードを出力する第1の基本項目定義コード出力部と、データ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、Javaソースプログラムにおいて当該基本項目を実現するための第3のクラスの第3のインスタンスを第1のクラスのメンバ変数とする第3のソースコードを出力する第2の基本項目定義コード出力部であって、第1のクラス及び第3のクラスは、対応するデータ項目のデータ領域への参照とシフト値とを持つ第4のクラスの第4のインスタンスへの参照、オフセット値、及び対応するデータ項目のデータ長を示すバイト数をメンバ変数として保持し、オフセット値には、対応するデータ項目が最上位の場合、0がセットされ、対応するデータ項目が最上位でない場合、対応するデータ項目が属する最上位の集団項目における先頭のデータ項目の開始位置を0とした場合の、対応するデータ項目のデータ領域の開始位置がセットされる、第2の基本項目定義コード出力部と、第1のソースコード及び第3のソースコードに基づいた第1のクラスの第1のインスタンスの生成時に、第4のクラスの第4のインスタンスを生成し、かつ、第1のソースコードを含む呼び出し先プログラムを呼び出すCALL文から変換された命令が実行されると、第1のインスタンスに対して生成された第4のインスタンスが参照するデータ領域を、呼び出し先プログラムを呼び出す際に指定される第5のクラスの第5のインスタンスが参照する第4のクラスの第6のインスタンスが参照するデータ領域に変更し、及び第4のインスタンスのシフト値を、第5のインスタンスのオフセット値に第6のインスタンスのシフト値を加えた値に変更するプロキシインスタンス管理部と、を備え、第1のインスタンスのデータ領域内に、第1のクラスのメンバ変数である第3のクラスの第3のインスタンスのデータ領域が確保される。
【0011】
本発明の一態様に係るプログラム変換方法は、コンピュータが、COBOLソースプログラムのデータ部におけるデータ定義を順次読み込むことと、データ定義が集団項目の定義である場合、Javaソースプログラムにおいて当該集団項目を実現するための第1のクラスの第1のインスタンスを生成する第1のソースコードを出力することと、データ定義が基本項目の定義であり、かつ、レベルが最上位である場合、Javaソースプログラムにおいて当該基本項目を実現するための第2のクラスの第2のインスタンスを生成する第2のソースコードを出力することと、データ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、Javaソースプログラムにおいて当該基本項目を実現するための第3のクラスの第3のインスタンスを第1のクラスのメンバ変数とする第3のソースコードを出力することであって、第1のクラス及び第3のクラスは、対応するデータ項目のデータ領域への参照を持つ第4のクラスの第4のインスタンスへの参照、オフセット値、及び対応するデータ項目のデータ長を示すバイト数をメンバ変数として保持し、オフセット値には、対応するデータ項目が最上位の場合、0がセットされ、対応するデータ項目が最上位でない場合、対応するデータ項目が属する最上位の集団項目における先頭のデータ項目の開始位置を0とした場合の、対応するデータ項目のデータ領域の開始位置がセットされる、ことと、を含み、第1のソースコード及び第3のソースコードに基づいた第1のクラスの第1のインスタンスの生成時に、第4のクラスの第4のインスタンスが生成され、かつ、第1のインスタンスのデータ領域内に、第1のクラスのメンバ変数である第3のクラスの第3のインスタンスのデータ領域が確保される。
【0012】
本発明の一態様に係る変換プログラム実行方法は、上記プログラム変換方法により出力されたJavaソースプログラムを実行するコンピュータが、第1のインスタンスの生成時に第4のインスタンスを生成することであって、第4のクラスは、データ領域への参照、及び、シフト値を保持する、ことと、第1のソースコードを含む呼び出し先プログラムを呼び出すCALL文から変換された命令が実行されると、第1のインスタンスに対して生成された第4のインスタンスが参照するデータ領域を、呼び出し先プログラムを呼び出す際に指定される第5のクラスの第5のインスタンスが参照する第4のクラスの第6のインスタンスが参照するデータ領域に変更し、及び第4のインスタンスのシフト値を、第5のインスタンスのオフセット値に第6のインスタンスのシフト値を加えた値に変更することと、を含む。
【0013】
本発明の一態様に係る情報処理方法は、コンピュータが、COBOLソースプログラムのデータ部におけるデータ定義を順次読み込むことと、データ定義が集団項目の定義である場合、Javaソースプログラムにおいて当該集団項目を実現するための第1のクラスの第1のインスタンスを生成する第1のソースコードを出力することと、データ定義が基本項目の定義であり、かつ、レベルが最上位である場合、Javaソースプログラムにおいて当該基本項目を実現するための第2のクラスの第2のインスタンスを生成する第2のソースコードを出力することと、データ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、Javaソースプログラムにおいて当該基本項目を実現するための第3のクラスの第3のインスタンスを第1のクラスのメンバ変数とする第3のソースコードを出力することであって、第1のクラス及び第3のクラスは、対応するデータ項目のデータ領域への参照とシフト値とを持つ第4のクラスの第4のインスタンスへの参照、オフセット値、及び対応するデータ項目のデータ長を示すバイト数をメンバ変数として保持し、オフセット値には、対応するデータ項目が最上位の場合、0がセットされ、対応するデータ項目が最上位でない場合、対応するデータ項目が属する最上位の集団項目における先頭のデータ項目の開始位置を0とした場合の、対応するデータ項目のデータ領域の開始位置がセットされる、ことと、第1のソースコード及び第3のソースコードに基づいた第1のクラスの第1のインスタンスの生成時に、第4のクラスの第4のインスタンスを生成することと、第1のソースコードを含む呼び出し先プログラムを呼び出すCALL文から変換された命令が実行されると、第1のインスタンスに対して生成された第4のインスタンスが参照するデータ領域を、呼び出し先プログラムを呼び出す際に指定される第5のクラスの第5のインスタンスが参照する第4のクラスの第6のインスタンスが参照するデータ領域に変更し、及び第4のインスタンスのシフト値を、第5のインスタンスのオフセット値に第6のインスタンスのシフト値を加えた値に変更することと、を含み、第1のインスタンスのデータ領域内に、第1のクラスのメンバ変数である第3のクラスの第3のインスタンスのデータ領域が確保される。
【0014】
なお、本発明において、「部」とは、単に物理的手段を意味するものではなく、その「部」が有する機能をソフトウェアによって実現する場合も含む。また、1つの「部」や装置が有する機能が2つ以上の物理的手段や装置により実現されても、2つ以上の「部」や装置の機能が1つの物理的手段や装置により実現されてもよい。
【発明の効果】
【0015】
本発明によれば、COBOLソースプログラムから変換されたJavaソースプログラムの性能の劣化を抑制しつつ、CALL呼び出しの呼び出し元プログラムの引数と呼び出し先プログラムの仮引数との間でデータ領域の共有を実現することが可能となる。
【図面の簡単な説明】
【0016】
図1】プログラム変換が行われるシステム全体の概略を示す図である。
図2】プログラム変換システム100が備える機能の一例を示すブロック図である。
図3】CALL呼び出しの呼び出し元プログラム及び呼び出し先プログラムの例を示す図である。
図4】変換プログラム実行システム120が備える機能の一例を示すブロック図である。
図5】プログラム変換システム100におけるデータ型の変換規則の一例を示す図である。
図6】COBOLのデータ定義の変換処理の一例を示すフローチャートである。
図7】変換処理において出力されるコードの一例を示す図である。
図8】COBOLソースプログラムからJavaソースプログラムへの変換の一例を示す図である。
図9】Javaで定義された変数のデータ領域の構造の一例を示す図である。
図10図8に示される集団項目が定義される呼び出し先プログラムのインスタンスが生成された場合の、当該集団項目のデータ領域の一例を示す図である。
図11図10に示される集団項目のデータ領域が、CALL呼び出しによって変更された一例を示す図である。
図12】従来技術の手法によって、図8に示される集団項目が定義される呼び出し先プログラムのインスタンスが生成された場合の、当該集団項目のデータ領域の一例を示す図である。
図13】従来技術の手法によって、図12に示される集団項目のデータ領域が、CALL呼び出しによって変更された一例を示す図である。
【発明を実施するための形態】
【0017】
(システム全体の構成)
以下、図面を参照して本発明の一実施形態について説明する。図1は、プログラム変換が行われるシステム全体の概略を示す図である。本システムでは、プログラム変換システム100により、ホストコンピュータ110で稼働するプログラムが、変換プログラム実行システム120で稼働するプログラムに変換される。具体的には、ホストコンピュータ110では、COBOLプログラム130が動作している。プログラム変換システム100は、COBOLプログラム130のソースコードであるCOBOLソースプログラム140をJavaソースプログラム150に変換する。Javaソースプログラム150は、コンパイルされてJavaバイトコード160となる。そして、Javaバイトコード160は、変換プログラム実行システム120で実行される。
【0018】
(プログラム変換システムの構成)
図2は、プログラム変換システム100が備える機能の一例を示すブロック図である。プログラム変換システム100は、変換規則記憶部200、プログラム変換部210、COBOLソースプログラム記憶部220、及びJavaソースプログラム記憶部230を備える。また、プログラム変換部210は、データ定義読み取り部211、集団項目定義コード出力部212、第1の基本項目定義コード出力部213、及び第2の基本項目定義コード出力部214を含む。プログラム変換システム100は、例えば、1台または複数台のコンピュータを用いて構成される。プログラム変換システム100を構成する各部は、例えば、メモリやハードディスク等の記憶領域を用いたり、記憶領域に格納されたプログラムをプロセッサが実行したりすることにより実現される。
【0019】
変換規則記憶部200は、COBOLソースプログラムをJavaソースプログラムに変換するための変換規則を記憶する。
【0020】
プログラム変換部210は、変換規則に基づいて、COBOLソースプログラムをJavaソースプログラムに変換する。
【0021】
データ定義読み取り部211は、COBOLソースプログラムのデータ部(DATA DIVISION)の変換のために、データ部におけるデータ定義を順次読み込む。
【0022】
集団項目定義コード出力部212は、COBOLソースプログラムにおけるデータ定義が集団項目の定義である場合、Javaソースプログラムにおいて当該集団項目を実現するためのクラス(第1のクラス)のインスタンス(第1のインスタンス)を生成するソースコードを出力する。
【0023】
第1の基本項目定義コード出力部213は、COBOLソースプログラムにおけるデータ定義が基本項目の定義であり、かつ、レベルが最上位(例えば「01」)である場合、Javaソースプログラムにおいて当該基本項目を実現するためのクラス(第2のクラス)のインスタンス(第2のインスタンス)を生成するソースコードを出力する。
【0024】
第2の基本項目定義コード出力部214は、COBOLソースプログラムにおけるデータ定義が基本項目の定義であり、かつ、レベルが最上位でない場合、当該基本項目を実現するためのクラス(第3のクラス)のインスタンス(第3のインスタンス)を、集団項目を実現するためのクラス(第1のクラス)のメンバ変数とするソースコードを出力する。
【0025】
データ定義読み取り部211、集団項目定義コード出力部212、第1の基本項目定義コード出力部213、及び第2の基本項目定義コード出力部214の詳細については、具体例を用いて後述する。
【0026】
COBOLソースプログラム記憶部220は、変換前のCOBOLソースプログラムを記憶する。図3には、変換前のCOBOLソースプログラム群のうち、CALL呼び出しの呼び出し元プログラム及び呼び出し先プログラムが示されている。呼び出し元プログラムは、呼び出し先プログラムを呼び出すCALL文を含む。そして、呼び出し元プログラムでは、引数に“BY REFERENCE”が暗黙的に指定されることで、呼び出し元プログラムの引数「BODY」と呼び出し先プログラムの仮引数「GRP1」との間でデータ領域の共有が行われることが示されている。
【0027】
Javaソースプログラム記憶部230は、変換後のJavaソースプログラムを記憶する。
【0028】
(変換プログラム実行システムの構成)
図4は、変換プログラム実行システム120が備える機能の一例を示すブロック図である。変換プログラム実行システム120は、JavaVM実行部300、Javaバイトコード記憶部310、及びプログラム実行部320を含む。また、プログラム実行部320は、プロキシインスタンス管理部321を含む。変換プログラム実行システム120は、例えば、1台または複数台のコンピュータを用いて構成される。変換プログラム実行システム120を構成する各部は、例えば、メモリやハードディスク等の記憶領域を用いたり、記憶領域に格納されたプログラムをプロセッサが実行したりすることにより実現される。
【0029】
JavaVM実行部300は、Javaバイトコードを実行するためのプラットフォームであるJavaVMを実行する。
【0030】
Javaバイトコード記憶部310は、変換されたJavaソースプログラムをコンパイルしたJavaバイトコードを記憶する。
【0031】
プログラム実行部320は、Javaバイトコードを実行する。プログラム実行部320は、Javaバイトコードを実行するための各種ライブラリ(クラスライブラリ等)を含む。
【0032】
プロキシインスタンス管理部321は、変換されたJavaソースプログラムで定義される最上位のデータ項目毎にProxyクラス(第4のクラス)のインスタンス(第4のインスタンス、第6のインスタンス)を生成する。Proxyクラスは、(1)任意のデータ領域への参照、及び(2)シフト値をメンバ変数として保持している。生成直後のプロキシインスタンスの「データ領域」及び「シフト値」は、当該最上位のデータ項目に割り当てられるデータ領域、及び0で初期化される。
【0033】
また、プロキシインスタンス管理部321は、呼び出し先プログラムを呼び出すCALL文から変換された命令が実行されると、仮引数であるデータ項目に応じたプロキシインスタンスの各メンバ変数を、引数に指定されたデータ項目に基づいて変更する。具体的には、プロキシインスタンス管理部321は、CALL呼び出し時に、仮引数であるデータ項目に応じたプロキシインスタンスの「データ領域」を引数に指定されたデータ項目が参照するプロキシインスタンスの「データ領域」に、そして、仮引数であるデータ項目に応じたプロキシインスタンスの「シフト値」を、引数に指定されたデータ項目の「オフセット値」に、当該仮引数であるデータ項目が参照するプロキシインスタンスの「シフト値」を加えた値に変更する。オフセット値については後述する。
【0034】
(プログラム変換システムでの変換処理)
図5は、プログラム変換システム100におけるデータ型の変換規則の一例を示す図である。図5において、左側の欄には、COBOLのデータ型が示されており、右側の欄には、COBOLのデータ型と同等の機能を実現するためのJavaのラッパークラスが示されている。例えば、1〜9桁の符号無し整数(9(1)〜PIC 9(9))は、CIntというラッパークラスに変換される。
【0035】
また、COBOLの集団項目は、CGrpクラスを継承したJavaクラスに変換される。さらに、COBOLの配列型データは、対応するJavaのラッパークラスを型とするオブジェクトの配列として変換される。ここで、COBOLにおける配列の添え字は1から開始し、一方でJavaにおける配列の添え字は0から開始する。そのため、本実施形態では、Java変換後に、変換前のCOBOLと同様の添え字を用いて配列のオブジェクトにアクセスすることができるように、Java変換時に確保する配列の要素数をプラス1するものとする。
【0036】
COBOLのデータ項目に応じたJavaのラッパークラス及びCGrpクラスを継承したJavaクラスは、自身のデータ領域を特定するために、(1)Proxy、(2)オフセット値、及び(3)自身のデータ長を示すバイト数をメンバ変数として保持している。
【0037】
ここで、Proxyには、自身のデータ領域への参照を持つプロキシインスタンスへの参照がセットされ、データ項目が最上位の集団項目に属する場合、自身が属する最上位の集団項目に対して生成されたプロキシインスタンスへの参照がセットされる。また、オフセット値には、データ項目が最上位の場合、0がセットされ、データ項目が最上位でない場合、自身が属する最上位の集団項目における先頭のデータ項目の開始位置を0とした場合の、自身のデータ領域の開始位置がセットされる。
【0038】
図6は、COBOLのデータ定義の変換処理の一例を示すフローチャートである。図7は、変換処理において出力されるコードの一例を示す図である。図8は、COBOLソースプログラムからJavaソースプログラムへの変換の一例を示す図である。なお、図8に示されるCOBOLソースプログラムは、図3に示される呼び出し先プログラムである。図9は、Javaで定義された変数のデータ領域の構造の一例を示す図である。図7図9を参照しつつ、図6の処理について説明する。
【0039】
まず、データ定義読み取り部211は、COBOLソースプログラムのデータ部におけるデータ定義を1行読み込む(S601)。データ定義が終了であれば(S602:Y)、処理は終了する。
【0040】
データ定義が終了でない場合(S602:N)、集団項目定義コード出力部212は、データ定義が集団項目の定義であるかどうか確認する(S603)。集団項目の定義である場合(S603:Y)、集団項目定義コード出力部212は、集団項目用のラッパークラスCGrpを継承したクラスとして、当該集団項目を定義するソースコードを出力する(S604)。例えば、図7(a)には、集団項目GRP1を定義するソースコードの一例が示されている。具体的には、クラスCGrpを継承したクラスとしてCGRP1が定義され、当該CGRP1のオブジェクトとして、GRP1が定義されている。
【0041】
集団項目の定義ではない(即ち、基本項目である)場合(S603:N)、第1の基本項目定義コード出力部213は、データ定義が最上位であるかどうか確認する(S605)。最上位である場合(S605:Y)、基本項目用のラッパークラスのオブジェクトとして当該基本項目を定義するソースコードを出力する(S606)。例えば、図7(b)には、基本項目IDX1を定義するソースコードの一例が示されている。具体的には、クラスCIntのオブジェクトとして、IDX1が定義されている。
【0042】
基本項目であり(S603:N)、かつ、最上位でない場合(S605:N)、第2の基本項目定義コード出力部214は、当該基本項目を実現するためのクラスのオブジェクトを、当該基本項目が属する集団項目のクラスのメンバ変数として定義するソースコードを出力する(S607)。例えば、図7(c)には、集団項目GRP1に属する基本項目GRP1_IDX1を定義するソースコードの一例が示されている。ここで、図7(c)に示すソースコードは、図7(a)に示すソースコードに、クラスCGRP1のメンバ変数として追加される。
【0043】
図8には、図6に示される処理による変換の一例が示されている。集団項目GRP1は、変換後のJavaクラスにおいて、クラスCGrpを継承したクラスCGRP1のオブジェクトとして定義されている。そして、集団項目GRP1に属する基本項目NUMは、変換後のJavaクラスにおいて、クラスCGRP1のメンバ変数として定義されている。また、集団項目GRP1に属する配列型データARRAYは、変換後のJavaクラスにおいて、クラスCGrpを継承したクラスCARRAYを型とするオブジェクトの配列として定義されている。前述したように、本実施形態では、Java変換後に、変換前のCOBOLと同様の添え字を用いて配列のオブジェクトにアクセスすることができるように、変換後のJavaクラスにおいて、ARRAYの要素数はプラス1されている。なお、配列型データARRAYの各要素である基本項目X,Yは、変換後のJavaクラスにおいて、クラスCARRAYのメンバ変数として定義されている。
【0044】
図9には、集団項目GRP1のデータ領域の構造の一例が示されている。図9に示されるように、集団項目GRP1用にデータ領域が確保され、当該データ領域内に、集団項目GPR1の各基本項目のデータ領域が連続して確保される。具体的には、NUM,ARRAY(1).X,ARRAY(1).Y,ARRAY(2).X,ARRAY(2).Y,…,ARRAY(999).X,ARRAY(999).Y用のデータ領域として、順に、4バイト、6バイト、6バイト、…、6バイト、6バイトが確保される。
【0045】
(変換プログラム実行システム120でのデータ領域共有処理)
次に、図10及び11を参照して、変換プログラム実行システム120において、CALL呼び出しの呼び出し元プログラムの引数と呼び出し先プログラムの仮引数との間でデータ領域の共有を実現する手法について説明する。
【0046】
図10は、図8に示される呼び出し先プログラムのインスタンスが生成された場合の、当該呼び出し先プログラムに定義された集団項目のデータ領域の一例を示す図である。プロキシインスタンス管理部321によって、最上位のデータ項目GRP1に対してProxyクラスのインスタンスGRP1.proxyが生成されている。プロキシインスタンスGRP1.proxyの「データ領域」及び「シフト値」は、GRP1に割り当てられるデータ領域GRP1.data、及び0で初期化されている。
【0047】
また、前述したように、各基本項目のデータ領域は、集団項目のデータ領域内に連続して設けられている。そして、各基本項目のインスタンスは、自身のデータ領域を特定するために、(1)Proxy、(2)オフセット値、及び(3)自身のデータ長を示すバイト数をメンバ変数として保持している。
【0048】
前述したように、データ項目が最上位の集団項目に属する場合、Proxyには、自身が属する最上位の集団項目に対して生成されたプロキシインスタンスへの参照がセットされるので、集団項目GRP1に属する各データ項目のProxyには、いずれも共通してGRP1.proxyがセットされている。また、データ項目が最上位でない場合、オフセット値には、自身が属する最上位の集団項目における先頭のデータ項目の開始位置を0とした場合の、自身のデータ領域の開始位置がセットされるので、集団項目GRP1の先頭のデータ項目であるGRP1.NUMのオフセット値には0が、続くデータ項目であるGRP1.ARRAY(1).Xのオフセット値には、先行するデータ項目GRP1.NUMのバイト数分ずれた4が、さらに続くデータ項目であるGRP1.ARRAY(1).Yのオフセット値には、先行するデータ項目GRP1.ARRAY(1).Xのバイト数分さらにずれた10がセットされ、以下、GRP1.ARRAY(999)まで同様にセットされている。
【0049】
ここで、データ項目へのアクセスは、まず、自身の「Proxy」にセットされたプロキシインスタンスの「データ領域」により、参照すべきデータ領域を特定し、さらに、自身の「オフセット値」に、自身の「Proxy」にセットされたプロキシインスタンスの「シフト値」を加えることで自身のデータ領域の開始位置を特定する。例えば、GRP1.ARRAY(1).Xへのアクセスは、プロキシインスタンスGRP1.proxyの「データ領域」により、参照すべきデータ領域GRP1.dataを特定し、さらに、自身の「オフセット値(4)」に、プロキシインスタンスGRP1.proxyの「シフト値(0)」を加えることで、自身のデータ領域の開始位置(4)を特定する。
【0050】
続いて、図11を参照して、CALL呼び出し時におけるデータ共有処理について説明する。図11は、図10に示される集団項目のデータ領域が、CALL呼び出しによって変更された一例を示す図である。
【0051】
前述したように、プロキシインスタンス管理部321は、呼び出し先プログラムを呼び出すCALL文から変換された命令が実行されると、仮引数であるデータ項目に応じたプロキシインスタンスの各メンバ変数を、引数に指定されたデータ項目に基づいて変更する。具体的には、プロキシインスタンス管理部321は、CALL呼び出し時に、仮引数であるデータ項目GRP1に応じたプロキシインスタンスGRP1.proxyの「データ領域」を引数に指定されたデータ項目BODYが参照するプロキシインスタンスの「データ領域(TBL.data)」に、そして、仮引数であるデータ項目に応じたプロキシインスタンスの「シフト値」を、引数に指定されたデータ項目の「オフセット値(9=D)」に、当該引数に指定されたデータ項目が参照するプロキシインスタンスの「シフト値(0)」を加えた値(D)に変更する。
【0052】
CALL呼び出し後の仮引数のデータ項目へのアクセスも、CALL呼び出し前と同様に、まず、自身の「Proxy」にセットされたプロキシインスタンスの「データ領域」により、参照すべきデータ領域を特定し、さらに、自身の「オフセット値」に、自身の「Proxy」にセットされたプロキシインスタンスの「シフト値」を加えることで自身のデータ領域の開始位置を特定する。例えば、GRP1.ARRAY(1).Xへのアクセスは、プロキシインスタンスGRP1.proxyの「データ領域」により、参照すべきデータ領域TBL.dataを特定し、さらに、自身の「オフセット値(4)」に、プロキシインスタンスGRP1.proxyの「シフト値(D)」を加えることで、自身のデータ領域の開始位置(4+D)を特定する。
【0053】
(従来技術でのデータ領域共有処理)
本実施形態の特徴の理解を深めるために、図12及び13を参照して、従来技術の手法によってCALL呼び出し時のデータ共有処理を実施した場合について説明する。
【0054】
図12は、従来技術の手法によって、図8に示される呼び出し先プログラムのインスタンスが生成された場合の、当該呼び出し先プログラムに定義された集団項目のデータ領域の一例を示す図である。従来技術の手法では、各データ項目のインスタンスは、自身のデータ領域を特定するために、(1)最上位のデータ項目に割り当てられるデータ領域、(2)最上位のデータ項目に割り当てられるデータ領域における、自身のデータ領域の開始位置、及び(3)自身のデータ長を示すバイト数をメンバ変数として保持している。
【0055】
図10に示される本実施形態の一例と比較すると、従来技術の手法ではプロキシインスタンスを用いないので、各データ項目のインスタンスが、プロキシインスタンスの「データ領域」の情報を保持している。また、本実施形態に係る各データ項目インスタンスの「オフセット値」に代えて、従来技術の手法では、各データ項目のインスタンスが、最上位のデータ項目に割り当てられるデータ領域における、自身のデータ領域の開始位置を保持している。
【0056】
具体的には、呼び出し先プログラムのインスタンスが生成された時点では、集団項目GRP1に属する各データ項目のインスタンスのデータ領域には、いずれも共通して仮引数GRP1のデータ領域「GRP1.data」がセットされている。また、最上位のデータ項目GRP1に属する先頭のデータ項目がGRP1.NUMであるため、当該GRP1.NUMの開始位置には0が、続くデータ項目であるGRP1.ARRAY(1).Xの開始位置には、先行するデータ項目GRP1.NUMのバイト数分ずれた4が、さらに続くデータ項目であるGRP1.ARRAY(1).Yの開始位置には、先行するデータ項目GRP1.ARRAY(1).Xのバイト数分さらにずれた10がセットされ、以下、GRP1.ARRAY(999)まで同様にセットされている。
【0057】
続いて、図13を参照して、従来技術の手法による、CALL呼び出し時におけるデータ共有処理について説明する。図13は、図12に示される集団項目のデータ領域が、CALL呼び出しによって変更された一例を示す図である。
【0058】
呼び出し先プログラムを呼び出すCALL文から変換された命令が実行されると、仮引数であるデータ項目に属するすべてのデータ項目のメンバ変数が、引数に指定されたデータ項目に基づいて変更される。具体的には、CALL呼び出し時に、仮引数であるデータ項目GRP1に属するすべてのデータ項目のインスタンスの「データ領域」が、引数に指定されたデータ項目BODYの「データ領域(TBL.data)」に変更される。そして、仮引数であるデータ項目GRP1に属するすべてのデータ項目のインスタンスの「開始位置」が、引数に指定されたデータ項目BODYに属する、対応するデータ項目のインスタンスの「開始位置」に、自身の「データ領域(TBL.data)」における、データ項目BODYのデータ領域の開始位置(D=9)を加えた値に変更される。
【0059】
CALL呼び出し時の引数と仮引数間のデータ領域共有処理にかかる処理コストについて検討すると、従来技術の手法では、図13の太枠で示されるようにデータ項目の数に応じた処理コストが発生し、一方、本実施形態では、データ項目の数に関わらず、図11の太枠で示されるようにプロキシインスタンスに対する処理コストのみが発生する。すなわち仮引数として定義される集団項目に属するデータ項目の数が多いほど、本実施形態は従来手法より有利である。次に、呼び出し先プログラムにおける仮引数に属するデータ項目へのアクセス時の処理コストについて検討すると、従来技術の手法では、各データ項目が保持する「データ領域」及び「開始位置」を用いてそのままアクセスを行うことができるが、一方、本実施形態では、データ項目が保持するプロキシインスタンス経由で「データ領域」を特定し、データ項目が保持する「オフセット値」とプロキシインスタンスの「シフト値」とを用いて「開始位置」を計算してアクセスを行うことになる。すなわち実際にアクセスするデータ項目の数が多いほど、本実施形態は従来手法より処理コストがかかる。
【0060】
COBOLでは、集団項目に属する要素として配列型データを定義することも可能であるので、仮引数である集団項目に属するデータ項目の数が膨大になる場合もある。その中で、仮引数として膨大な数のデータ項目が属する集団項目が定義されているにも関わらず、呼び出し先プログラムにおいて、当該集団項目に属するデータ項目のごく一部のみ使用するケースも少なくなく、基幹システムで実際に稼働中のCOBOLプログラムでは多数見られる。このように、呼び出し先プログラムで使用されるデータ項目の数が集団項目に属するすべてのデータ項目の数に比べて少ない場合に特に、本実施形態は、CALL呼び出しから呼び出し先プログラムが実行され復帰するまでのトータルの処理コストを従来技術の手法に比べて少なくすることができる。
【0061】
以上、本発明の一実施形態であるプログラム変換システム100及び変換プログラム実行システム120について説明した。プログラム変換システム100では、COBOLソースプログラムのデータ定義において、集団項目に属する基本項目については、当該集団項目を実現するクラスのメンバ変数として定義される。これにより、集団項目に属する各基本項目のデータ領域は、集団項目のデータ領域内に確保される。変換プログラム実行システム120では、集団項目のデータ領域内に当該集団項目に属する各基本項目のデータ領域が確保される構成を利用して、CALL呼び出し時の各基本項目への変更を吸収するプロキシインスタンスを用いて、CALL呼び出しの呼び出し元プログラムの引数と呼び出し先プログラムの仮引数との間でデータ領域の共有を実現する。これにより、CALL呼び出し時の処理コストはデータ項目の数に関わらず、プロキシインスタンスに対する処理コストのみとなり、Javaの参照渡しと同等の性能を見込むことができる。
【0062】
なお、本実施形態は、本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更/改良され得るととともに、本発明にはその等価物も含まれる。
【符号の説明】
【0063】
100…プログラム変換システム、110…ホストコンピュータ、120…変換プログラム実行システム、130…COBOLプログラム、140…COBOLソースプログラム、150…Javaソースプログラム、160…Javaバイトコード、200…変換規則記憶部、210…プログラム変換部、211…データ定義読み取り部、212…集団項目定義コード出力部、213…第1の基本項目定義コード出力部、214…第2の基本項目定義コード出力部、220…COBOLソースプログラム記憶部、230…Javaソースプログラム記憶部、300…JavaVM実行部、310…Javaバイトコード記憶部、320…プログラム実行部、321…プロキシインスタンス管理部
【要約】
【課題】CALL呼び出しの引数と仮引数との間でデータ領域の共有を実現する。
【解決手段】プログラム変換システムは、集団項目を実現するための第1のクラスの第1のインスタンスを生成する第1のソースコードを出力する出力部と、レベルが最上位である基本項目の定義について、当該基本項目を実現するための第2のクラスの第2のインスタンスを生成する第2のソースコードを出力する出力部と、レベルが最上位でない基本項目の定義について、当該基本項目を実現するための第3のクラスの第3のインスタンスを第1のクラスのメンバ変数とする第3のソースコードを出力する出力部であって、第1のクラス及び第3のクラスは、対応するデータ項目のデータ領域への参照を持つ第4のインスタンスへの参照をメンバ変数として保持する、出力部と、を備え、第1のインスタンスの生成時に第4のインスタンスが生成される。
【選択図】図11
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13