説明

ソースプログラムの言語変換装置、方法及びプログラム

【課題】変数と予約語との重複文字列を排除し、自動変換率を向上させる。
【解決手段】変数名データ作成部200では、ソースプログラム1及びソースプログラム1のクロスリファレンス2から変数の文字列を抽出する。そして、ソースプログラム1上で予約語と同一の文字列を検索し、その検索文字列が、予約語として使用されておらず、かつ、ソースプログラム1及びそのクロスリファレンス2から抽出した変数の文字列と同一である場合に、該検索文字列を別の文字列に変更する。言語置換部400では、検索文字列を別の文字列に変更したソースプログラム1を、予め構築された変換のルール定義5に基づいて言語変換し、変換後のソースプログラム6を出力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソースプログラムを言語変換するソースプログラムの言語変換装置、方法及びプログラムに関する。
【背景技術】
【0002】
ソースプログラムを記述する言語の変換に関する技術として、例えば特許文献1には、ソースプログラムを記述言語の影響を受けない上位レベルのSPDチャートのイメージのデータに変換し、SPDデータファイルを指定された言語のソースプログラムに変換するプログラムコンバータが開示されている。
【0003】
また、特許文献2には、第一のプログラム記述言語で記述されたプログラムソースに対してデータおよび作業域の定義部分と、処理の手続き部分と、環境設定部分とに分類し、分類された各部分から予約語とそれを含む構文を抽出し、第二の記述言語で記述された構文に置換するプログラムソース言語変換装置が開示されている。
【0004】
【特許文献1】特開平5−81005号公報
【特許文献2】特開平5−134853号公報
【発明の開示】
【発明が解決しようとする課題】
【0005】
ソースプログラムを記述する言語の変換に際して、自動変換率を向上させて、手作業によるリコーディング等をできるだけ少なくすることが求められる。
【0006】
自動変換率を低下させる要因の一つとして、同一の文字列が変数と予約語とに使用されている場合があることが挙げられる。汎用の言語では、宣言文で定義したものを変数として扱うが、宣言しなくても変数として使用できる場合があり、変数が予約語と同一の文字列であってもコンパイル時にエラーとならないことがある。特に大規模なシステムに用いられるプログラム容量の大きなソースプログラムでは、同一の文字列が変数と予約語とに使用されていることが少なくない。
【0007】
特許文献2では、予約語を抽出する構成は開示されているが、変数と予約語との重複文字列を排除することについては考慮されていない。
【0008】
本発明は上記のような点に鑑みてなされたものであり、ソースプログラムを記述する言語の自動変換に際して、変数と予約語との重複文字列を排除し、自動変換率を向上させることを目的とする。
【課題を解決するための手段】
【0009】
本発明のプログラムの言語変換装置は、ソースプログラム及び前記ソースプログラムのクロスリファレンスから変数の文字列を抽出する抽出手段と、前記抽出手段により抽出した変数の文字列が、前記ソースプログラム上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更する変更手段と、前記変更手段により変数の文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換する言語変換手段とを備えたことを特徴とする。
本発明のソースプログラムの言語変換方法は、ソースプログラム及び前記ソースプログラムのクロスリファレンスから変数の文字列を抽出する抽出手順と、前記抽出手順により抽出した変数の文字列が、前記ソースプログラム上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更する変更手順と、前記変更手順により変数の文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換する言語変換手順とを有することを特徴とする。
本発明のプログラムは、ソースプログラム及び前記ソースプログラムのクロスリファレンスから変数の文字列を抽出する抽出処理と、前記抽出処理により抽出した変数の文字列が、前記ソースプログラム上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更する変更処理と、前記変更処理により変数の文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換する言語変換処理とをコンピュータに実行させる。
【発明の効果】
【0010】
本発明によれば、ソースプログラムを記述する言語の自動変換に際して、変数と予約語との重複文字列を排除することができ、自動変換率を向上させることができる。
【発明を実施するための最良の形態】
【0011】
以下、添付図面を参照して、本発明の好適な実施形態について説明する。
図1は、本発明の実施形態に係るソースプログラムの言語変換装置の概略構成を示す図である。本実施の形態に係るソースプログラムの言語変換装置は、あるプログラミング言語で記述されたソースプログラム1を、別のプログラミング言語で記述されたソースプログラム6に変換するものである。
【0012】
100はコンパイル情報抽出部であり、ソースプログラム1をコンパイル(機械語への一括変換)するコンパイラ101を備える。コンパイラ101でソースプログラム1をコンパイルすることにより、該ソースプログラム1のクロスリファレンス2が生成される。クロスリファレンスは、プログラム中に出現する各種の変数や定数、記号等に関して、それらを定義しているプログラム中の行番号等を一覧表にしてまとめたものである。図4には、クロスリファレンスの一例として、変数に関して、「NAME(変数として扱っている文字列)」、「SCOPE(変数名の有効範囲)」、「DATA TYPE(データの型)」、「ATTRIBUTE(データの属性)」、「ADDRESS(文字列が記述されているプログラム行番号)」を一覧表にしてまとめたクロスリファレンスを示す。
【0013】
200は変数名データ作成部であり、ソースプログラム1、及び、コンパイル情報抽出部100により生成した該ソースプログラム1のクロスリファレンス2から変数の文字列を抽出し、整合性をチェックする変数名管理部201を備える。具体的には、ソースプログラム1及びそのクロスリファレンス2から抽出した変数の文字列が、ソースプログラム1上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更する。そのために、詳しくは後述するが、ソースプログラム1上で予約語と同一の文字列を検索し、その検索文字列が、予約語として使用されておらず、かつ、ソースプログラム1及びそのクロスリファレンス2から抽出した変数の文字列と同一である場合に、該検索文字列を別の文字列に変更する。また、文字列の変更内容を変数名データテーブル3に格納して管理する。
【0014】
300は予約語の文法定義4及び変換のルール定義5を構築するための定義構築部である。
【0015】
予約語の文法定義4は、入力装置301を介してなされるオペレータ入力に基づいて、エディタ302により構築される。予約語とはプログラム言語において用途が予め定められた文字列のことであり、char、int等のデータ型や、if、then等の制御構造を表す文字列がその例である。予約語の文法定義4は、予約語の文法について定義するものであり、変数名データ作成部200では、予約語の文法定義4に照合して、検索文字列が予約語として使用されているかどうかを判定する。
【0016】
また、変換のルール定義5は、入力装置303を介してなされるオペレータ入力に基づいて、エディタ304により構築される。図5には、変換のルール定義の一例を示す。図5に示す変換のルール定義5は、FORTRANをC言語に変換する場合のルールの定義であり、「分類」、「命令」、「説明」、「構文」、「変換前例」、「変換後例」が記述されている。例えばFORTRANでは、「REAL(予約語)」は変数が実数型変数であることを宣言する型宣言文、「INTEGER(予約語)」は変数が整数型変数であることを宣言する型宣言文として使用されるが、C言語では、それぞれ「float(予約語)」、「int(予約語)」が使用される。
【0017】
400は言語変換部であり、変数名データ作成部200により検索文字列を別の文字列に変更したソースプログラム1を、変換のルール定義5に基づいて言語変換し、変換後のソースプログラム6を出力する。
【0018】
500はコンパイラであり、言語変換部400により言語変換した後のソースプログラム6をコンパイルする。コンパイラ500でソースプログラム6をコンパイルすることにより、該ソースプログラム6のクロスリファレンス7が生成される。このとき、コンパイラ500によるコンパイルの結果、コンパイルエラーが発生した場合に、エラー情報をクロスリファレンス7に記載する。
【0019】
次に、図2のフローチャートを参照して、コンパイル情報抽出部100及び変数名データ作成部200での処理について説明する。
【0020】
ステップS1で、コンパイル情報抽出部100は、ソースプログラム1を読み込む。
【0021】
ステップS2で、コンパイル情報抽出部100は、ソースプログラム1をコンパイルすることにより、該ソースプログラム1のクロスリファレンス2を生成する。
【0022】
ステップS3で、変数名データ作成部200は、上記ステップS2において生成したクロスリファレンス2から、宣言文なしで変数として使用している文字列を抽出する。
【0023】
ステップS4で、変数名データ作成部200は、ソースプログラム1から、宣言文で変数として定義している文字列と記述箇所を抽出する。
【0024】
ステップS5で、変数名データ作成部200は、上記ステップS3及び上記ステップS4において抽出した文字列を変数の文字列として保持する(変数文字列一覧8)。このようにソースプログラム1だけからでなく、該ソースプログラム1のクロスリファレンス2からも変数の文字列を抽出することにより、ソースプログラム1において宣言文で定義している変数以外の変数も抽出でき、変数の文字列を洩れなく抽出することができる。
【0025】
ステップS6で、変数名データ作成部200は、予約語の文法定義4を読み込む。
【0026】
ステップS7で、変数名データ作成部200は、ソースプログラム1上で予約語と同一の文字列で記述されている箇所を先頭から順次検索する。
【0027】
上記ステップS7において予約語と同一の文字列が検索されると(以下、検索文字列「xxx」と記す)、ステップS8に進み、予約語の文法定義4に照合して、その検索文字列「xxx」が予約語として使用されているかどうかを判定する。その結果、検索文字列「xxx」が予約語として使用されていれば、ステップS12に進み、ソースプログラム1全体について検索が終了しているかどうかを判定し、終了していなければ、ステップS7に戻る。
【0028】
上記ステップS8において検索文字列「xxx」が予約語として使用されていなければ、ステップS9に進み、その検索文字列「xxx」が変数文字列一覧8にあるかどうか、すなわち、変数の文字列として使用されているかどうかを判定する。その結果、検索文字列「xxx」が変数文字列一覧8になければ(すなわち、変数の文字列として使用されていなければ)、ステップS11に進み、エラー処理を実行する。エラー処理では、検索文字列「xxx」が予約語としても変数としても使用されていないとして、ロギングしてファイルに出力する。その後、ステップS12に進み、ソースプログラム1全体について検索が終了しているかどうかを判定し、終了していなければ、ステップS7に戻る。
【0029】
上記ステップS9において検索文字列「xxx」が変数文字列一覧8にあれば(すなわち、変数の文字列として使用されていれば)、ステップS10に進み、ソースプログラム1上で検索文字列「xxx」を別の文字列に変更するとともに、その変更内容を変数名データテーブル3に格納して管理する。検索文字列「xxx」を別の文字列に変換する例としては、検索文字列「xxx」に所定の文字列を付記する等すればよい。その後、ステップS12に進み、ソースプログラム1全体について検索が終了しているかどうかを判定し、終了していなければ、ステップS7に戻る。
【0030】
次に、図3のフローチャートを参照して、言語変換部400及びコンパイラ500での処理について説明する。
【0031】
ステップS51で、言語変換部400は、ソースプログラム1を読み込む。このソースプログラム1は、コンパイル情報抽出部100及び変数名データ作成部200での処理により、ソースプログラム1上で予約語と同一の文字列を検索し、その検索文字列が、予約語として使用されておらず、かつ、ソースプログラム1及びそのクロスリファレンス2から抽出した変数の文字列と同一である場合に、該検索文字列を別の文字列に変更したものである(図2のフローチャートを参照)。
【0032】
また、ステップS52で、予約語の文法定義4を読み込み、ステップS53で、変換のルール定義5を読み込む。
【0033】
ステップS54で、言語変換部400は、ソースプログラム1の各行(構文単位)の記述を変換のルール定義5に照合し、ステップS55で、変換のルールに合致するかどうかを判定する。
【0034】
言語変換部400は、変換のルールに合致する行の記述については、その行の記述を変換のルール定義4に従って置き換える(ステップS56)。また、変換のルールに合致しない行の記述については、変換せずに、そのままの記述とする。
【0035】
ステップS57で、言語変換部400は、上記ステップS56において置き換えた行の記述及び変換のルールに合致せずにそのままとされた行の記述を順次繋ぎ合わせて、変換後のソースプログラム6を生成する。
【0036】
ステップS58で、言語変換部400は、変換後のソースプログラム6を出力する。
【0037】
ステップS59で、コンパイラ500は、変換後のソースプログラム6をコンパイルすることにより、該ソースプログラム6のクロスリファレンス7を生成する。コンパイルの結果、コンパイルエラーが発生した場合に、ステップS60で、エラー情報をクロスリファレンス7に記載する。
【0038】
以上述べたように、ソースプログラム1及びそのクロスリファレンス2から抽出した変数の文字列が、ソースプログラム1上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更するようにしたので、ソースプログラム1を記述する言語の自動変換に際して、変数と予約語との重複文字列を排除することができ、自動変換率を向上させることができる。
【0039】
なお、上記実施形態では、ソースプログラム1上で予約語と同一の文字列「xxx」を検索し、その検索文字列「xxx」が、予約語として使用されておらず、かつ、前記抽出手段により抽出した変数の文字列と同一である場合に、該検索文字列「xxx」を別の文字列に変更する例を説明したが(図2のステップS7〜S10)、それに限定されるものではない。例えばソースプログラム1上で変数文字列一覧8にある文字列(すなわち、ソースプログラム1及びそのクロスリファレンス2から抽出した変数の文字列)「yyy」を検索し、その検索文字列「yyy」が、ソースプログラム1上の予約語と同一の文字列である場合に、該検索文字列「yyy」を別の文字列に変更するようにしてもよい。
【0040】
本発明を適用したソースプログラムの言語変換装置は、具体的にはCPU、各種メモリを備えたコンピュータ装置により実現可能であり、一つの機器により構成されてもよいし、複数の機器により構成されてもよい。
【0041】
また、本発明の目的は、上述した実施形態の機能を実現するソフトウェアのプログラムコードを記録した記憶媒体を、システム或いは装置に供給することによっても達成される。この場合、そのシステム或いは装置のコンピュータ(又はCPUやMPU)が記憶媒体に格納されたプログラムコードを読み出し実行する。
【0042】
この場合、記憶媒体から読み出されたプログラムコード自体が上述した実施形態の機能を実現することになり、プログラムコード自体及びそのプログラムコードを記憶した記憶媒体は本発明を構成することになる。プログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、磁気テープ、不揮発性のメモリカード、ROM等を用いることができる。
【図面の簡単な説明】
【0043】
【図1】本発明の実施形態に係るソースプログラムの言語変換装置の概略構成を示す図である。
【図2】コンパイル情報抽出部及び変数名データ作成部での処理を示すフローチャートである。
【図3】言語変換部及びコンパイラでの処理を示すフローチャートである。
【図4】クロスリファレンスの一例を示す図である。
【図5】変換のルール定義の一例を示す図である。
【符号の説明】
【0044】
1 変換前のソースプログラム
2 クロスリファレンス
3 変数名データテーブル
4 予約語の文法定義
5 変換のルール定義
6 変換後のソースプログラム
7 クロスリファレンス
8 変数文字列一覧
100 コンパイル情報抽出部
101 コンパイラ
200 変数名データ作成部
201 変数名管理部
300 定義構築部
301 入力装置
302 エディタ
303 入力装置
304 エディタ
400 言語変換部
500 コンパイラ

【特許請求の範囲】
【請求項1】
ソースプログラム及び前記ソースプログラムのクロスリファレンスから変数の文字列を抽出する抽出手段と、
前記抽出手段により抽出した変数の文字列が、前記ソースプログラム上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更する変更手段と、
前記変更手段により変数の文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換する言語変換手段とを備えたことを特徴とするソースプログラムの言語変換装置。
【請求項2】
前記変換手段は、前記ソースプログラム上で予約語と同一の文字列を検索し、その検索文字列が、予約語として使用されておらず、かつ、前記抽出手段により抽出した変数の文字列と同一である場合に、該検索文字列を別の文字列に変更し、
前記言語変換手段は、前記変更手段により検索文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換することを特徴とする請求項1に記載のソースプログラムの言語変換装置。
【請求項3】
前記言語変換手段により言語変換した後のソースプログラムをコンパイルするコンパイラを備え、
前記コンパイラによるコンパイルの結果、コンパイルエラーが発生した場合に、エラー情報を前記変換後のソースプログラムのクロスリファレンスに記載することを特徴とする請求項1又は2に記載のソースプログラムの言語変換装置。
【請求項4】
ソースプログラム及び前記ソースプログラムのクロスリファレンスから変数の文字列を抽出する抽出手順と、
前記抽出手順により抽出した変数の文字列が、前記ソースプログラム上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更する変更手順と、
前記変更手順により変数の文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換する言語変換手順とを有することを特徴とするソースプログラムの言語変換方法。
【請求項5】
ソースプログラム及び前記ソースプログラムのクロスリファレンスから変数の文字列を抽出する抽出処理と、
前記抽出処理により抽出した変数の文字列が、前記ソースプログラム上の予約語と同一の文字列である場合、該変数の文字列を別の文字列に変更する変更処理と、
前記変更処理により変数の文字列を別の文字列に変更した前記ソースプログラムを、予め構築された変換のルール定義に基づいて言語変換する言語変換処理とをコンピュータに実行させるためのプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公開番号】特開2009−251684(P2009−251684A)
【公開日】平成21年10月29日(2009.10.29)
【国際特許分類】
【出願番号】特願2008−95458(P2008−95458)
【出願日】平成20年4月1日(2008.4.1)
【出願人】(000006655)新日本製鐵株式会社 (6,474)
【Fターム(参考)】