(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B1)
(11)【特許番号】
(24)【登録日】2024-12-20
(45)【発行日】2025-01-06
(54)【発明の名称】プログラミング言語変換システム、プログラミング言語変換方法、及びプログラム
(51)【国際特許分類】
G06F 8/51 20180101AFI20241223BHJP
G06F 8/53 20180101ALI20241223BHJP
【FI】
G06F8/51
G06F8/53
(21)【出願番号】P 2024147149
(22)【出願日】2024-08-29
【審査請求日】2024-08-29
【早期審査対象出願】
(73)【特許権者】
【識別番号】514020389
【氏名又は名称】TIS株式会社
(74)【代理人】
【識別番号】100079108
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】藤本 美穂
(72)【発明者】
【氏名】長谷川 佐一
(72)【発明者】
【氏名】山田 勇樹
(72)【発明者】
【氏名】岩瀬 美雪
(72)【発明者】
【氏名】影山 剛伸
【審査官】円子 英紀
(56)【参考文献】
【文献】特開2004-252807(JP,A)
【文献】特開2015-197821(JP,A)
【文献】米国特許出願公開第2011/0271247(US,A1)
【文献】中国特許第113282301(CN,B)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/51
G06F 8/53
(57)【特許請求の範囲】
【請求項1】
アセンブリ言語で記述される原プログラムを、アセンブリ言語とは異なるプログラミング言語で記述される変換プログラムに変換するプログラミング言語変換システムであって、
前記原プログラムの記述に対応する元記述項目と、アセンブリ言語における所定個のレジスタのそれぞれに対応する記述であるレジスタ項目と、前記所定個のレジスタのうちの第1のレジスタを用いた変位指定の第1の命令に対してアドレス領域を確保するための記述である第1のリンケージ項目と、を含む中間プログラムを生成する生成部と、
前記中間プログラムを前記変換プログラムに変換する変換部と、
を備えるプログラミング言語変換システム。
【請求項2】
前記生成部は、アセンブリ言語で記述された前記第1の命令を、前記所定個のレジスタのそれぞれに対応するレジスタ番号と、レジスタ項目の属性の記述と、アドレスの長さを示す記述と、を含む命令に変換した、前記中間プログラムを生成する、
請求項1に記載のプログラミング言語変換システム。
【請求項3】
前記生成部は、アセンブリ言語で記述されたダミーセクションの定義項目を含む、前記所定個のレジスタのうちの第2のレジスタを用いた第2の命令であって、当該第2の命令に対してアドレス領域を確保するための記述である第2のリンケージ項目をさらに含む、前記中間プログラムを生成する、
請求項1に記載のプログラミング言語変換システム。
【請求項4】
前記生成部は、アセンブリ言語で記述された、所定の処理に対応する絶対的なアドレスが設定されるアドレスコンスタント項目を、所定の文字列が付加された、前記変換プログラムに変換可能な項目に変換した、前記中間プログラムを生成する、
請求項1に記載のプログラミング言語変換システム。
【請求項5】
前記生成部は、アセンブリ言語で記述されたアドレスを加算する第3の命令を、前記第1のリンケージ項目を用いて前記レジスタ項目に加算する命令に変換した、前記中間プログラムを生成する、
請求項1に記載のプログラミング言語変換システム。
【請求項6】
コンピュータが、
アセンブリ言語で記述される原プログラムの記述に対応する元記述項目と、アセンブリ言語における所定個のレジスタのそれぞれに対応する記述であるレジスタ項目と、前記所定個のレジスタのうちの第1のレジスタを用いた変位指定の第1の命令に対してアドレス領域を確保するための記述である第1のリンケージ項目と、を含む中間プログラムを生成することと、
前記中間プログラムを、アセンブリ言語とは異なるプログラミング言語で記述される変換プログラムに変換することと、
を実行するプログラミング言語変換方法。
【請求項7】
コンピュータに、
アセンブリ言語で記述される原プログラムの記述に対応する元記述項目と、アセンブリ言語における所定個のレジスタのそれぞれに対応する記述であるレジスタ項目と、前記所定個のレジスタのうちの第1のレジスタを用いた変位指定の第1の命令に対してアドレス領域を確保するための記述である第1のリンケージ項目と、を含む中間プログラムを生成することと、
前記中間プログラムを、アセンブリ言語とは異なるプログラミング言語で記述される変換プログラムに変換することと、
を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、プログラミング言語変換システム、プログラミング言語変換方法、及びプログラムに関する。
【背景技術】
【0002】
アセンブリ言語をCOBOLに変換可能なシステムが知られている(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1に記載のドキュメント生成装置は、アセンブリ言語で記述されたアセンブラプログラムを、他のプログラミング言語に変換する装置である。ドキュメント生成装置は、記憶部に格納されている原ソースを構成する一部のプログラムの記述を、当該記述に対応する変換情報に基づき、他言語のプログラムの記述に変換する。
【0005】
しかし、特許文献1に記載のドキュメント生成装置では、アセンブリ言語で記述されたアセンブラプログラムに、他のプログラミング言語に適切に変換できない命令が含まれる場合、アセンブラプログラムを他のプログラミング言語に変換できないという問題を生じる。
【0006】
そこで、本発明は、上記課題を鑑み、アセンブリ言語を他のプログラミング言語に適切に変換可能なシステムを提供することを目的とする。
【課題を解決するための手段】
【0007】
本発明の一態様に係るプログラミング言語変換システムは、アセンブリ言語で記述される原プログラムを、アセンブリ言語とは異なるプログラミング言語で記述される変換プログラムに変換するプログラミング言語変換システムであって、前記原プログラムの記述に対応する元記述項目と、アセンブリ言語における所定個のレジスタのそれぞれに対応する記述であるレジスタ項目と、前記所定個のレジスタのうちの第1のレジスタを用いた変位指定の第1の命令に対してアドレス領域を確保するための記述である第1のリンケージ項目と、を含む中間プログラムを生成する生成部と、前記中間プログラムを前記変換プログラムに変換する変換部と、を備える。
【0008】
本発明の一態様に係るプログラミング言語変換方法は、コンピュータが、アセンブリ言語で記述される原プログラムの記述に対応する元記述項目と、アセンブリ言語における所定個のレジスタのそれぞれに対応する記述であるレジスタ項目と、前記所定個のレジスタのうちの第1のレジスタを用いた変位指定の第1の命令に対してアドレス領域を確保するための記述である第1のリンケージ項目と、を含む中間プログラムを生成することと、前記中間プログラムを、アセンブリ言語とは異なるプログラミング言語で記述される変換プログラムに変換することと、を実行する。
【0009】
本発明の一態様に係るプログラムは、コンピュータに、アセンブリ言語で記述される原プログラムの記述に対応する元記述項目と、アセンブリ言語における所定個のレジスタのそれぞれに対応する記述であるレジスタ項目と、前記所定個のレジスタのうちの第1のレジスタを用いた変位指定の第1の命令に対してアドレス領域を確保するための記述である第1のリンケージ項目と、を含む中間プログラムを生成することと、前記中間プログラムを、アセンブリ言語とは異なるプログラミング言語で記述される変換プログラムに変換することと、を実行させる。
【発明の効果】
【0010】
本発明によれば、アセンブリ言語を他のプログラミング言語に適切に変換可能なシステムを提供することができる。
【図面の簡単な説明】
【0011】
【
図1】プログラミング言語変換システムの構成の概要の一例を示す図である。
【
図2】第1の生成処理および第2の生成処理に関する、原プログラム、中間プログラムおよび変換プログラムの対応関係の一例を示す図である。
【
図3】第3の生成処理に関する、原プログラム、中間プログラムおよび変換プログラムの対応関係の一例を示す図である。
【
図4】第4の生成処理に関する、原プログラム、中間プログラムおよび変換プログラムの対応関係の一例を示す図である。
【
図5】第5の生成処理に関する、原プログラム、中間プログラムおよび変換プログラムの対応関係の一例を示す図である。
【
図6】変形例にかかる変換部における処理に関する、原プログラム、中間プログラムおよび変換プログラムの対応関係の一例を示す図である。
【
図7】プログラミング言語変換システムの処理手順の一例を示すフロー図である。
【
図8】コンピュータのハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【0012】
添付図面を参照して、本発明の好適な実施形態(以下、「本実施形態」という)について説明する。なお、各図において、同一の符号を付したものは、同一又は同様の構成を有する。本実施形態において、「部」や「手段」、「装置」、「システム」とは、単に物理的手段を意味するものではなく、その「部」や「手段」、「装置」、「システム」が有する機能をソフトウェアによって実現する場合も含む。また、一つの「部」や「手段」、「装置」、「システム」が有する機能が2つ以上の物理的手段や装置により実現されてもよく、二つ以上の「部」や「手段」、「装置」、「システム」の機能が1つの物理的手段や装置により実現されてもよい。
【0013】
===プログラミング言語変換システム100===
<<概要>>
プログラミング言語変換システム100は、アセンブリ言語を他のプログラミング言語に変換するシステムである。プログラミング言語変換システム100は、アセンブリ言語で記述されたプログラム(以下、「原プログラム」という。)を他のプログラミング言語(例えばCOBOL、C言語、Java等のプログラミング言語)で記述されたプログラム(以下、「変換プログラム」という。)に変換する際に、原プログラムの一部を変換したアセンブリ言語で記述されるプログラム(以下、「中間プログラム」という。)を生成する。以下、便宜上、変換プログラムがCOBOLであることとして説明する。
【0014】
中間プログラムは、原プログラムを変換プログラムに適切に変換可能とするために、原プログラムに含まれる命令の記述を変換プログラムに変換可能な命令の記述に変換したプログラムである。
【0015】
すなわち、プログラミング言語変換システム100は、原プログラムの記述と、変換プログラムの記述とを一対一に対応づけたデータベースのみを参照して、原プログラムを変換プログラムに変換するものではない。プログラミング言語変換システム100は、原プログラムを、変換プログラムへの変換に支障となる記述を適切に変換した中間プログラムを用いて、原プログラムを変換プログラムに適切かつ問題なく変換可能にするという、従来技術にはない特徴を有する。
【0016】
<<構成>>
図1を参照して、プログラミング言語変換システム100の構成の概要について説明する。
図1は、プログラミング言語変換システム100の構成の概要の一例を示す図である。
【0017】
プログラミング言語変換システム100は、原プログラムの一部の記述を置換して中間プログラムを生成し、中間プログラムを変換プログラムに変換するシステムである。
【0018】
プログラミング言語変換システム100は、例えば、クラウドコンピュータ、サーバコンピュータ、パーソナルコンピュータ(例えば、デスクトップ、ラップトップ、タブレットなど)、メディアコンピュータプラットホーム(例えば、ケーブル、衛星セットトップボックス、デジタルビデオレコーダ)、ハンドヘルドコンピュータデバイス(例えば、PDA、電子メールクライアントなど)、あるいは他種のコンピュータ、またはコミュニケーションプラットホームであってもよい。なお、プログラミング言語変換システム100における処理の少なくとも一部は、1以上のコンピュータ(限定ではなく例として、1以上のコンピュータにより構成されるクラウドコンピューティング)により実現されていてもよい。
【0019】
図1に示すように、プログラミング言語変換システム100は、例えば、記憶部110と、取得部120と、生成部130と、変換部140と、識別符号付与部150と、コメント部160と、表示処理部170とを含む。
【0020】
記憶部110は、原プログラム、変換プログラムおよび中間プログラムを関連づけて記憶する。
【0021】
取得部120は、少なくとも一部がアセンブリ言語で記述された原プログラム(第1のプログラム)を取得する。原プログラムには、例えば、アセンブリ言語で記述されていない命令を含む記述、および変換プログラムに変換不能なアセンブリ言語の命令が含まれうる。
【0022】
生成部130は、原プログラムに基づき中間プログラムを生成する。生成部130は、第1の生成処理から第5の生成処理を実行して中間プログラムを生成する。以下、
図2~
図5を参照して、第1の生成処理から第5の生成処理について説明する。なお、
図2~
図5では、紙面上の左の枠から順に「原プログラム」、「中間プログラム」、「変換プログラム」(一例としてCOBOL)を示し、それぞれが対応する記述には同じ行番号を付している。
【0023】
まず、
図2を参照して、第1の生成処理および第2の生成処理について説明する。
図2は、第1の生成処理および第2の生成処理に関する、原プログラム、中間プログラムおよび変換プログラムの対応関係の一例を示す図である。
【0024】
第1の生成処理は、アセンブリ言語における所定個のレジスタのそれぞれに対応する項目(以下、「レジスタ項目Cre」という。)を含む中間プログラムを生成する。
【0025】
例えば、アセンブリ言語で記述される原プログラムには汎用レジスタとして16個のレジスタが存在する。レジスタは、例えば、固定小数点演算、アドレス計算および論理演算に用いられる。
【0026】
プログラミング言語変換システム100は、第1の生成処理によって、COBOLにはレジスタを直接指定する命令がないため、レジスタの値を参照したり書き換えたりするアセンブリ言語の記述を変換プログラムに適切に変換できないという問題を解消することができる。
【0027】
具体的には、
図2に示すように、第1の生成処理では、原プログラムにおけるアセンブリ言語の16個のレジスタに対応するレジスタ項目Creを、中間プログラムのワークエリアに生成する。さらに言うと、第1の生成処理では、固定小数点演算エリアR10と同じ領域にアドレス計算エリアR11を再定義する。
【0028】
第2の生成処理は、例えば、原プログラムにおける16個のレジスタのうちの所定のレジスタを用いた変位指定の命令に対してアドレス領域を確保するための項目(以下、「第1のリンケージ項目Cl1」という。)を含む中間プログラムを生成する。第2の生成処理では、例えばレジスタごとに第1のリンケージ項目C11を生成する。
【0029】
プログラミング言語変換システム100は、第2の生成処理によって、アセンブリ言語におけるレジスタ指定を示すオペランドを変換プログラムに適切に変換できないという問題を解消することができる。
【0030】
具体的には、第2の生成処理では、変位指定について、
図2に示す原プログラムにおけるレジスタ指定である「0(12,R6)」を含む「MVC 0(12,R6),TRNHINBN」の移動命令(行番号「6」の命令)を、レジスタ番号と、レジスタ項目の属性の記述と、アドレスの長さを示す記述とを含む記述である「MVC R6L_X0000012,TRNHINBN」に変換した中間プログラムを生成する。レジスタ項目の属性は、例えば、文字、パック形式数値、バイナリ形式数値などである。
【0031】
原プログラムの「MVC 0(12,R6),TRNHINBN」の移動命令は、レジスタR6が示すアドレスから +0離れた12桁のエリアにTRNHINBNを転送するという命令である。なお、レジスタ指定の命令の実行前に、レジスタR6にはDS定義の項目アドレスが設定されている。すなわち、原プログラムの「MVC 0(12,R6)」命令における、「MVC」は文字タイプを示し、「0」はレジスタR6の先頭位置を示し、「12」は12桁を示す。
【0032】
中間プログラムの「R6L_X0000012」は、「R6L_」がレジスタR6を示し、「X」が文字タイプを示し、「0000」がレジスタR6の先頭位置を示し、「012」が12桁を示す。すなわち、中間プログラムの「MVC R6L_X0000012,TRNHINBN」は、レジスタR6L_DSの先頭から12桁をTRNHINBNへ転送することを意味する。
【0033】
さらに、具体的には、第2の生成処理では、アドレス領域の確保について、原プログラムにおけるレジスタごとの領域を第1のリンケージ項目C11に生成する。すなわち、第1のリンケージ項目C11は、アドレスが渡される際のエリア定義が規定される項目である。
【0034】
例えば、
図2に示すように、第2の生成処理では、原プログラムにおける「LA R6,MSTREC」(行番号「5」の命令)が示すMSTRECのアドレスを取得する命令について、COBOLにおいてレジスタ項目に当該アドレスを設定するために、第1のリンケージ項目C11である「ATOCADR」を通じて、「LINKAGE SECTION.」のエリアアドレスを、呼び出し側のアドレス項目(アドレス計算エリアR11の「WK-R6P」)に設定可能に中間プログラムを生成する。
【0035】
次に、
図3を参照して、第3の生成処理について説明する。
図3は、第3の生成処理に関する、原プログラム、中間プログラムおよび変換プログラムの対応関係の一例を示す図である。
【0036】
第3の生成処理は、ダミーセクションの定義項目を含む命令について、当該命令に対してアドレス領域を確保するための項目(以下、「第2のリンケージ項目C12」という。)を含む中間プログラムを生成する。
【0037】
ダミーセクションとは、実エリアを確保せず、エリアのフォーマットを定義する命令である。ダミーセクションを使用するには、どのレジスタを使用するか宣言して(例えば行番号「9」の「USING DSCTRN,R9」)、実エリアのアドレスを当該レジスタに設定する(例えば行番号「10」の「LA R9,TRNDAT」)。
【0038】
プログラミング言語変換システム100は、第3の生成処理によって、原プログラムにおけるダミーセクションを変換プログラムに適切に変換できないという問題を解消することができる。
【0039】
第3の生成処理では、原プログラムにおける「USING」命令によりダミーセクションがどのレジスタで使用されているかを読み取る。そして、第3の生成処理では、使用されているレジスタごとに第2のリンケージ項目C12を生成して、レジスタ付きで項目名を定義し、ダミーセクション項目名をレジスタ付きの項目名に置き換える。
【0040】
具体的には、第3の生成処理は、例えばレジスタR9を使用してダミーセクションの項目を定義する。
図3では、原プログラムにおいて、ダミーセクションを示すDSCTRNをレジスタR9で使用することを示す「USING DSCTRN,R9」の命令(行番号「9」の命令)と、実エリアはTRNDATのDS定義エリアであることを示す「LA R9,TRNDAT」の命令(行番号「10」の命令)が含まれる。第3の生成処理は、当該命令について、「R9L_DS」(行番号「9」)でレジスタR9に定義し、「R9L_DSCDAT」(行番号「33」)でDSCTRN項目に「R9L_」を付けて項目定義する。このように、第3の生成処理は、原プログラムのダミーセクションの項目を「R9L_」付きの定義に置き換える。
【0041】
そして、
図3に示すように、第3の生成処理では、原プログラムにおける「LA R9,TRNDAT」(行番号「10」)が示す「TRNDAT」のアドレスを取得する命令について、変換プログラム(例えばCOBOL)においてレジスタ項目に当該アドレスを設定するために、「ATOCADR」を通じて、第2のリンケージ項目C12である「LINKAGE SECTION.」のエリアアドレスを、呼び出し側のアドレス項目(
図2の中間プログラムのレジスタ項目Creである例えば「WK_R9P」)に設定可能な命令(行番号「10」)を含む中間プログラムを生成する。
【0042】
次に、
図4を参照して、第4の生成処理について説明する。
図4は、第4の生成処理に関する、原プログラム、中間プログラムおよび変換プログラムの対応関係の一例を示す図である。
【0043】
第4の生成処理は、原プログラムにおいて、所定の処理に対応する絶対アドレスが設定される項目(以下、「アドレスコンスタント項目Ca」という。)に対して、所定の文字列が付加された、変換プログラムに変換可能な項目を含む中間プログラムを生成する。
【0044】
アドレスコンスタント項目Caは、例えば、
図4に示す「DC A(TRNDAT)」(「TRNDAT」はDS定義項目である。)の指定をアドレスコンスタントといい、コンパイル時に初期値が設定される項目である。アドレスコンスタント項目Caは、コンパイル時にはDS定義項目のロケーション位置が設定され、実行時にはプログラムがロードされた絶対アドレスが計算されて設定される。
【0045】
第4の生成処理では、例えば、アドレスの初期値の項目を設定できない変換プログラム(例えばCOBOL)においては実行時に絶対アドレスを計算して設定するような初期値を定義できないため、原プログラムにおけるアドレスコンスタント項目に「_P」を付加した
図4に示す「ADTRNDAT_P」(行番号「16」)のように、例えばCOBOLのPOINTER項目に相当する項目を含む中間プログラムを生成する。
【0046】
プログラミング言語変換システム100は、第4の生成処理によって、原プログラムにおけるアドレスコンスタント項目Caを変換プログラムに適切に変換できないという問題を解消することができる。
【0047】
次に、
図5を参照して、第5の生成処理について説明する。
図5は、第5の生成処理に関する、原プログラム、中間プログラムおよび変換プログラムの対応関係の一例を示す図である。
【0048】
第5の生成処理は、アセンブリ言語の原プログラムにおけるアドレス加算の命令(第3の命令)を、アドレス領域を確保するための記述である「LINKAGE SECTION」(第1のリンケージ項目)を用いてレジスタ項目に加算する命令に変換した、中間プログラムを生成する。
【0049】
具体的には、
図5に示すように、まず、第5の生成処理では、原プログラムにおける「LA R2,TBL02」(行番号「2」)について、レジスタ項目を含む「LINKAGE SECTION」にTBL02アドレスを設定すると、「LINKAGE SECTION」(行番号「2」)のエリア定義項目を使用できるように中間プログラムを生成する。これにより、「TBL02」の先頭のアドレスを参照することができる。
【0050】
次に、第5の生成処理は、原プログラムにおける、レジスタR2のアドレスを10バイト進める(10加算する)命令である「LA R2,10(R2)」(行番号「3」)であって、すなわち「TBL02」のエントリを1つ進める命令について、四則演算用にレジスタ項目に10を加算する命令である変換プログラム「COMPUTE WK-R2=10+WK-R2.」に相当する「LA 2,10(2)」を含む中間プログラムを生成する。
【0051】
これにより、変換プログラムにおける「05 WK-R2」の領域と「WK-R2P」の領域は同じ領域であるため、WK-W2Pを10バイト進めたことと同じとなる。
【0052】
このように、第5の生成処理では、エントリを1つ進めたアドレスを、生成部130で生成される中間プログラムの「LINKAGE SECTION」のレジスタR2の領域に再セットする「SET ADDRESS OF R2L-DS TO WK-R2P」命令(行番号「3」)により、「LINKAGE SECTION」の項目がエントリを1つ進めることが可能な中間プログラムを生成する。
【0053】
プログラミング言語変換システム100は、第5の生成処理によって、原プログラムにおけるアドレス加算の命令を変換プログラムに適切に変換できないという問題を解消することができる。
【0054】
変換部140は、中間プログラムを変換プログラムに変換する。以下、
図2から
図5を参照して、中間プログラムから変換プログラムに変換する処理について説明する。
【0055】
変換部140は、第1の生成処理に基づき生成された中間プログラムのレジスタ項目Creを変換プログラムにおけるレジスタの項目定義に変換する。具体的には、
図2に示すように、変換部140は、例えばCOBOLにおいてPIC句やPOINTER句による項目定義に変換する。
【0056】
変換部140は、第2の生成処理に基づき生成された中間プログラムの第1のリンケージ項目C11を変換プログラムにおけるレジスタの項目定義に変換する。具体的には、
図2に示すように、変換部140は、中間プログラムにおける「LA 6,MSTREC」の命令およびリンケージ項目C11の命令を、変換プログラムにおける、MSTRECアドレスを変換プログラムのレジスタ定義の「WK-R6P POINTER」へセットする命令とレジスタごとの特殊レジスタにLINKAGEエリアを参照できるようにする命令「(
図2の変換プログラムの行番号「5」)および「LINKAGE SECTION」以下のレジスタごとのデータ項目定義命令に変換する。
【0057】
このとき、変換部140は、中間プログラムにおける変位「0」、長さ「12」およびレジスタ「R6」の指定を示す「R6L_X0000012」を、変換プログラムにおける「R6L-X0000012」に変換する。
【0058】
変換部140は、第3の生成処理に基づき生成された中間プログラムのダミーセクションの項目を変換プログラムにおけるレジスタの項目定義に変換する。具体的には、
図3に示すように、変換部140は、中間プログラムにおける「LA 9,TRNDAT」およびリンケージ項目C12の命令を、変換プログラムにおける、TRNDATアドレスを変換プログラムのレジスタ定義の「WK-R9P POINTER」へセットする命令とレジスタごとの特殊レジスタにLINKAGEエリアを参照できるようにする命令(
図3の変換プログラムの行番号「10」)と、「LINKAGE SECTION」以下のレジスタごとのデータ項目定義命令に変換する。
【0059】
このとき、変換部140は、中間プログラムにおける「MVC HINBAN,R9L_DSCHINBN」において「R9L_DSCHINBN」を「R9L-DSCHINBN」に変換する。
【0060】
第1の生成処理から第3の生成処理に基づき、プログラミング言語変換システム100は、変換プログラムにおいて「LINKAGE SECTION」を設定するように中間プログラムを生成し、中間プログラムを変換プログラムに変換する。すなわち、プログラミング言語変換システム100は、レジスタと変位指定のアセンブリ言語における命令を、レジスタごとに「LINKAGE SECTION」に生成した項目名に置き換えた中間プログラムを生成することにより、原プログラムを変換プログラムに適切に変換することができる。
【0061】
変換部140は、第4の生成処理に基づき生成された中間プログラムのアドレスコンスタント項目Caを変換プログラムにおけるレジスタの項目定義に変換する。具体的には、
図4に示すように、変換部140は、中間プログラムにおける「ADTRNDAT_P DS R」を、変換プログラムにおける「01 WK-DS001.」および「03 ADTRNDAT-P POINTER.」の命令(
図4の変換プログラムの16行)に変換する。
【0062】
そして、変換部140は、変換プログラムにおいて、初期処理のPERFORM命令とASMTOCBL-INITルーチンの命令を生成する(
図4の変換プログラムの行番号「16」)。このように、変換プログラムでは、プログラム実行開始時にASMTOCBL-INITルーチンに制御を移行させて、生成した上記のPOINTER項目にアドレスをセットすることが可能となる。これにより、変換プログラムにおいてプログラムがロードされた絶対アドレスを設定することが可能となる。
【0063】
変換部140は、第5の生成処理に基づき生成された、
図5に示す中間プログラムのアドレス加算に関する命令を、変換プログラムにおけるアドレス加算に関する命令に変換する。
【0064】
識別符号付与部150は、原プログラム、中間プログラムおよび変換プログラムのそれぞれの各行を識別するための識別符号を付与する。識別符号は、各行を識別可能な符号であればよく、例えば連続する数字(行番号)であってもよい。プログラミング言語変換システム100は、原プログラムの各行に識別符号を付与して、当該各行に対応する中間プログラムおよび変換プログラムの各行に同じ識別符号を付与する。これにより、プログラミング言語変換システム100は、原プログラムの各行と、中間プログラムおよび変換プログラムの各行との対応関係が明確にすることが可能となる。
【0065】
コメント部160は、原プログラムにおける各行の命令に対するコメント(例えば
図4の中間プログラムの行番号「16」の「ADTRNDAT-P ハ TRNDAT ノ アドレス」)を特定する。
【0066】
表示処理部170は、表示部1007に各種情報を出力する。表示処理部170は、例えば原プログラム、中間プログラムおよび変換プログラムのそれぞれを並べて表示部1007に表示させてもよい。これにより、プログラミング言語変換システム100は、原プログラム、中間プログラムおよび変換プログラムの対応関係を容易に把握可能な画面をユーザに提供することができるため、ユーザの利便性を向上できる。
【0067】
表示処理部170は、コメント部160で特定された原プログラムの各行のコメントを、当該各行に対応する変換プログラムにおける命令に当該コメントを関連づけて表示部1007に表示する。これにより、プログラミング言語変換システム100は、原プログラムの作成者の命令に対するコメントを変換プログラムに反映することできるため、ユーザの利便性を向上できる。
【0068】
また、表示処理部170は、変換プログラムにおける各行のそれぞれの命令に、当該命令に対応する中間プログラムの命令を関連づけて表示部1007に表示する。具体的には、表示処理部170は、例えば変換プログラムの所定の命令の一行上に当該命令に対応する中間プログラムの命令を表示させる。これにより、プログラミング言語変換システム100は、変換プログラムの各行に対応する中間プログラム(または原プログラム)を、変換プログラムとともに表示させることができるため、ユーザの利便性を向上できる。
【0069】
また、表示処理部170は、中間プログラム(および原プログラム)に含まれる各行の命令のそれぞれを一意に識別可能な識別符号を、当該各行の命令のそれぞれに関連づけて表示部に表示する。そして、表示処理部170は、中間プログラムに含まれる各行の命令のそれぞれに関連づけられた識別符号を、中間プログラムに含まれる各行の命令のそれぞれに対応する変換プログラムに含まれる各行の命令のそれぞれに関連づけて表示部1007に表示する。これにより、プログラミング言語変換システム100は、原プログラム、中間プログラムおよび変換プログラムの対応関係を容易に認識することができるため、ユーザの利便性を向上できる。
【0070】
<<変形例>>
図6を参照して、変形例にかかる変換部140の処理内容について説明する。
図6は、変形例にかかる変換部140における処理に関する、原プログラム、中間プログラムおよび変換プログラムの対応関係の一例を示す図である。なお、
図6では、紙面上の左の枠から順に「原プログラム」、「中間プログラム」、「変換プログラム」(一例としてCOBOL)を示し、それぞれが対応する記述には同じ行番号を付している。
【0071】
変換部140は、アセンブリ言語の原プログラムにおける連続したアドレスに配置される各項目を、変換プログラムに適切に変換してもよい。この場合、変換部140は、集団項目と基本項目とのそれぞれにレベル番号を設定する。例えば、レベル番号01が設定される集団項目には、01よりも大きいレベル番号の基本項目および集団項目が従属する。これにより、レベル番号01には、レベル番号01に従属するエリアが連続して配置される。このように、変換部140は、アセンブリ言語におけるDS定義に基づき、集団項目を用いたレベル番号を設定することにより、各項目を連続したアドレスに配置して変換プログラムに変換することができる。
【0072】
具体的には、
図6に示すように、変換部140は、原プログラムおよび中間プログラムにおける、集団項目24桁と判定される「MSTREC DS OCL24」(行番号「17」)について、「01 MSTREC.」でレベル番号「01」で01レベルの集団項目で定義し、再定義用の03レベル項目である「03 MSTREC-R.」を定義する。「03 MSTREC-R」は例えば01レベルの集団項目と同じ24桁である。
【0073】
そして、原プログラムおよび中間プログラムにおける、集団項目12桁と判定される「HINBAN DS OCL12」(行番号「18」)は24桁以内の03レベルであるため05レベルの「05 HINBAN.」として変換する。さらに、原プログラムおよび中間プログラムにおける、「HINGS1 DS CL7」(行番号「19」)は基本項目として07レベルの「07 HINGS1 PIC X(7).」として変換する。同様に、「HINGS1 DS CL5」(行番号「20」)は基本項目として07レベルの「07 HINGS1 PIC X(5).」として変換する。このときに、05レベルで12桁確保したため07レベルから05レベルに戻す。
【0074】
そして、原プログラムおよび中間プログラムにおける、「URISU DS H」(行番号「21」)の「H」は基本項目で05レベルと定義し、「05 URISU PIC S9(4) COMP.」として変換する。同様に、原プログラムおよび中間プログラムにおける、「URITANKA DS PL4」(行番号「22」)の「PL4」は基本項目で05レベルと定義し、「05 URITANKA PIC S9(7) COMP-3.」として変換する。同様に、原プログラムおよび中間プログラムにおける、「URIKINGK DS PL6」(行番号「23」)の「PL6」は基本項目で05レベルと定義し、「05 URIKINGK PIC S9(11) COMP-3.」として変換する。このときに、03レベルの24桁を確保したため、レベル番号を初期化する。この後、原プログラムおよび中間プログラムにおける行番号24以降も同様に変換する
【0075】
このように、変換部140は、例えば変換プログラムであるCOBOLにおいて01レベルから次々にポインターを生成して連番を設定することができる。
【0076】
<<処理手順>>
図7を参照して、プログラミング言語変換システム100の処理手順について説明する。
図7は、プログラミング言語変換システム100の処理手順の一例を示すフロー図である。
【0077】
ステップS100において、プログラミング言語変換システム100は、原プログラムの各行に、例えば各行のそれぞれを識別可能な行番号を連番で付与する。これにより、プログラミング言語変換システム100は、原プログラムと、中間プログラムおよび変換プログラムとの対応関係を視覚的に確認可能な表示をユーザに提供できる。
【0078】
ステップS101において、プログラミング言語変換システム100は、原プログラムをコピーしたプログラムを中間プログラム作成用として生成する。以下、便宜上、コピーされた原プログラムを中間プログラムとして説明する。
【0079】
ステップS102において、プログラミング言語変換システム100は、中間プログラムに対して第1の生成処理から第5の生成処理を実行する。第1の生成処理から第5の生成処理については上述したとおりである。
【0080】
ステップS103において、プログラミング言語変換システム100は、中間プログラムを変換プログラムに変換して、変換プログラムを表示部に表示させる。
【0081】
以上のように、プログラミング言語変換システム100では、原プログラムを変換プログラムに変換する際に、原プログラムの各命令を変換プログラムに変換可能な記述に変換した中間プログラムを生成する。これにより、プログラミング言語変換システム100は、アセンブリ言語で記述されたプログラムを他のプログラミング言語で記述されたプログラムに適切に変換できる。
【0082】
===ハードウェア構成===
図8を参照して、プログラミング言語変換システム100をコンピュータで実現する場合のハードウェア構成の一例を説明する。
図8は、コンピュータのハードウェア構成の一例を示す図である。
【0083】
図8に示すように、コンピュータ1000は、プロセッサ1001と、メモリ1002と、記憶装置1003と、入力I/F部1004と、データI/F部1005と、通信I/F部1006、及び表示部1007を含む。
【0084】
プロセッサ1001は、メモリ1002に記憶されているプログラムを実行することによりコンピュータ1000における各種の処理を制御する制御部である。
【0085】
メモリ1002は、例えばRAM(Random Access Memory)等の記憶媒体である。メモリ1002は、プロセッサ1001によって実行されるプログラムのプログラムコードや、プログラムの実行時に必要となるデータを一時的に記憶する。
【0086】
記憶装置1003は、例えばハードディスクドライブ(HDD)やフラッシュメモリ等の不揮発性の記憶媒体である。記憶装置1003は、オペレーティングシステムや、上記各構成を実現するための各種プログラムを記憶する。
【0087】
入力I/F部1004は、ユーザからの入力を受け付けるためのデバイスである。入力I/F部1004の具体例としては、キーボードやマウス、タッチパネル、各種センサー、ウェアラブル・デバイス等が挙げられる。入力I/F部1004は、例えばUSB(Universal Serial Bus)等のインターフェースを介してコンピュータ1000に接続されても良い。
【0088】
データI/F部1005は、コンピュータ1000の外部からデータを入力するためのデバイスである。データI/F部1005の具体例としては、各種記憶媒体に記憶されているデータを読み取るためのドライブ装置等がある。データI/F部1005は、コンピュータ1000の外部に設けられることも考えられる。その場合、データI/F部1005は、例えばUSB等のインターフェースを介してコンピュータ1000へと接続される。
【0089】
通信I/F部1006は、コンピュータ1000の外部の装置と有線又は無線により、インターネットNを介したデータ通信を行うためのデバイスである。通信I/F部1006は、コンピュータ1000の外部に設けられることも考えられる。その場合、通信I/F部1006は、例えばUSB等のインターフェースを介してコンピュータ1000に接続される。
【0090】
表示部1007は、各種情報を表示するためのデバイスである。表示部1007の具体例としては、例えば液晶ディスプレイや有機EL(Electro-Luminescence)ディスプレイ、ウェアラブル・デバイスのディスプレイ等が挙げられる。表示部1007は、コンピュータ1000の外部に設けられても良い。その場合、表示部1007は、例えばディスプレイケーブル等を介してコンピュータ1000に接続される。また、入力I/F部1004としてタッチパネルが採用される場合には、表示部1007は、入力I/F部1004と一体化して構成することが可能である。
【0091】
===まとめ===
<1>本実施形態におけるプログラミング言語変換システム100は、アセンブリ言語で記述される原プログラムを、アセンブリ言語とは異なるプログラミング言語で記述される変換プログラムに変換するプログラミング言語変換システム100であって、原プログラムの記述に対応する元記述項目と、アセンブリ言語における所定個のレジスタのそれぞれに対応する記述であるレジスタ項目Creと、所定個のレジスタのうちの第1のレジスタを用いた変位指定の第1の命令に対してアドレス領域を確保するための記述である第1のリンケージ項目C11と、を含む中間プログラムを生成する生成部130と、中間プログラムを変換プログラムに変換する変換部140と、を備える。これにより、プログラミング言語変換システム100は、レジスタを直接指定する命令がない変換プログラム(例えばCOBOL)について、レジスタの値を参照可能すること、書き換え可能となるように変換できる。
【0092】
<2>また、本実施形態におけるプログラミング言語変換システム100における生成部130は、アセンブリ言語で記述された第1の命令を、所定個のレジスタのそれぞれに対応するレジスタ番号と、レジスタ項目の属性の記述と、アドレスの長さを示す記述と、を含む命令に変換した、中間プログラムを生成する。これにより、プログラミング言語変換システム100は、原プログラムにおけるレジスタ指定を示すオペランドを変換プログラムに適切に変換することができる。
【0093】
<3>また、本実施形態におけるプログラミング言語変換システム100における生成部130は、アセンブリ言語で記述されたダミーセクションの定義項目を含む、所定個のレジスタのうちの第2のレジスタを用いた第2の命令であって、当該第2の命令に対してアドレス領域を確保するための記述である第2のリンケージ項目C12をさらに含む、中間プログラムを生成する。これにより、プログラミング言語変換システム100は、原プログラムにおけるダミーセクションを変換プログラムに適切に変換することができる。
【0094】
<4>また、本実施形態におけるプログラミング言語変換システム100における生成部130は、アセンブリ言語で記述された、所定の処理に対応する絶対的なアドレスが設定されるアドレスコンスタント項目Caを、所定の文字列が付加された、変換プログラムに変換可能な項目に変換した、中間プログラムを生成する。これにより、プログラミング言語変換システム100は、原プログラムにおけるアドレスコンスタント項目Caを変換プログラムに適切に変換することができる。
【0095】
<5>また、本実施形態におけるプログラミング言語変換システム100における生成部130は、アセンブリ言語で記述されたアドレスを加算する第3の命令を、第1のリンケージ項目を用いてレジスタ項目Creに加算する命令に変換した、中間プログラムを生成する。これにより、プログラミング言語変換システム100は、原プログラムにおけるアドレス加算の命令を変換プログラムに適切に変換することができる。
【0096】
なお、本実施形態は、本発明を説明するための例示であり、本発明をその実施の形態のみに限定する趣旨ではない。また、本発明は、その要旨を逸脱しない限り、さまざまな変形が可能である。また、上記実施の形態で記載されたプログラミング言語変換システム100が備える構成要素は、記憶装置1003に格納されたプログラムがプロセッサ1001によって実行されることで、定められた処理が他のハードウェアと協働して実現されるものとする。
【符号の説明】
【0097】
100…プログラミング言語変換システム、110…記憶部、120…取得部、130…生成部、140…変換部、150…識別符号付与部、160…コメント部、170…表示処理部。
【要約】
【課題】アセンブリ言語を他のプログラミング言語に適切に変換可能なシステムを提供することを目的とする。
【解決手段】アセンブリ言語で記述される原プログラムを、アセンブリ言語とは異なるプログラミング言語で記述される変換プログラムに変換するプログラミング言語変換システムであって、前記原プログラムの記述に対応する元記述項目と、アセンブリ言語における所定個のレジスタのそれぞれに対応する記述であるレジスタ項目と、前記所定個のレジスタのうちの第1のレジスタを用いた変位指定の第1の命令に対してアドレス領域を確保するための記述である第1のリンケージ項目と、を含む中間プログラムを生成する生成部と、前記中間プログラムを前記変換プログラムに変換する変換部と、を備える。
【選択図】
図1