(57)【要約】      （修正有）【課題】ＣＯＢＯＬソースプログラムから変換されたＪａｖａ（登録商標）ソースプログラムの性能の劣化を抑制する。【解決手段】変換システム１００は、第１ＣＯＢＯＬソースプログラムにおいて、第１引数が、第１ＣＯＰＹ句により定義される場合に、第１ＣＯＰＹ句において最上位のレベル番号を有する最上位データ項目と、第１ＣＯＢＯＬソースプログラムとの対応関係を示す引数構造情報を記憶させる記憶部２０１と、第２ＣＯＢＯＬソースプログラムにおいて、第１ＣＯＢＯＬソースプログラムを呼び出す際に指定される引数の第２引数の最下位のデータ項目が、引数構造情報において第１ＣＯＢＯＬソースプログラムと対応関係を有する最上位データ項目と一致しない場合に、第２ＣＯＢＯＬソースプログラムにおいて第２引数を定義する第１ＣＯＰＹ句における最上位データ項目を第１ＣＯＢＯＬソースプログラムに渡す様に第２引数を調整する調整部２１３を備える。【選択図】図２
2018055448.tif 000002
【特許請求の範囲】
【請求項１】
第１ＣＯＢＯＬソースプログラムにおいて、前記第１ＣＯＢＯＬソースプログラムを呼び出す際に用いられる引数である第１引数が、第１ＣＯＰＹ句によって定義されている場合に、前記第１ＣＯＰＹ句において最上位のレベル番号を有する最上位データ項目と、前記第１ＣＯＢＯＬソースプログラムとの対応関係を示す引数構造情報を引数構造情報記憶部に記憶させる引数分析部と、
前記第１ＣＯＢＯＬソースプログラムを呼び出す第２ＣＯＢＯＬソースプログラムにおいて、前記第１ＣＯＢＯＬソースプログラムを呼び出す際に指定される引数である第２引数の最下位のデータ項目が、前記引数構造情報において前記第１ＣＯＢＯＬソースプログラムと対応関係を有する前記最上位データ項目と一致しない場合には、前記第２ＣＯＢＯＬソースプログラムにおいて前記第２引数を定義する前記第１ＣＯＰＹ句における最上位データ項目を前記第１ＣＯＢＯＬソースプログラムに渡すように前記第２引数を調整する調整部と、
前記第１ＣＯＢＯＬソースプログラム及び前記第２引数が調整された前記第２ＣＯＢＯＬソースプログラムを所定の変換規則に基づいてＪａｖａソースプログラムに変換する変換部と、
を備えるプログラム変換システム。
【請求項２】
前記調整部は、
前記第２引数が前記第２ＣＯＢＯＬソースプログラムにおいて前記第１ＣＯＰＹ句によって定義されていない場合には、ワーニングを出力する、
請求項１に記載のプログラム変換システム。
【請求項３】
コンピュータが、
第１ＣＯＢＯＬソースプログラムにおいて、前記第１ＣＯＢＯＬソースプログラムを呼び出す際に用いられる引数である第１引数が、第１ＣＯＰＹ句によって定義されている場合に、前記第１ＣＯＰＹ句において最上位のレベル番号を有する最上位データ項目と、前記第１ＣＯＢＯＬソースプログラムとの対応関係を示す引数構造情報を引数構造情報記憶部に記憶させる手段と、
前記第１ＣＯＢＯＬソースプログラムを呼び出す第２ＣＯＢＯＬソースプログラムにおいて、前記第１ＣＯＢＯＬソースプログラムを呼び出す際に指定される引数である第２引数の最下位のデータ項目が、前記引数構造情報において前記第１ＣＯＢＯＬソースプログラムと対応関係を有する前記最上位データ項目と一致しない場合には、前記第２ＣＯＢＯＬソースプログラムにおいて前記第２引数を定義する前記第１ＣＯＰＹ句における最上位データ項目を前記第１ＣＯＢＯＬソースプログラムに渡すように前記第２引数を調整する手段と、
前記第１ＣＯＢＯＬソースプログラム及び前記第２引数が調整された前記第２ＣＯＢＯＬソースプログラムを所定の変換規則に基づいてＪａｖａソースプログラムに変換する手段と、
を実行するプログラム変換方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム変換システム、及びプログラム変換方法に関する。
【背景技術】
【０００２】
基幹システムのオープン化に伴い、ＣＯＢＯＬソースプログラムのＪａｖａ（登録商標）ソースプログラムへの変換が注目されている（例えば、特許文献１）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−８６２１８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ＣＯＢＯＬでは、あるソースプログラムから、別のソースプログラムを呼び出す場合に、引数情報を定義したＣＯＰＹ句を用いることが多い。呼び出す側のプログラムと呼び出される側のプログラムとの双方でＣＯＰＹ句を使用することで、メンテナンス性を向上させることができる。
【０００５】
ＣＯＰＹ句を用いる場合、当該ＣＯＰＹ句について、呼び出す側のプログラムでの定義名と、呼び出される側のプログラムでの定義名とが異なる場合がある。ＣＯＢＯＬでは、引数の渡し方は、アドレス渡しであるため、呼び出す側と呼び出される側との間で定義名が異なっていても問題は生じない。他方で、Ｊａｖａではアドレス渡しができないため、ＣＯＰＹ句を用いるＣＯＢＯＬソースプログラムをＪａｖａソースプログラムに変換する際、呼び出す側と呼び出される側とでＣＯＰＹ句の定義名が異なる場合には、プログラム間における引数の渡し方を調整する必要がある。
【０００６】
Ｊａｖａにおいては引数をクラスの参照渡しとすることで呼び出し性能が向上する。従って、上述の引数の渡し方の調整が行われなかった場合、変換後のＪａｖａソースプログラムがクラスの参照渡しによる呼び出しができなくなり、変換したＪａｖａソースプログラムの性能が劣化してしまう。
【０００７】
本発明はこのような事情を鑑みてなされたものであり、ＣＯＢＯＬソースプログラムから変換されたＪａｖａソースプログラムの性能の劣化を抑制することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一側面に係るプログラム変換システムは、第１ＣＯＢＯＬソースプログラムにおいて、第１ＣＯＢＯＬソースプログラムを呼び出す際に用いられる引数である第１引数が、第１ＣＯＰＹ句によって定義されている場合に、第１ＣＯＰＹ句において最上位のレベル番号を有する最上位データ項目と、第１ＣＯＢＯＬソースプログラムとの対応関係を示す引数構造情報を引数構造情報記憶部に記憶させる引数分析部と、第１ＣＯＢＯＬソースプログラムを呼び出す第２ＣＯＢＯＬソースプログラムにおいて、第１ＣＯＢＯＬソースプログラムを呼び出す際に指定される引数である第２引数の最下位のデータ項目が、引数構造情報において第１ＣＯＢＯＬソースプログラムと対応関係を有する最上位データ項目と一致しない場合には、第２ＣＯＢＯＬソースプログラムにおいて第２引数を定義する第１ＣＯＰＹ句における最上位データ項目を第１ＣＯＢＯＬソースプログラムに渡すように第２引数を調整する調整部と、第１ＣＯＢＯＬソースプログラム及び第２引数が調整された第２ＣＯＢＯＬソースプログラムを所定の変換規則に基づいてＪａｖａソースプログラムに変換する変換部と、を備える。
【０００９】
なお、本発明において、「部」とは、単に物理的手段を意味するものではなく、その「部」が有する機能をソフトウェアによって実現する場合も含む。また、１つの「部」や装置が有する機能が２つ以上の物理的手段や装置により実現されても、２つ以上の「部」や装置の機能が１つの物理的手段や装置により実現されてもよい。
【発明の効果】
【００１０】
本発明によれば、ＣＯＢＯＬソースプログラムから変換されたＪａｖａソースプログラムの性能の劣化を抑制することが可能となる。
【図面の簡単な説明】
【００１１】
【図１】プログラム変換が行われるシステム全体の概略を示す図である。
【図２】プログラム変換システム１００が備える機能の一例を示すブロック図である。
【図３Ａ】引数構造情報の一例を示す図である。
【図３Ｂ】引数構造情報の一例を示す図である。
【図４】プログラム変換システム１００におけるプログラム変換処理の流れを示す図である。
【図５Ａ】呼び出し元のＣＯＢＯＬソースの一部を例示する図である。
【図５Ｂ】呼び出し先のＣＯＢＯＬソースの一部を例示する図である。
【図５Ｃ】ＣＯＰＹ句を例示する図である。
【図５Ｄ】呼び出し元のＣＯＢＯＬソースの一部を例示する図である。
【図５Ｅ】呼び出し元のＣＯＢＯＬソースの一部を例示する図である。
【図５Ｆ】図５Ｄに示す呼び出し元ＣＯＢＯＬソースを変換したＪａｖａソースの例を示す図である。
【図５Ｇ】図５Ｅに示す呼び出し元ＣＯＢＯＬソースを変換したＪａｖａソースの例を示す図である。
【図６】プログラム変換システム１００における引数分析処理の一例を示すフローチャートである。
【図７】プログラム変換システム１００における調整処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、図面を参照して本発明の一実施形態について説明する。図１は、プログラム変換が行われるシステム全体の概略を示す図である。本システムでは、プログラム変換システム１００により、ホストコンピュータ１１０で稼働するプログラムが、変換プログラム実行システム１２０で稼働するプログラムに変換される。具体的には、ホストコンピュータ１１０では、ＣＯＢＯＬプログラム１３０が動作している。プログラム変換システム１００は、ＣＯＢＯＬプログラム１３０のソースコードであるＣＯＢＯＬソースプログラム１４０をＪａｖａソースプログラム１５０に変換する。Ｊａｖａソースプログラム１５０は、コンパイルされてＪａｖａバイトコード１６０となる。そして、Ｊａｖａバイトコード１６０は、変換プログラム実行システム１２０で実行される。
【００１３】
図２は、プログラム変換システム１００が備える機能の一例を示すブロック図である。プログラム変換システム１００は、変換規則記憶部２００、引数構造情報記憶部２０１、プログラム変換部２１０、ＣＯＢＯＬソースプログラム記憶部２２０、及びＪａｖａソースプログラム記憶部２３０を備える。また、プログラム変換部２１０は、変換部２１１、引数分析部２１２、調整部２１３を含む。プログラム変換システム１００は、例えば、１台または複数台のコンピュータを用いて構成される。プログラム変換システム１００を構成する各部は、例えば、メモリやハードディスク等の記憶領域を用いたり、記憶領域に格納されたプログラムをプロセッサが実行したりすることにより実現される。
【００１４】
変換規則記憶部２００は、ＣＯＢＯＬソースプログラムをＪａｖａソースプログラムに変換するための変換規則を記憶する。
【００１５】
引数構造情報記憶部２０１は、引数構造情報を記憶する。引数構造情報は、ＣＯＢＯＬソースプログラムのうち、Ｊａｖａソースプログラムに変換した場合にクラスの参照渡しによる呼び出しが可能なプログラムに関する情報である。具体的には、引数構造情報は、クラスの参照渡しによる呼び出しが可能なプログラムと、当該プログラムの引数を定義するＣＯＰＹ句と、当該ＣＯＰＹ句においてレベル番号が最上位の集団項目との対応関係を示す情報である。
【００１６】
図３Ａは引数構造情報のフォーマットを示す図である。図３Ａに示すように、引数構造情報は、プログラム名、対応するプログラムにおいて引数として指定されるＣＯＰＹ句名、当該ＣＯＰＹ句におけるレベル番号が最上位の集団項目名から構成される。引数が複数存在する場合、引数構造情報には、ＣＯＰＹ句名と集団項目名の組が複数含まれる。
【００１７】
図３Ｂは引数構造情報のサンプルを示す図である。図３Ｂの例では、３つの対象プログラムＳＵＢ０００１，ＳＵＢ００１０，ＳＵＢ００１５の引数構造情報が示されている。この例では対象プログラムＳＵＢ０００１の引数情報は、データ項目「日付ＤＡＴＡ」を最上位の集団項目とするＣＯＰＹ句ＳＰＡ０００１で定義されている。また、対象プログラムＳＵＢ００１０の引数情報は、集団項目「時刻ＤＡＴＡ」を最上位の集団項目とするＣＯＰＹ句ＳＰＡ００１０で定義されている。さらに、対象プログラムＳＵＢ００１５は２つの引数を有しており、これら２つの引数情報は、ＣＯＰＹ句ＳＰＡ０００１、ＳＰＡ００１０で定義される。
【００１８】
図２に戻りプログラム変換システム１００の構成の続きを説明する。
プログラム変換部２１０は、変換規則に基づいて、ＣＯＢＯＬソースプログラムをＪａｖａソースプログラムに変換する。
【００１９】
ＣＯＢＯＬソースプログラム記憶部２２０は、変換前のＣＯＢＯＬソースプログラムを記憶する。
【００２０】
Ｊａｖａソースプログラム記憶部２３０は、変換後のＪａｖａソースプログラムを記憶する。
【００２１】
図４は、プログラム変換システム１００におけるプログラム変換処理の流れを示す図である。図５Ａ〜図５Ｇは、プログラム変換の一例を示す図である。図４、図５Ａ〜図５Ｇを参照して、変換部２１１、引数分析部２１２、及び調整部２１３について説明する。
【００２２】
図４には、変換元のＣＯＢＯＬソースプログラムがＪａｖａソースプログラムに変換される流れとして、呼び出し元ＣＯＢＯＬソースプログラム（他のＣＯＢＯＬソースプログラムを呼び出すソースプログラムであり、第２ＣＯＢＯＬソースプログラムの一例である。以下、「プログラムＡ」と呼ぶ。）及び呼び出し先ＣＯＢＯＬソースプログラム（プログラムＡからＣＡＬＬ命令によって呼び出されるソースプログラムであり、第１ＣＯＢＯＬソースプログラムの一例である。以下、「プログラムＢ」と呼ぶ。）が示されている。各プログラムは、引数分析が行われ、調整処理が実行された後、変換部２１１によってＪａｖａソースに変換される。
【００２３】
図５Ａ〜図５Ｃには、一部を抜粋したＣＯＢＯＬソースプログラム（それぞれ、プログラムＡ、プログラムＢ、ＣＯＰＹ句ＴＩＭＥＣＰＹ）の例が示されている。以下の例では、プログラムＡ及びプログラムＢのいずれも引数情報の定義に図５ＣのＣＯＰＹ句を用いているものとして説明する。
【００２４】
引数分析部２１２は、変換対象となるＣＯＢＯＬソースプログラムについてＪａｖａプログラムに変換した場合にクラスの参照渡しによる呼び出しが可能なプログラムであるか否かの検証をする引数分析処理を行う。引数分析部２１２は、変換対象となるＣＯＢＯＬソースプログラムにおいて、ＰＲＯＣＥＤＵＲＥ  ＤＩＶＩＳＩＯＮにおけるＵＳＩＮＧ句で指定される引数（第１引数の一例である。以下、「引数Ｐ」と呼ぶ。）が、ＬＩＮＫＡＧＥ  ＳＥＣＴＩＯＮにおいてＣＯＰＹ句（第１ＣＯＰＹ句の一例である。以下、「ＣＯＰＹ句Ｃ」と呼ぶ。）によって定義されているか否かを判定する。
【００２５】
具体的には、引数分析部２１２は、変換対象となるＣＯＢＯＬソースプログラムのＬＩＮＫＡＧＥ  ＳＥＣＴＩＯＮが以下の２条件を満たすかを判定する。
・ＬＩＮＫＡＧＥ  ＳＥＣＴＩＯＮにおいて、引数Ｐがレベル０１のレベル番号で定義された行１が存在する
・行１が存在する場合に、行１の直後にＣＯＰＹ句Ｃを呼び出す行２が存在する
【００２６】
引数分析部２１２は、変換対象となるＣＯＢＯＬソースプログラムのＬＩＮＫＡＧＥ  ＳＥＣＴＩＯＮが上記の２条件を満たしていると判定した場合には、さらに、行２以降に、「Ｘ  ＲＥＤＥＦＩＮＥＳ  Ｐ」として定義された項目Ｘが存在しないこと、及びＣＯＰＹ句Ｃの最上位の集団項目にＯＣＣＵＲＳ句がないことを確認する。
【００２７】
これらの条件を全て満たした場合には、引数分析部２１２は、変換対象となるＣＯＢＯＬソースプログラムの引数構造情報を引数構造情報記憶部２０１に登録する。即ち、変換対象となるＣＯＢＯＬソースプログラム名に、ＣＯＰＹ句Ｃの名称、及びＣＯＰＹ句Ｃの最上位の集団項目名を対応付けて記憶させる。
【００２８】
例えば、引数分析部２１２がプログラムＢに対して引数分析処理を行う場合について説明すると、図５Ｂに示すように、プログラムＢのＵＳＩＮＧ句にはプログラムＢの引数として、データ項目「検証時刻」が指定されている。また、ＬＩＮＫＡＧＥ  ＳＥＣＴＩＯＮにおいて、レベル０１としてデータ項目「検証時刻」が定義され、その直後にＣＯＰＹ句ＴＩＭＥＣＰＹを呼び出す行が存在している。
【００２９】
従って、この場合には、引数分析部２１２は、プログラムＢに、ＣＯＰＹ句の名称「ＴＩＭＥＣＰＹ」と、当該ＣＯＰＹ句ＴＩＭＥＣＰＹにおける最上位の集団項目名である「時刻」とを対応付けて、引数構造情報として引数構造情報記憶部２０１に登録する。
【００３０】
引数分析部２１２は上述の処理を、Ｊａｖａソースへの変換対象となるすべてのＣＯＢＯＬソースについて実行する。
【００３１】
調整部２１３は、ＣＡＬＬ命令を用いてプログラムを呼び出す際に、引数の型を調整する調整処理を行う。調整処理では、プログラム呼出し命令（ＣＡＬＬ命令）において引数（第２引数の一例である。）として指定されるデータ項目を、引数構造情報記憶部２０１に登録された引数構造情報と突合させ、呼び出し元と呼び出し先とで引数の型が異なる場合には、呼出し時のデータ項目の指定を調整する。
【００３２】
調整部２１３がプログラムＡに対して調整処理を実行する場合を例に説明する。図５Ｄ、５ＥはＣＡＬＬ命令を用いてプログラムＡからプログラムＢを呼び出す場合の記述の例を示している。また、図５Ｆ、５Ｇは図５Ｄ、５Ｅに示したＣＡＬＬ命令を、調整処理を行わずにそれぞれＪａｖａソースプログラムに変換した場合の例を示している。
【００３３】
図５ＧのＪａｖａソースプログラムの例では、プログラムＢの呼出し時に引数として「到着時刻」の「時刻」を渡しているため、プログラムＢでは渡された変数の値を「検証時刻．時刻」に代入することができる。従って、この場合、プログラムＡはプログラムＢをクラスの参照渡しによって呼び出すことができるため、呼出しコストを最小化することができる。他方で、図５ＦのＪａｖａソースプログラムの例では、プログラムＢの呼出し時に引数として「到着時刻」を渡しているため、キャストエラー（型違いエラー）が発生してしまう。従って、ＣＡＬＬ命令が図５Ｄに示すような記述で用いられている場合には、調整処理によって型の調整を行う必要がある。
【００３４】
調整部２１３の調整処理について具体的に説明する。まず、調整部２１３は、ＣＡＬＬ命令において引数として渡されるデータ項目ａのリストＡを作成する。次に調整部２１３はリストＡに含まれる各データ項目ａのうち、最下位のレベル番号を有するデータ項目（図５Ｄの場合は「到着時刻」であり、図５Ｅの場合は「時刻」である。以下では、最下位のレベル番号を有するデータ項目を、「データ項目の末端」とも呼ぶ。）が、引数構造情報記憶部２０１に記憶されたプログラムＢに対応する引数構造情報（以下、「構造情報ｂ」と呼ぶ。）において、登録された最上位の集団項目名（この例では「時刻」。以下、「集団項目Ｂ」と呼ぶ。）に一致するか否かを判定する。なお、図５Ｅの場合は、データ項目ａの末端は「時刻」であるため一致すると判定され、図５Ｄの場合は「到着時刻」であるので一致しないと判定される。
【００３５】
図５Ｄの場合のように、一致しないと判定された場合、調整部２１３は、次に呼び出し元のプログラムＡのＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ  ＳＥＣＴＩＯＮを参照して、プログラムＡにおけるデータ項目ａの定義を確認する。図５Ａの例では、データ項目ａ（到着時刻）の直後にＣＯＰＹ句ＴＩＭＥＣＰＹが定義されている。調整部２１３は、ＣＯＰＹ句ＴＩＭＥＣＰＹで定義されているデータ項目についてレベル番号の昇順に辿っていき、構造情報ｂにおいて登録された最上位の集団項目名Ｍ（この例では「時刻」）と定義名が一致するデータ項目（以下、「データ項目Ｎ」と呼ぶ。）を検索する。ＣＯＰＹ句ＴＩＭＥＣＰＹ内に集団項目名Ｍと定義名が一致する項目名のデータ項目Ｎが見つかった場合には、データ項目ＮをＣＡＬＬ命令の引数として採用する。この結果、図５Ｄのソースについても、図５Ｇのソースに変換することができる。
【００３６】
なお、調整部２１３は、データ項目ａの末端と集団項目名Ｍとが一致しない場合であり、かつデータ項目Ｎを発見できなかった場合には、コンソールにワーニング情報を出力し、データ項目ａをそのまま引数として採用する。
【００３７】
変換部２１１は、調整部２１３が引数の型を調整した後のＣＯＢＯＬソースプログラムについて、変換規則記憶部２００に記憶された変換規則に基づいて、Ｊａｖａソースプログラムに変換する。
【００３８】
図６、７を用いてプログラム変換システム１００における変換処理のフローについて説明する。図６は、引数分析部２１２による引数分析処理の一例を示すフローチャートである。
【００３９】
引数分析部２１２は、変換対象となるＣＯＢＯＬソースプログラムについて、ＵＳＩＮＧ句を参照し、指定された引数Ｐを抽出する（Ｓ１０１）。ＵＳＩＮＧ句に引数Ｐが指定されていない場合（Ｓ１０２：Ｎ）には、処理を終了する。
【００４０】
他方で、ＵＳＩＮＧ句に引数Ｐが指定されている場合（Ｓ１０２：Ｙ）には、引数分析部２１２は、抽出した引数Ｐが、ＬＩＮＫＡＧＥ  ＳＥＣＴＩＯＮにおいて、ＣＯＰＹ句Ｃを用いて定義されているか否かを判定する（Ｓ１０３）。ＣＯＰＹ句Ｃを用いて定義されていない場合（Ｓ１０３：Ｎ）には、引数分析部２１２は次の引数Ｐについて、Ｓ１０３に戻って検証を続ける。
【００４１】
他方で、ＣＯＰＹ句Ｃを用いて定義されている場合（Ｓ１０３：Ｙ）には、引数分析部２１２は、「Ｘ  ＲＥＤＥＦＩＮＥＳ  Ｐ」として定義された項目Ｘが存在しないこと、及びＣＯＰＹ句Ｃの最上位の集団項目にＯＣＣＵＲＳ句が存在しないことを確認する（Ｓ１０４）。
【００４２】
これらの条件を全て満たした場合（Ｓ１０４：Ｙ）には、変換対象となるＣＯＢＯＬソースプログラムの引数構造情報として、ＣＯＰＹ句Ｃの名称、ＣＯＰＹ句内の最上位のデータ項目名を登録する（Ｓ１０５）。このＳ１０１〜Ｓ１０５の処理を、全ての引数Ｐについて検証が終了する（Ｓ１０６：Ｙ）まで、繰り返し実行する。
【００４３】
図７は、調整部２１３による調整処理の一例を示すフローチャートである。まず、調整部２１３は、呼び出し元ＣＯＢＯＬソースプログラムにおいて、ＣＡＬＬ命令で渡されるデータ項目ａを抽出する（Ｓ２０１）。次に調整部２１３は、引数構造情報記憶部２０１を参照し、ＣＡＬＬ命令によって呼び出されるプログラム（例えばプログラムＢ）に対応する引数構造情報である構造情報ｂが登録されているか否かを判定する（Ｓ２０２）。
【００４４】
引数構造情報記憶部２０１に構造情報ｂが登録されていない場合（Ｓ２０２：Ｎ）には、調整部２１３は、ＣＡＬＬ命令によって呼び出されるプログラムはクラスの参照渡しによる呼出しに対応していないプログラムであると判定し、データ項目ａを引数として採用して、ワーニングを出力する（Ｓ２１６）。
【００４５】
他方で、引数構造情報記憶部２０１に構造情報ｂが登録されている場合（Ｓ２０２：Ｙ）であって、調整部２１３はデータ項目ａの末端が構造情報ｂに登録されているＣＯＰＹ句における最上位のデータ項目名Ｍと一致する場合（Ｓ２０３：Ｙ）には、データ項目ａを引数として採用する。
【００４６】
データ項目ａの末端とデータ項目名Ｍとが一致しない場合（Ｓ２０３：Ｎ）には、プログラムＡのＷＯＲＫＩＮＧ−ＳＴＯＲＡＧＥ  ＳＥＣＴＩＯＮを参照して、プログラムＡにおけるデータ項目ａの定義を確認する（Ｓ２０４）。ここでは、プログラムＡにおいてデータ項目aの詳細は、ＣＯＰＹ句Ｃにて定義されているものとする。データ項目aの最初の子項目を順次下位へたどり（Ｓ２０５）、データ項目aの詳細であるＣＯＰＹ句Ｃに、構造情報ｂに登録された最上位の集団項目名と定義名が一致するデータ項目Ｎが存在する場合（Ｓ２０６：Ｙ）には、調整部２１３はデータ項目Ｎを引数として採用する。他方で、データ項目Ｎが存在しない場合（Ｓ２０６：Ｎ）には、調整部２１３はデータ項目ａをそのまま引数として採用し、ワーニングを出力する（Ｓ２１６）。
【００４７】
調整部２１３は、このＳ２０１〜Ｓ２０７の処理を全てのデータ項目ａについて検証が完了する（Ｓ２０８：Ｙ）まで繰り返し実行する。
【００４８】
このように本実施形態に係る調整部２１３によると、呼出し時に、呼び出し先のＣＯＢＯＬソースプログラムに渡される引数の型を調整することができ、変換後のＪａｖａソースプログラムにおいてクラスの参照渡しによる呼び出しを可能にする。これによりＣＣＯＢＯＬソースプログラムから変換されたＪａｖａソースプログラムの性能の劣化を抑制することが可能になる。
【００４９】
以上、プログラム変換システム１００の実施形態について説明した。なお、本実施形態は、本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更／改良され得るととともに、本発明にはその等価物も含まれる。
【００５０】
例えば、既述の実施形態においては、引数分析部２１２は、ＣＯＢＯＬソースプログラムからＣＯＰＹ句Ｃが分離した状態において、引数分析処理を実行する例について説明した。しかし、これに限定されず、引数分析部２１２は、ＣＯＰＹ句Ｃが挿入された後のＣＯＢＯＬソースプログラムに対して引数分析処理を行う構成でもよい。この場合、ＣＯＰＹ句が挿入された箇所が判別可能になるように、ＣＯＢＯＬソースプログラムには、ＣＯＰＹ句の挿入箇所を示すコメントが挿入される構成でもよい。
【符号の説明】
【００５１】
１００  プログラム変換システム
１１０  ホストコンピュータ
１２０  変換プログラム実行システム
１３０  ＣＯＢＯＬプログラム
１４０  ＣＯＢＯＬソースプログラム
１５０  Ｊａｖａソースプログラム
１６０  Ｊａｖａバイトコード
２００  変換規則記憶部
２１０  プログラム変換部
２１１  変換部
２１２  引数分析部
２１３  調整部
２２０  ＣＯＢＯＬソースプログラム記憶部
２３０  Ｊａｖａソースプログラム記憶部
【図１】
2018055448.tif 000003
【図２】
2018055448.tif 000004
【図３Ａ】
2018055448.tif 000005
【図３Ｂ】
2018055448.tif 000006
【図４】
2018055448.tif 000007
【図５Ａ】
2018055448.tif 000008
【図５Ｂ】
2018055448.tif 000009
【図５Ｃ】
2018055448.tif 000010
【図５Ｄ】
2018055448.tif 000011
【図５Ｅ】
2018055448.tif 000012
【図５Ｆ】
2018055448.tif 000013
【図５Ｇ】
2018055448.tif 000014
【図６】
2018055448.tif 000015
【図７】
2018055448.tif 000016
【手続補正書】
【提出日】平成29年11月16日(2017.11.16)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１ＣＯＢＯＬソースプログラムにおいて、前記第１ＣＯＢＯＬソースプログラムを呼び出す際に用いられる引数である第１引数が、第１ＣＯＰＹ句によって定義されている場合に、前記第１ＣＯＰＹ句において最上位のレベル番号を有する最上位データ項目と、前記第１ＣＯＢＯＬソースプログラムとの対応関係を示す引数構造情報を引数構造情報記憶部に記憶させる引数分析部と、
前記第１ＣＯＢＯＬソースプログラムを呼び出す第２ＣＯＢＯＬソースプログラムにおいて、前記第１ＣＯＢＯＬソースプログラムを呼び出す際に指定される引数である第２引数の最下位のデータ項目が、前記引数構造情報において前記第１ＣＯＢＯＬソースプログラムと対応関係を有する前記最上位データ項目と一致しない場合には、前記第２ＣＯＢＯＬソースプログラムにおいて前記第２引数を定義する前記第１ＣＯＰＹ句における最上位データ項目を前記第１ＣＯＢＯＬソースプログラムに渡すように前記第２引数を調整する調整部と、
前記第１ＣＯＢＯＬソースプログラム及び前記第２引数が調整された前記第２ＣＯＢＯＬソースプログラムを所定の変換規則に基づいてＪａｖａソースプログラムに変換する変換部と、
を備えるプログラム変換システム。
【請求項２】
前記調整部は、
前記第２引数が前記第２ＣＯＢＯＬソースプログラムにおいて前記第１ＣＯＰＹ句によって定義されていない場合には、ワーニングを出力する、
請求項１に記載のプログラム変換システム。
【請求項３】
コンピュータが、
第１ＣＯＢＯＬソースプログラムにおいて、前記第１ＣＯＢＯＬソースプログラムを呼び出す際に用いられる引数である第１引数が、第１ＣＯＰＹ句によって定義されている場合に、前記第１ＣＯＰＹ句において最上位のレベル番号を有する最上位データ項目と、前記第１ＣＯＢＯＬソースプログラムとの対応関係を示す引数構造情報を引数構造情報記憶部に記憶させるステップと、
前記第１ＣＯＢＯＬソースプログラムを呼び出す第２ＣＯＢＯＬソースプログラムにおいて、前記第１ＣＯＢＯＬソースプログラムを呼び出す際に指定される引数である第２引数の最下位のデータ項目が、前記引数構造情報において前記第１ＣＯＢＯＬソースプログラムと対応関係を有する前記最上位データ項目と一致しない場合には、前記第２ＣＯＢＯＬソースプログラムにおいて前記第２引数を定義する前記第１ＣＯＰＹ句における最上位データ項目を前記第１ＣＯＢＯＬソースプログラムに渡すように前記第２引数を調整するステップと、
前記第１ＣＯＢＯＬソースプログラム及び前記第２引数が調整された前記第２ＣＯＢＯＬソースプログラムを所定の変換規則に基づいてＪａｖａソースプログラムに変換するステップと、
を実行するプログラム変換方法。