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

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

▶ 株式会社エクサの特許一覧

<>
  • 特許6496640-COBOLソースコード変換プログラム 図000002
  • 特許6496640-COBOLソースコード変換プログラム 図000003
  • 特許6496640-COBOLソースコード変換プログラム 図000004
  • 特許6496640-COBOLソースコード変換プログラム 図000005
  • 特許6496640-COBOLソースコード変換プログラム 図000006
  • 特許6496640-COBOLソースコード変換プログラム 図000007
  • 特許6496640-COBOLソースコード変換プログラム 図000008
  • 特許6496640-COBOLソースコード変換プログラム 図000009
  • 特許6496640-COBOLソースコード変換プログラム 図000010
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6496640
(24)【登録日】2019年3月15日
(45)【発行日】2019年4月3日
(54)【発明の名称】COBOLソースコード変換プログラム
(51)【国際特許分類】
   G06F 8/51 20180101AFI20190325BHJP
   G06F 8/70 20180101ALI20190325BHJP
【FI】
   G06F8/51
   G06F8/70
【請求項の数】4
【全頁数】13
(21)【出願番号】特願2015-180561(P2015-180561)
(22)【出願日】2015年9月14日
(65)【公開番号】特開2017-58733(P2017-58733A)
(43)【公開日】2017年3月23日
【審査請求日】2018年4月2日
(73)【特許権者】
【識別番号】591057256
【氏名又は名称】株式会社エクサ
(74)【代理人】
【識別番号】100091096
【弁理士】
【氏名又は名称】平木 祐輔
(74)【代理人】
【識別番号】100102576
【弁理士】
【氏名又は名称】渡辺 敏章
(74)【代理人】
【識別番号】100153903
【弁理士】
【氏名又は名称】吉川 明
(72)【発明者】
【氏名】大城 和真
【審査官】 北元 健太
(56)【参考文献】
【文献】 特開平3−288226(JP,A)
【文献】 特開2013−117803(JP,A)
【文献】 特開2008−90439(JP,A)
【文献】 特開平7−234790(JP,A)
【文献】 特開2004−157688(JP,A)
【文献】 欧州特許出願公開第1248189(EP,A1)
【文献】 COBOL G 文法書,富士通株式会社,1990年10月,初版,pp.130−132
【文献】 志村康人,Visual Basicで作るマクロ言語,トライ・ピーシー,日本,CQ出版株式会社,1998年 2月 1日,1998年春号,pp.148−153
【文献】 細島一司,開発現場で役立つCOBOLプログラミング入門,株式会社秀和システム,2008年 8月 1日,第1版,pp.51−56
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/00 − 8/77
G06F 9/44 − 9/455
G06F 11/28 − 11/36
(57)【特許請求の範囲】
【請求項1】
条件文におけるEND−IF文とCONTINUE文をサポートしていない旧バージョンのCOBOL言語によって記述された変換前ソースコードを、条件文におけるEND−IF文とCONTINUE文をサポートする新バージョンのCOBOL言語によって記述された変換後ソースコードへ変換する処理を、コンピュータに実行させるCOBOLソースコード変換プログラムであって、前記コンピュータに、
前記変換前ソースコードを記憶装置から読み取る読取ステップ、
前記変換前ソースコードが記述している処理のうち、IF文とELSE文によって構成された条件分岐処理であってNEXT SENTENCE文によってその条件分岐が終端しているものを特定する第1特定ステップ、
前記変換前ソースコードが記述している処理のうち、IF文とELSE文によって構成された条件分岐処理であってピリオドによってその条件分岐が終端しているものを特定する第2特定ステップ、
前記第1特定ステップにおいて特定した条件分岐の終了箇所にEND−IF文を挿入する第1挿入ステップ、
前記第2特定ステップにおいて特定した条件分岐の終了箇所にEND−IF文を挿入する第2挿入ステップ、
を実行させ
前記読取ステップにおいては、前記コンピュータに、前記変換前ソースコードを1文ずつ読み取るステップを実行させ、
前記COBOLソースコード変換プログラムはさらに、前記コンピュータに、
前記読取ステップにおいて読み取った前記変換前ソースコードの文がIF文である場合はその旨を示すIF文識別子を前記コンピュータ上に構築したスタック領域の先頭にプッシュし、ELSE文である場合はその旨を示すELSE文識別子を前記スタック領域の先頭にプッシュするステップを実行させ、
前記第1特定ステップにおいては、前記コンピュータに、
前記読取ステップにおいて読み取った前記変換前ソースコードの文がELSE文であり、かつ前記スタック領域の先頭に前記ELSE文識別子が格納されている場合は、そのELSE文識別子が表すELSE文の後に条件分岐が閉じられている箇所が存在するものと判定するステップを実行させる
ことを特徴とするCOBOLソースコード変換プログラム。
【請求項2】
前記第1挿入ステップにおいては、前記コンピュータに、
前記スタック領域の先頭から前記ELSE文識別子と前記IF文識別子のペアを削除する処理を、前記スタック領域の先頭が前記ELSE文識別子でなくなるまで繰り返すとともに、その繰り返し回数だけEND−IF文を挿入するステップを実行させ、
前記第2挿入ステップにおいては、前記コンピュータに、
前記スタック領域の先頭から前記ELSE文識別子と前記IF文識別子のペアを削除する処理を、前記スタック領域の先頭が前記ELSE文識別子でなくなるまで繰り返すとともに、その繰り返し回数だけEND−IF文を挿入するステップを実行させる
ことを特徴とする請求項記載のCOBOLソースコード変換プログラム。
【請求項3】
前記COBOLソースコード変換プログラムはさらに、前記コンピュータに、
前記変換前ソースコード内のNEXT SENTENCE文をCONTINUE文に変換する変換ステップを実行させる
ことを特徴とする請求項1記載のCOBOLソースコード変換プログラム。
【請求項4】
前記COBOLソースコード変換プログラムはさらに、前記コンピュータに、
前記第1挿入ステップおよび前記第2挿入ステップにおいて挿入したEND−IF文の前記変換後ソースコード上における行頭からのインデントをIF文のネスト深さに応じて調整するステップを実行させる
ことを特徴とする請求項1記載のCOBOLソースコード変換プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、COBOL言語によって記述されたソースコードを変換する技術に関する。
【背景技術】
【0002】
COBOL言語は、近年におけるオープンコンピューティング環境が登場する前から長年にわたって用いられているプログラム言語である。プログラムソースコードの品質検査はソフトウェアの品質管理における重要な要素であり、COBOL言語によって記述されたソースコードも同様である。
【0003】
目視確認によるソースコードの品質検査は、検査精度と負担の両面において課題があるので、一般的には自動チェック技術が用いられている。しかしCOBOL言語によって記述されたソースコードについては、そのような自動チェック技術が他言語と比較するとあまり用いられていない傾向がある。下記特許文献1は、かかる状況に鑑みて、COBOLソースコードを自動チェックする技術を開示している。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2011−164954号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
COBOL言語は、言語仕様のバージョンアップにともなって命令文の構成がこれまで変更されてきた経緯がある。比較的バージョンの新しいCOBOL言語においては、条件文(IF文)は明示範囲符(END−IF文)とCONTINUE文によってその範囲が指定される。しかしバージョンが古いCOBOL言語の言語仕様は、これら2つの文をサポートしていない。したがって、例えばプログラムを実行するプラットフォームを移行する際に、旧バージョンのCOBOL言語によって記述された変換前ソースコードを新バージョンのCOBOL言語によって記述された変換後ソースコードへ変換する場合がある。この変換は一般に、プログラマがマニュアル作業によって実施している。
【0006】
上記のような古いバージョンのCOBOL言語においては、条件文の分岐や終端を明示的に示す命令が存在していないので、代替的な命令文を用いて同様の処理を実現している場合がある。そうすると、特に条件文のネストが深くなるほど条件文の範囲を判定し難くなり可読性が低下するので、マニュアル作業による変換作業の効率や変換精度の観点から課題がある。
【0007】
上記特許文献1記載の技術は、COBOLソースコードの書式をチェックすることはできるものの、新旧バージョン間の変換については開示しておらず、したがってかかる変換を効率的かつ精度よく実施することができる技術が求められている。
【0008】
本発明は、上記のような課題に鑑みてなされたものであり、旧仕様のCOBOL言語によって記述されたソースコードを新仕様のCOBOL言語によって記述されたソースコードへ自動的に変換する技術を提供することを目的とする。
【課題を解決するための手段】
【0009】
本発明に係るCOBOLソースコード変換プログラムは、旧仕様のCOBOL言語によって記述されたソースコードにおいて条件文の終端を示すため代替的に用いられている命令を特定し、その箇所にEND−IF文を挿入する。
【発明の効果】
【0010】
本発明に係るCOBOLソースコード変換プログラムによれば、条件文におけるEND−IF文とCONTINUE文をサポートしていない旧バージョンのCOBOL言語によって記述された変換前ソースコードを、これらをサポートする新バージョンのCOBOL言語によって記述された変換後ソースコードへ自動変換することができる。
【図面の簡単な説明】
【0011】
図1】実施形態1に係るCOBOLソースコード変換プログラム120を実行するコンピュータ100およびその周辺構成を示す図である。
図2】変換前ソースコード310と変換後ソースコード320との間の言語仕様の違いを例示するサンプルソースコードである。
図3】2分ヒープ210の例を示す図である。
図4】COBOLソースコード変換プログラム120が変換前ソースコード310の構文構造を解析する手順を説明する図である。
図5】実施形態2に係るCOBOLソースコード変換プログラム120を実行するコンピュータ100およびその周辺構成を示す図である。
図6】スタック220の例を示す図である。
図7】COBOLソースコード変換プログラム120が変換前ソースコード310の構文構造を解析する手順を説明する図である。
図8】実施形態2におけるCOBOLソースコード変換プログラム120の動作を説明するアルゴリズムの例である。
図9】実施形態3に係るCOBOLソースコード変換プログラム120の動作を説明する図である。
【発明を実施するための形態】
【0012】
<実施の形態1>
図1は、本発明の実施形態1に係るCOBOLソースコード変換プログラム120を実行するコンピュータ100およびその周辺構成を示す図である。コンピュータ100は、CPU(Central Processing Unit)110、COBOLソースコード変換プログラム120、記憶装置200を備える。
【0013】
COBOLソースコード変換プログラム120は、変換前ソースコード310を変換後ソースコード320へ変換する処理を実装したプログラムである。COBOLソースコード変換プログラム120、変換前ソースコード310、および変換後ソースコード320は、記憶装置200に格納することもできるしその他適当な記憶装置に格納することもできる。
【0014】
CPU110は、COBOLソースコード変換プログラム120を実行する演算装置である。以下では記載の便宜上、COBOLソースコード変換プログラム120を動作主体として説明する場合があるが、実際にこれを実行するのはCPU110であることを付言しておく。
【0015】
記憶装置200は、例えばハードディスク装置やメモリ装置などのデバイスであり、COBOLソースコード変換プログラム120が構築する2分ヒープ210を格納する。2分ヒープ210の詳細については後述する。
【0016】
変換前ソースコード310は、旧バージョンのCOBOL言語によって記述されたソースコードである。ここでいう旧バージョンのCOBOL言語とは、条件文におけるEND−IF文とCONTINUE文をサポートしていない言語仕様を有するCOBOL言語である。したがって変換前ソースコード310は、特に条件文のネストが深くなった場合においてその条件文の分岐や終端を目視確認することが困難であり、上述の課題を有している。
【0017】
変換後ソースコード320は、新バージョンのCOBOL言語によって記述されたソースコードである。ここでいう新バージョンのCOBOL言語とは、条件文におけるEND−IF文とCONTINUE文をサポートしている言語仕様を有するCOBOL言語である。
【0018】
<実施の形態1:新旧バージョンの違いについて>
図2は、変換前ソースコード310と変換後ソースコード320との間の言語仕様の違いを例示するサンプルソースコードである。見易さを考慮して、変換した部分に網掛けを付与するとともに、IF条件文の範囲を示す符号を付与しているが、実際のソースコードにおいてこれらは存在していないことを付言しておく。以下に説明するソースコードも同様である。
【0019】
変換前ソースコード310と変換後ソースコード320は、COBOL言語のバージョンの違いに起因して、条件文の記述方式について以下の違いがある。
【0020】
変換後ソースコード320においては、CONTINUE文(次の実行可能な文に進む命令)がサポートされているので、条件文内における制御を次の文に進めたい場合はCONTINUE文を記述すればよい。また変換後ソースコード320においては、END−IF文(条件文における明示範囲符)がサポートされているので、IF文とELSE文のペアによって記述される条件文の終端においてEND−IF文を記述することにより、当該条件文の終端を明示的に示すことができる。これにより条件文の範囲を容易に把握することができるので、例えばソースコードを目視確認する際に便宜である。
【0021】
これに対し変換前ソースコード310においては、CONTINUE文とEND−IF文がサポートされていない。そこで変換前ソースコード310においては、これらの代わりにNEXT SENTENCE文とピリオド(終端符)を用いて、条件文の分岐や範囲を制御している。したがって、特に条件文のネストが深くなった場合において、各条件文の範囲などが一見すると判別し難い課題がある。
【0022】
そこでCOBOLソースコード変換プログラム120は、変換前ソースコード310が記述している条件文の終端部分に対してEND−IF文を自動挿入するとともに、NEXT SENTENCE文(またはNEXT SENTENCE文+ピリオド)をCONTINUE文へ変換する。これにより、条件文の分岐や範囲を明確にすることを図る。
【0023】
<実施の形態1:2分ヒープ210について>
COBOLソースコード変換プログラム120が変換前ソースコード310を変換するに際して、変換前ソースコード310のIF条件文の構文構造を把握し、これを何らかのデータ形式によってコンピュータ100上で表現する必要がある。そこでCOBOLソースコード変換プログラム120は、以下に説明する原理にしたがって、変換前ソースコード310の構文構造を表した2分ヒープ210を作成する。
【0024】
COBOL言語におけるIF条件文は、1つのIF文に対してその条件が成立する場合の処理と成立しない場合の処理のペアにより構成される。すなわち、必ず「IF(条件)・・・ELSE・・・END−IF」という構文構造となる。これに対し他のプログラム言語のIF条件文は、例えば「IF(条件1)・・・ELSE IF(条件2)・・・ELSE・・・」などのように、1つのIF文に対して複数の分岐先が含まれる場合がある。
【0025】
COBOL言語におけるIF条件文の上記特徴を利用すると、変換前ソースコード310のIF条件文の構文構造は、2分ヒープ(2分ツリー構造の一種)によって表すことができる。そこでCOBOLソースコード変換プログラム120は、変換前ソースコード310のIF条件文の構文構造を記述した2分ヒープ210を作成し、これを用いて変換を実施する。
【0026】
COBOLソースコード変換プログラム120は、以下のルールにしたがって2分ヒープ210を作成する。
(ルール1)IF文を記述しているソースコード行は、2分ヒープ210の根ノードまたは親ノードとして表す。
(ルール2)親ノードが表すIF条件が成立した場合の処理を記述しているソースコード行は、当該親ノードの左側子ノードとして表す。同条件が成立しなかった場合の処理を記述しているソースコード行は、当該親ノードの右側子ノードとして表す。
(ルール3)条件文以外の処理は、葉ノードとして表す。
【0027】
図3は、2分ヒープ210の例を示す図である。ここではまず2分ヒープ210とCOBOLソースコードとの間の対応関係を説明するため、図2で例示した変換後ソースコード320を2分ヒープによって表した例を示した。また両者の対応関係を示すため、変換後ソースコード320の各行に行番号を付与するとともに、対応する2分ヒープ210のノードに対して同じ番号を付与した。なお本明細書においては記載の簡易のため1文が複数行にまたがって記述されている場合を考慮していないが、その場合はそれら複数行をまとめて1つの行として取り扱えばよい。
【0028】
変換後ソースコード320の1行目〜3行目は、条件1が成立した上でさらに条件2が成立した場合の処理なので、2分ヒープ210においては根ノードから左側子ノードに向かって2回進むことになる。3行目の処理は葉ノードによって表されている。4行目のELSE文は2行目のIF文に対応する親ノードそのものによって表されているので、2分ヒープ210上では必要ない。
【0029】
6行目の条件4が成立した場合は7行目の処理を実行し、成立しなかった場合は9行目の処理を実行する。条件4のIF文はこれらによって完結しているので、9行目に対応する右側子ノードは葉ノードとなり、その配下にはノードが存在していない。したがって、右側子ノードが葉ノードである場合、その箇所においてIF条件文が完結している(すなわちEND−IF文が配置されている)とみなすことができる。同様に、5行目の条件3が成立した場合は6行目〜10行目を実行し、成立しなかった場合は12行目の処理を実行し、条件3のIF文はこれらによって完結している。したがって12行目に対応する右側子ノードは葉ノードである。
【0030】
1行目のIF文は、17行目のピリオドによって終端されている。したがって16行目の右側子ノードも葉ノードとなり、その箇所においてIF条件文が完結している(すなわちEND−IF文が配置されている)とみなすことができる。この葉ノードは、2分ヒープ210の右端ノードとなっている。
【0031】
<実施の形態1:変換前ソースコード310の解析>
図4は、COBOLソースコード変換プログラム120が変換前ソースコード310の構文構造を解析する手順を説明する図である。ここでは図2で例示した変換前ソースコード310を2分ヒープによって表した例を示した。また変換後ソースコード320との間の対応関係を示すため、対応するソースコード行に対して変換後ソースコード320と同じ行番号を付与した。
【0032】
変換前ソースコード310と変換後ソースコード320は同じ条件文の構文構造を有しているので、これらを2分ヒープ210として表した結果は同一である。ただし変換前ソースコード310はEND−IF文を有していないので、IF条件文の終結箇所についてはこれを用いずに判定する必要がある。例えばELSE文の後の処理が完了すると、そのELSE文に対応するIF文が終結したとみなすことができる。
【0033】
COBOLソースコード変換プログラム120は、変換前ソースコード310内のNEXT SENTENCE文またはNEXT SENTENCE文+ピリオドを、CONTINUE文に変換する。この変換は単純な文字列置換によって実施することができるのでここでは格別説明しない。
【0034】
COBOLソースコード変換プログラム120はさらに、変換前ソースコード310内のIF条件文の範囲を明示するため、END−IF文を挿入する。以下、図4を参照しつつその手順について説明する。
【0035】
変換前ソースコード310の9行目の処理が終わると、6行目から開始するIF条件文が終結する。その後、プログラムの実行箇所は5行目のIF条件文のELSE文(すなわち11〜12行目)に移る。変換後ソースコード320においてはこの過程でEND−IF文が10行目に配置されているので、6行目から開始するIF条件文の終結箇所を目視確認し易い。COBOLソースコード変換プログラム120は、このようにIF条件文が終結している箇所に対してEND−IF文を挿入する。
【0036】
9行目から11行目(および12行目)へ至る経路は、2分ヒープ210上においては、右側子ノードである9行目から、1つ上の親ノードである5行目を経由して、その右側子ノードである12行目へ実行箇所を移すことに相当する。このように右側子ノードの次に別の右側子ノードを実行する箇所は、変換前ソースコード310上においてはIF条件文のELSE文が終結して1つ上のIF条件文のELSE文へ進む箇所であるとみなすことができる。したがってCOBOLソースコード変換プログラムは、経由した親ノードに対応するIF条件文の終結を明示するため、2分ヒープ210上のかかる箇所に対応する変換前ソースコード310上の位置に対して、END−IF文を挿入する。この例においては、9行目から11行目(および12行目)へ進む前にEND−IF文を挿入することになる。
【0037】
12行目から15行目(および16行目)へ至る経路は、2分ヒープ210上においては、右側子ノードである12行目から、2つ上の親ノードである1行目を経由して、その右側子ノードである16行目へ実行箇所を移すことに相当する。この場合も右側子ノードの次に別の右側子ノードを実行することになる。ただし2つ上の親ノードを経由しているということは、その過程において2つのIF条件文が終結していることになるので、COBOLソースコード変換プログラムは12行目から15行目へ至る間に2つのEND−IF文を挿入する。
【0038】
すなわちCOBOLソースコード変換プログラム120は、2分ヒープ210上における右側子ノードの次に別の右側子ノードを実行する場合は、経由する親ノードの個数と同数のEND−IF文を、それら右側子ノードの間に対応するソースコード上の位置に対して挿入する。
【0039】
16行目のNEXT SENTENCE文は、ピリオドによって終端されているので、1行目のIF条件文が終結していることになる。2分ヒープ210上においては、16行目に対応する右側子ノードが右端ノードとなっている。COBOLソースコード変換プログラム120は、2分ヒープ210上で右端ノードに到達した場合も、その後にEND−IF文を挿入する。
【0040】
COBOLソースコード変換プログラム120は、以上の手順にしたがって2分ヒープ210の各ノードを走査することにより、変換前ソースコード310に対してEND−IF文を挿入すべき個所とその個数を判定することができる。
【0041】
<実施の形態2>
実施形態1で説明した2分ヒープ210と等価な構造は、プログラム処理上においては様々なデータ形式によって表すことができる。本発明の実施形態2では、スタック(Last−In First−Outのデータ構造)を用いてIF条件文の構文構造を表す処理例について説明する。
【0042】
図5は、本実施形態2に係るCOBOLソースコード変換プログラム120を実行するコンピュータ100およびその周辺構成を示す図である。コンピュータ100は、実施形態1で説明した2分ヒープ210と等価なデータ構造を格納するスタック220を記憶領域上に保持する。その他の構成は実施形態1と同様であるため、以下ではスタック220を用いて2分ヒープ210と等価な構文解析を実施する手順について主に説明する。
【0043】
<実施の形態2:スタック220について>
COBOLソースコード変換プログラム120は、COBOLソースコードを1行ずつ(すなわち1文ずつ)読み込み、以下のルールにしたがってスタック220を作成する。
(ルール1)読み込んだ文がIF文である場合は、スタック220の先頭にその旨を示す値(以下ではIF文識別子と呼ぶ)をプッシュする。
(ルール2)読み込んだ文がELSE文である場合は、スタック220の先頭にその旨を示す値(以下ではELSE文識別子と呼ぶ)をプッシュする。
(ルール3)IF条件文が終結した場合は、スタック220の先頭からELSE文識別子とIF文識別子のペアを削除する。
【0044】
図6は、スタック220の例を示す図である。ここではまずスタック220とCOBOLソースコードとの間の対応関係を説明するため、図2で例示した変換後ソースコード320をスタック220によって表した例を示した。また両者の対応関係を示すため、変換後ソースコード320の各行に行番号を付与するとともに、スタック220の要素の経時変化に対して同じ番号を付与した。
【0045】
変換後ソースコード320の1行目〜2行目は、IF条件文が記述されているので、スタック220の先頭に対してそれぞれIF文識別子を格納する。3行目はIF文でもなくELSE文でもないので、スタック220はそのままである。4行目はELSE文が記述されているので、スタック220の先頭に対してELSE文識別子を格納する。
【0046】
変換後ソースコード320の10行目においてEND−IF文により6行目のIF条件文が終結しているので、スタック220の先頭から順にELSE文識別子とIF文識別子を削除する。13行目〜14行目についても同様である。ELSE文識別子とIF文識別子を削除することは、これらが表すIF条件文が終結したことに対応するものである。
【0047】
変換後ソースコード320の17行目においてピリオドにより1行目のIF条件文が終結しているので、スタック220の先頭から順にELSE文識別子とIF文識別子を削除する。
【0048】
以上の手順により、IF文識別子とELSE文識別子のペアは、スタック220に対して格納されたのと同数が必ず削除され、最終的にスタック220の要素は空になる。COBOLソースコード変換プログラム120は、図6に示す手順により、COBOLソースコードのIF条件文の構文構造を解析することができる。
【0049】
<実施の形態2:変換前ソースコード310の解析>
図7は、COBOLソースコード変換プログラム120が変換前ソースコード310の構文構造を解析する手順を説明する図である。ここでは図2で例示した変換前ソースコード310をスタック220によって表した例を示した。また変換後ソースコード320との間の対応関係を示すため、対応するソースコード行に対して変換後ソースコード320と同じ行番号を付与した。
【0050】
変換前ソースコード310と変換後ソースコード320は同じ条件文の構文構造を有しているので、これらをスタック220として表した結果は同一である。ただし見易さを考慮して、IF条件文の番号をスタック220内の各要素の括弧書きによって示している。例えばELSE(2)は、条件2のIF文に対応するELSE文である。
【0051】
COBOLソースコード変換プログラム120は、先に説明したルール1とルール2にしたがってスタック220内にIF文識別子とELSE文識別子を格納する。ただし変換前ソースコード310はEND−IF文を有していないので、ルール3におけるIF条件文が終結したか否かを判定する際に、以下の手順を用いる。
【0052】
COBOLソースコード変換プログラム120が変換前ソースコード310の11行目を読み込んだ時点において、スタック220の先頭には8行目のELSE文識別子(すなわちELSE(4))が格納されている。スタック220の先頭にELSE文識別子が格納されている状態において、変換前ソースコード310からさらにELSE文を読み込んだ場合、スタック220先頭のELSE文識別子に対応するIF条件文は終結し、実行箇所はその1つ上のIF条件文に移行したとみなすことができる。そこでCOBOLソースコード変換プログラム120は、変換前ソースコード310から読み込んだ1文がELSE文であり、かつスタック220の先頭がELSE文識別子である場合は、読み込んだ1文の前にEND−IF文を挿入する。ここでは10行目にEND−IF文を挿入することになる。COBOLソースコード変換プログラム120はさらに、スタック220の先頭からELSE文識別子とIF文識別子のペアを削除する。
【0053】
COBOLソースコード変換プログラム120が変換前ソースコード310の15行目を読み込んだ時点において、スタック220の先頭にはELSE文識別子が格納されているので、COBOLソースコード変換プログラム120はEND−IF文を挿入するとともにスタック220の先頭からELSE文識別子とIF文識別子のペア(すなわちELSE(3)とIF(3))を削除する。その上でスタック220の先頭にはなおELSE文識別子(すなわちELSE(2))が格納されているので、COBOLソースコード変換プログラム120はさらにEND−IF文を挿入するとともにスタック220の先頭からELSE文識別子とIF文識別子のペア(すなわちELSE(2)とIF(2))を削除する。
【0054】
すなわちCOBOLソースコード変換プログラム120は、スタック220の先頭から削除したELSE文識別子とIF文識別子のペアと同数のEND−IF文を、変換前ソースコード310に対して挿入する。
【0055】
変換前ソースコード310の16行目はピリオドによって終端されている。COBOLソースコード変換プログラム120はこの場合もEND−IF文を挿入するとともにスタック220の先頭からELSE文識別子とIF文識別子のペア(すなわちELSE(1)とIF(1))を削除する。
【0056】
COBOLソースコード変換プログラム120は、以上の手順にしたがってスタック220を作成することにより、変換前ソースコード310に対してEND−IF文を挿入すべき個所とその個数を判定することができる。
【0057】
図8は、本実施形態2におけるCOBOLソースコード変換プログラム120の動作を説明するアルゴリズムの例である。ここではプログラム言語に依拠しない疑似言語によってアルゴリズムを例示した。なお図8における「ポップデータ」とは、スタック220の先頭に格納されている値のことである。
【0058】
符号810の部分は、変換前ソースコード310の11行目や15行目を読み込んだ場合の処理に相当する。符号820の部分は、変換前ソースコード310の16行目を読み込んだ場合の処理に相当する。
【0059】
<実施の形態3>
図9は、本発明の実施形態3に係るCOBOLソースコード変換プログラム120の動作を説明する図である。以上の実施形態において、COBOLソースコード変換プログラム120がEND−IF文を単純に挿入した場合、図9左図に示すように、行の先頭から開始するEND−IF文が追加されることになる。かかるソースコードは視認性が悪いので好ましくない。
【0060】
そこでCOBOLソースコード変換プログラム120は、得られた変換後ソースコード320を改めて走査することによりIF条件文のネスト深さを解析し、各END−IF文のネスト深さに応じて適当なインデントを行頭に追加する。これにより図9右図のように視認性のよいソースコードが得られる。
【符号の説明】
【0061】
100:コンピュータ、110:CPU、120:COBOLソースコード変換プログラム、200:記憶装置、210:2分ヒープ、220:スタック、310:変換前ソースコード、320:変換後ソースコード。
図1
図2
図3
図4
図5
図6
図7
図8
図9