(57)【特許請求の範囲】
【請求項１】
ソースプログラム及び前記ソースプログラムのクロスリファレンスから変数の文字列を抽出する抽出手段と、
前記抽出手段により抽出した変数の文字列が、前記ソースプログラム上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更する変更手段と、
前記変更手段により変数の文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換する言語変換手段とを備え、
前記変更手段は、前記ソースプログラム上で予約語と同一の文字列を検索し、その検索文字列が、予約語として使用されておらず、かつ、前記抽出手段により抽出した変数の文字列と同一である場合に、該検索文字列を別の文字列に変更し、
前記言語変換手段は、前記変更手段により検索文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換することを特徴とするソースプログラムの言語変換装置。
【請求項２】
前記言語変換手段により言語変換した後のソースプログラムをコンパイルするコンパイラを備え、
前記コンパイラによるコンパイルの結果、コンパイルエラーが発生した場合に、エラー情報を前記変換後のソースプログラムのクロスリファレンスに記載することを特徴とする請求項１に記載のソースプログラムの言語変換装置。
【請求項３】
抽出手段と、変更手段と、言語変換手段とを備えた言語変換装置におけるソースプログラムの言語変換方法であって、
前記抽出手段が、ソースプログラム及び前記ソースプログラムのクロスリファレンスから変数の文字列を抽出する抽出手順と、
前記変更手段が、前記抽出手順により抽出した変数の文字列が、前記ソースプログラム上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更する変更手順と、
前記言語変換手段が、前記変更手順により変数の文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換する言語変換手順とを有し、
前記変更手順では、前記ソースプログラム上で予約語と同一の文字列を検索し、その検索文字列が、予約語として使用されておらず、かつ、前記抽出手順により抽出した変数の文字列と同一である場合に、該検索文字列を別の文字列に変更し、
前記言語変換手順では、前記変更手順により検索文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換することを特徴とするソースプログラムの言語変換方法。
【請求項４】
ソースプログラム及び前記ソースプログラムのクロスリファレンスから変数の文字列を抽出する抽出処理と、
前記抽出処理により抽出した変数の文字列が、前記ソースプログラム上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更する変更処理と、
前記変更処理により変数の文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換する言語変換処理とをコンピュータに実行させるためのプログラムであって、
前記変更処理では、前記ソースプログラム上で予約語と同一の文字列を検索し、その検索文字列が、予約語として使用されておらず、かつ、前記抽出処理により抽出した変数の文字列と同一である場合に、該検索文字列を別の文字列に変更し、
前記言語変換処理では、前記変更処理により検索文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換することを特徴とする、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースプログラムを言語変換するソースプログラムの言語変換装置、方法及びプログラムに関する。
【背景技術】
【０００２】
ソースプログラムを記述する言語の変換に関する技術として、例えば特許文献１には、ソースプログラムを記述言語の影響を受けない上位レベルのＳＰＤチャートのイメージのデータに変換し、ＳＰＤデータファイルを指定された言語のソースプログラムに変換するプログラムコンバータが開示されている。
【０００３】
また、特許文献２には、第一のプログラム記述言語で記述されたプログラムソースに対してデータおよび作業域の定義部分と、処理の手続き部分と、環境設定部分とに分類し、分類された各部分から予約語とそれを含む構文を抽出し、第二の記述言語で記述された構文に置換するプログラムソース言語変換装置が開示されている。
【０００４】
【特許文献１】特開平５−８１００５号公報
【特許文献２】特開平５−１３４８５３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ソースプログラムを記述する言語の変換に際して、自動変換率を向上させて、手作業によるリコーディング等をできるだけ少なくすることが求められる。
【０００６】
自動変換率を低下させる要因の一つとして、同一の文字列が変数と予約語とに使用されている場合があることが挙げられる。汎用の言語では、宣言文で定義したものを変数として扱うが、宣言しなくても変数として使用できる場合があり、変数が予約語と同一の文字列であってもコンパイル時にエラーとならないことがある。特に大規模なシステムに用いられるプログラム容量の大きなソースプログラムでは、同一の文字列が変数と予約語とに使用されていることが少なくない。
【０００７】
特許文献２では、予約語を抽出する構成は開示されているが、変数と予約語との重複文字列を排除することについては考慮されていない。
【０００８】
本発明は上記のような点に鑑みてなされたものであり、ソースプログラムを記述する言語の自動変換に際して、変数と予約語との重複文字列を排除し、自動変換率を向上させることを目的とする。
【課題を解決するための手段】
【０００９】
本発明のソースプログラムの言語変換装置は、ソースプログラム及び前記ソースプログラムのクロスリファレンスから変数の文字列を抽出する抽出手段と、前記抽出手段により抽出した変数の文字列が、前記ソースプログラム上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更する変更手段と、前記変更手段により変数の文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換する言語変換手段とを備え、前記変更手段は、前記ソースプログラム上で予約語と同一の文字列を検索し、その検索文字列が、予約語として使用されておらず、かつ、前記抽出手段により抽出した変数の文字列と同一である場合に、該検索文字列を別の文字列に変更し、前記言語変換手段は、前記変更手段により検索文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換することを特徴とする。
本発明のソースプログラムの言語変換方法は、抽出手段と、変更手段と、言語変換手段とを備えた言語変換装置におけるソースプログラムの言語変換方法であって、前記抽出手段が、ソースプログラム及び前記ソースプログラムのクロスリファレンスから変数の文字列を抽出する抽出手順と、前記変更手段が、前記抽出手順により抽出した変数の文字列が、前記ソースプログラム上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更する変更手順と、前記言語変換手段が、前記変更手順により変数の文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換する言語変換手順とを有し、前記変更手順では、前記ソースプログラム上で予約語と同一の文字列を検索し、その検索文字列が、予約語として使用されておらず、かつ、前記抽出手順により抽出した変数の文字列と同一である場合に、該検索文字列を別の文字列に変更し、前記言語変換手順では、前記変更手順により検索文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換することを特徴とする。
本発明のプログラムは、ソースプログラム及び前記ソースプログラムのクロスリファレンスから変数の文字列を抽出する抽出処理と、前記抽出処理により抽出した変数の文字列が、前記ソースプログラム上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更する変更処理と、前記変更処理により変数の文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換する言語変換処理とをコンピュータに実行させるためのプログラムであって、前記変更処理では、前記ソースプログラム上で予約語と同一の文字列を検索し、その検索文字列が、予約語として使用されておらず、かつ、前記抽出処理により抽出した変数の文字列と同一である場合に、該検索文字列を別の文字列に変更し、前記言語変換処理では、前記変更処理により検索文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、ソースプログラムを記述する言語の自動変換に際して、変数と予約語との重複文字列を排除することができ、自動変換率を向上させることができる。
【発明を実施するための最良の形態】
【００１１】
以下、添付図面を参照して、本発明の好適な実施形態について説明する。
図１は、本発明の実施形態に係るソースプログラムの言語変換装置の概略構成を示す図である。本実施の形態に係るソースプログラムの言語変換装置は、あるプログラミング言語で記述されたソースプログラム１を、別のプログラミング言語で記述されたソースプログラム６に変換するものである。
【００１２】
１００はコンパイル情報抽出部であり、ソースプログラム１をコンパイル（機械語への一括変換）するコンパイラ１０１を備える。コンパイラ１０１でソースプログラム１をコンパイルすることにより、該ソースプログラム１のクロスリファレンス２が生成される。クロスリファレンスは、プログラム中に出現する各種の変数や定数、記号等に関して、それらを定義しているプログラム中の行番号等を一覧表にしてまとめたものである。図４には、クロスリファレンスの一例として、変数に関して、「ＮＡＭＥ（変数として扱っている文字列）」、「ＳＣＯＰＥ（変数名の有効範囲）」、「ＤＡＴＡ ＴＹＰＥ（データの型）」、「ＡＴＴＲＩＢＵＴＥ（データの属性）」、「ＡＤＤＲＥＳＳ（文字列が記述されているプログラム行番号）」を一覧表にしてまとめたクロスリファレンスを示す。
【００１３】
２００は変数名データ作成部であり、ソースプログラム１、及び、コンパイル情報抽出部１００により生成した該ソースプログラム１のクロスリファレンス２から変数の文字列を抽出し、整合性をチェックする変数名管理部２０１を備える。具体的には、ソースプログラム１及びそのクロスリファレンス２から抽出した変数の文字列が、ソースプログラム１上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更する。そのために、詳しくは後述するが、ソースプログラム１上で予約語と同一の文字列を検索し、その検索文字列が、予約語として使用されておらず、かつ、ソースプログラム１及びそのクロスリファレンス２から抽出した変数の文字列と同一である場合に、該検索文字列を別の文字列に変更する。また、文字列の変更内容を変数名データテーブル３に格納して管理する。
【００１４】
３００は予約語の文法定義４及び変換のルール定義５を構築するための定義構築部である。
【００１５】
予約語の文法定義４は、入力装置３０１を介してなされるオペレータ入力に基づいて、エディタ３０２により構築される。予約語とはプログラム言語において用途が予め定められた文字列のことであり、ｃｈａｒ、ｉｎｔ等のデータ型や、ｉｆ、ｔｈｅｎ等の制御構造を表す文字列がその例である。予約語の文法定義４は、予約語の文法について定義するものであり、変数名データ作成部２００では、予約語の文法定義４に照合して、検索文字列が予約語として使用されているかどうかを判定する。
【００１６】
また、変換のルール定義５は、入力装置３０３を介してなされるオペレータ入力に基づいて、エディタ３０４により構築される。図５には、変換のルール定義の一例を示す。図５に示す変換のルール定義５は、ＦＯＲＴＲＡＮをＣ言語に変換する場合のルールの定義であり、「分類」、「命令」、「説明」、「構文」、「変換前例」、「変換後例」が記述されている。例えばＦＯＲＴＲＡＮでは、「ＲＥＡＬ（予約語）」は変数が実数型変数であることを宣言する型宣言文、「ＩＮＴＥＧＥＲ（予約語）」は変数が整数型変数であることを宣言する型宣言文として使用されるが、Ｃ言語では、それぞれ「ｆｌｏａｔ（予約語）」、「ｉｎｔ（予約語）」が使用される。
【００１７】
４００は言語変換部であり、変数名データ作成部２００により検索文字列を別の文字列に変更したソースプログラム１を、変換のルール定義５に基づいて言語変換し、変換後のソースプログラム６を出力する。
【００１８】
５００はコンパイラであり、言語変換部４００により言語変換した後のソースプログラム６をコンパイルする。コンパイラ５００でソースプログラム６をコンパイルすることにより、該ソースプログラム６のクロスリファレンス７が生成される。このとき、コンパイラ５００によるコンパイルの結果、コンパイルエラーが発生した場合に、エラー情報をクロスリファレンス７に記載する。
【００１９】
次に、図２のフローチャートを参照して、コンパイル情報抽出部１００及び変数名データ作成部２００での処理について説明する。
【００２０】
ステップＳ１で、コンパイル情報抽出部１００は、ソースプログラム１を読み込む。
【００２１】
ステップＳ２で、コンパイル情報抽出部１００は、ソースプログラム１をコンパイルすることにより、該ソースプログラム１のクロスリファレンス２を生成する。
【００２２】
ステップＳ３で、変数名データ作成部２００は、上記ステップＳ２において生成したクロスリファレンス２から、宣言文なしで変数として使用している文字列を抽出する。
【００２３】
ステップＳ４で、変数名データ作成部２００は、ソースプログラム１から、宣言文で変数として定義している文字列と記述箇所を抽出する。
【００２４】
ステップＳ５で、変数名データ作成部２００は、上記ステップＳ３及び上記ステップＳ４において抽出した文字列を変数の文字列として保持する（変数文字列一覧８）。このようにソースプログラム１だけからでなく、該ソースプログラム１のクロスリファレンス２からも変数の文字列を抽出することにより、ソースプログラム１において宣言文で定義している変数以外の変数も抽出でき、変数の文字列を洩れなく抽出することができる。
【００２５】
ステップＳ６で、変数名データ作成部２００は、予約語の文法定義４を読み込む。
【００２６】
ステップＳ７で、変数名データ作成部２００は、ソースプログラム１上で予約語と同一の文字列で記述されている箇所を先頭から順次検索する。
【００２７】
上記ステップＳ７において予約語と同一の文字列が検索されると（以下、検索文字列「ｘｘｘ」と記す）、ステップＳ８に進み、予約語の文法定義４に照合して、その検索文字列「ｘｘｘ」が予約語として使用されているかどうかを判定する。その結果、検索文字列「ｘｘｘ」が予約語として使用されていれば、ステップＳ１２に進み、ソースプログラム１全体について検索が終了しているかどうかを判定し、終了していなければ、ステップＳ７に戻る。
【００２８】
上記ステップＳ８において検索文字列「ｘｘｘ」が予約語として使用されていなければ、ステップＳ９に進み、その検索文字列「ｘｘｘ」が変数文字列一覧８にあるかどうか、すなわち、変数の文字列として使用されているかどうかを判定する。その結果、検索文字列「ｘｘｘ」が変数文字列一覧８になければ（すなわち、変数の文字列として使用されていなければ）、ステップＳ１１に進み、エラー処理を実行する。エラー処理では、検索文字列「ｘｘｘ」が予約語としても変数としても使用されていないとして、ロギングしてファイルに出力する。その後、ステップＳ１２に進み、ソースプログラム１全体について検索が終了しているかどうかを判定し、終了していなければ、ステップＳ７に戻る。
【００２９】
上記ステップＳ９において検索文字列「ｘｘｘ」が変数文字列一覧８にあれば（すなわち、変数の文字列として使用されていれば）、ステップＳ１０に進み、ソースプログラム１上で検索文字列「ｘｘｘ」を別の文字列に変更するとともに、その変更内容を変数名データテーブル３に格納して管理する。検索文字列「ｘｘｘ」を別の文字列に変換する例としては、検索文字列「ｘｘｘ」に所定の文字列を付記する等すればよい。その後、ステップＳ１２に進み、ソースプログラム１全体について検索が終了しているかどうかを判定し、終了していなければ、ステップＳ７に戻る。
【００３０】
次に、図３のフローチャートを参照して、言語変換部４００及びコンパイラ５００での処理について説明する。
【００３１】
ステップＳ５１で、言語変換部４００は、ソースプログラム１を読み込む。このソースプログラム１は、コンパイル情報抽出部１００及び変数名データ作成部２００での処理により、ソースプログラム１上で予約語と同一の文字列を検索し、その検索文字列が、予約語として使用されておらず、かつ、ソースプログラム１及びそのクロスリファレンス２から抽出した変数の文字列と同一である場合に、該検索文字列を別の文字列に変更したものである（図２のフローチャートを参照）。
【００３２】
また、ステップＳ５２で、予約語の文法定義４を読み込み、ステップＳ５３で、変換のルール定義５を読み込む。
【００３３】
ステップＳ５４で、言語変換部４００は、ソースプログラム１の各行（構文単位）の記述を変換のルール定義５に照合し、ステップＳ５５で、変換のルールに合致するかどうかを判定する。
【００３４】
言語変換部４００は、変換のルールに合致する行の記述については、その行の記述を変換のルール定義４に従って置き換える（ステップＳ５６）。また、変換のルールに合致しない行の記述については、変換せずに、そのままの記述とする。
【００３５】
ステップＳ５７で、言語変換部４００は、上記ステップＳ５６において置き換えた行の記述及び変換のルールに合致せずにそのままとされた行の記述を順次繋ぎ合わせて、変換後のソースプログラム６を生成する。
【００３６】
ステップＳ５８で、言語変換部４００は、変換後のソースプログラム６を出力する。
【００３７】
ステップＳ５９で、コンパイラ５００は、変換後のソースプログラム６をコンパイルすることにより、該ソースプログラム６のクロスリファレンス７を生成する。コンパイルの結果、コンパイルエラーが発生した場合に、ステップＳ６０で、エラー情報をクロスリファレンス７に記載する。
【００３８】
以上述べたように、ソースプログラム１及びそのクロスリファレンス２から抽出した変数の文字列が、ソースプログラム１上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更するようにしたので、ソースプログラム１を記述する言語の自動変換に際して、変数と予約語との重複文字列を排除することができ、自動変換率を向上させることができる。
【００３９】
なお、上記実施形態では、ソースプログラム１上で予約語と同一の文字列「ｘｘｘ」を検索し、その検索文字列「ｘｘｘ」が、予約語として使用されておらず、かつ、前記抽出手段により抽出した変数の文字列と同一である場合に、該検索文字列「ｘｘｘ」を別の文字列に変更する例を説明したが（図２のステップＳ７〜Ｓ１０）、それに限定されるものではない。例えばソースプログラム１上で変数文字列一覧８にある文字列（すなわち、ソースプログラム１及びそのクロスリファレンス２から抽出した変数の文字列）「ｙｙｙ」を検索し、その検索文字列「ｙｙｙ」が、ソースプログラム１上の予約語と同一の文字列である場合に、該検索文字列「ｙｙｙ」を別の文字列に変更するようにしてもよい。
【００４０】
本発明を適用したソースプログラムの言語変換装置は、具体的にはＣＰＵ、各種メモリを備えたコンピュータ装置により実現可能であり、一つの機器により構成されてもよいし、複数の機器により構成されてもよい。
【００４１】
また、本発明の目的は、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給することによっても達成される。この場合、そのシステム或いは装置のコンピュータ（又はＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出し実行する。
【００４２】
この場合、記憶媒体から読み出されたプログラムコード自体が上述した実施形態の機能を実現することになり、プログラムコード自体及びそのプログラムコードを記憶した記憶媒体は本発明を構成することになる。プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【図面の簡単な説明】
【００４３】
【図１】本発明の実施形態に係るソースプログラムの言語変換装置の概略構成を示す図である。
【図２】コンパイル情報抽出部及び変数名データ作成部での処理を示すフローチャートである。
【図３】言語変換部及びコンパイラでの処理を示すフローチャートである。
【図４】クロスリファレンスの一例を示す図である。
【図５】変換のルール定義の一例を示す図である。
【符号の説明】
【００４４】
１        変換前のソースプログラム
２        クロスリファレンス
３        変数名データテーブル
４        予約語の文法定義
５        変換のルール定義
６        変換後のソースプログラム
７        クロスリファレンス
８        変数文字列一覧
１００    コンパイル情報抽出部
１０１    コンパイラ
２００    変数名データ作成部
２０１    変数名管理部
３００    定義構築部
３０１    入力装置
３０２    エディタ
３０３    入力装置
３０４    エディタ
４００    言語変換部
５００    コンパイラ
【図１】
0005181788.tif 000002
【図２】
0005181788.tif 000003
【図３】
0005181788.tif 000004
【図４】
0005181788.tif 000005
【図５】
0005181788.tif 000006