(57)【特許請求の範囲】
【請求項１】
計算機によってソースプログラムのポーティング手順を実行する方法であって、
ポーティング元からソースプログラム及びコンパイル・リンク・オプション情報を受信し、
前記ソースプログラムの構文解析を行って関数・マクロの名前、型、および引数の数と型を含む関数・マクロ仕様を抽出し、
記憶装置に格納された標準規格データベースから読み出した情報に同名の関数・マクロが存在し、抽出された関数・マクロ仕様と不一致の場合に、前記標準規格データベースの情報に基づく修正前と修正後の関数・マクロ仕様を表の形にまとめた修正表に登録し、登録された修正表により前記ソースプログラムを修正し、
記憶装置に格納された各社拡張仕様データベースから読み出した情報に同名の関数・マクロが存在し、抽出された関数・マクロ仕様と不一致の場合に、前記各社拡張仕様データベースの情報に基づく修正前と修正後の関数・マクロ仕様を表の形にまとめた修正表に登録し、登録された修正表により前記ソースプログラムを修正し、
コンパイル・リンク・オプション情報の構文解析を行ってオプションの名前、オプションの数と型を含むオプション仕様を抽出し、
前記標準規格データベースに同名のオプションが記録されており、抽出されたオプション仕様と不一致の場合に、前記標準規格データベースの情報に基づく修正前と修正後のオプション仕様を表の形にまとめた修正表に登録し、登録された修正表により前記コンパイル・リンク・オプション情報を修正し、
前記各社拡張仕様データベースに同名のオプションが記録されており、抽出されたオプション仕様と不一致の場合に、前記各社拡張仕様データベースの情報に基づく修正前と修正後のオプション仕様を表の形にまとめた修正表に登録し、登録された修正表により前記コンパイル・リンク・オプション情報を修正し、
修正後のソースプログラム及びコンパイル・リンク・オプション情報を前記ポーティング元へ送信することを特徴とするソースプログラムのポーティング方法。
【請求項２】
前記ポーティング元からの前記ソースプログラム及びコンパイル・リンク・オプション情報を修正した結果として、非修正行数と全体行数の比である合致率を計算して出力することを特徴とする請求項１記載のソースプログラムのポーティング方法。
【請求項３】
コンピュータに、ポーティング元からのソースプログラム及びコンパイル・リンク・オプション情報を受信する手順、
前記ソースプログラムの構文解析を行って関数・マクロの名前、型、および引数の数と型を含む関数・マクロ仕様を抽出する手順、
記憶装置に格納された標準規格データベースから読み出した情報に同名の関数・マクロが存在し、抽出された関数・マクロ仕様と不一致の場合に、前記標準規格データベースの情報に基づく修正前と修正後の関数・マクロ仕様を表の形にまとめた修正表に登録し、登録された修正表により前記ソースプログラムを修正する手順、
記憶装置に格納された各社拡張仕様データベースから読み出した情報に同名の関数・マクロが存在し、抽出された関数・マクロ仕様と不一致の場合に、前記各社拡張仕様データベースの情報に基づく修正前と修正後の関数・マクロ仕様を表の形にまとめた修正表に登録し、登録された修正表により前記ソースプログラムを修正する手順、
コンパイル・リンク・オプション情報の構文解析を行ってオプションの名前、オプションの数と型を含むオプション仕様を抽出する手順、
前記標準規格データベースに同名のオプションが記録されており、抽出されたオプション仕様と不一致の場合に、前記標準規格データベースの情報に基づく修正前と修正後のオプション仕様を表の形にまとめた修正表に登録し、登録された修正表により前記コンパイル・リンク・オプション情報を修正する手順、
前記各社拡張仕様データベースに同名のオプションが記録されており、抽出されたオプション仕様と不一致の場合に、前記各社拡張仕様データベースの情報に基づく修正前と修正後のオプション仕様を表の形にまとめた修正表に登録し、登録された修正表により前記コンパイル・リンク・オプション情報を修正する手順、および
修正後のソースプログラム及びコンパイル・リンク・オプション情報を前記ポーティング元へ送信する手順を実行させるためのプログラム。
【請求項４】
さらに前記コンピュータに、前記ポーティング元からの前記ソースプログラム及びコンパイル・リンク・オプション情報を修正した結果として、非修正行数と全体行数の比である合致率を計算して出力する手順を実行させることを特徴とする請求項３記載のプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、電子計算機のソースプログラムをポーティングする方法に関する。
【０００２】
【従来の技術】
ソースプログラムのポーティング（移植）に関して以下のような技術がある。
（１）プログラムの移植を局所的な環境で実施する例として特開２０００−１０５６９３号公報がある。これはプログラムのポーティングを行う場合に修正必要箇所を検索し、修正必要箇所と修正理由とを表示装置上に表示して対話的にその修正を行うものである。（２）標準規格データベースを用いてソースプログラムの変換を行う例として特開平１０−１１２７６号公報がある。
【０００３】
【発明が解決しようとする課題】
上記従来技術によれば、移植を行うポーティング先にソースプログラムが存在しなければソースプログラムの変換ができず、ソースプログラムの変換が局所的な環境によって制限されるという問題があった。また自動的に変換できない場合には上記のように対話的な修正処理が入るために、大規模なソースプログラムを効率的に変換できないという問題があった。
【０００４】
本発明の目的は、ポーティング先の環境にかかわらずに効率的にソースプログラムをポーティングする方法を提供することにある。
【０００５】
【課題を解決するための手段】
本発明は、ポーティング元からソースプログラム及びコンパイル・リンク・オプション情報を受信し、ポーティング先環境に適合するよう修正し、修正後のソースプログラム及びコンパイル・リンク・オプション情報をポーティング元へ送信するソースプログラムのポーティング方法を特徴とする。
【０００６】
【発明の実施の形態】
以下、本発明の実施形態について図面を用いて説明する。
【０００７】
図１は、本実施形態のシステム構成を示す図である。システムは、ＰＣ（パーソナルコンピュータ）１００、ポーティング支援システム２００及び両者を接続するネットワーク５０から構成される。ＰＣ１００は、Ｅメールにポーティング対象情報を添付し、ネットワーク５０を介してポーティング支援システム２００へ送信する計算機である。ポーティング支援システム２００は、受信したＥメールの添付ファイルからポーティング対象情報を取り出し、修正必要箇所を検出し、修正情報をＥメールに添付し、ネットワーク５０を介してＰＣ１００へ返信する計算機システムである。
【０００８】
図２は、ポーティング支援システム２００の内部構成を示す図である。ポーティング支援システム２００は、Ｅメール受信処理部２０１、Ｅメール添付ファイル取り出し部２０２、修正必要箇所検索処理部２０３、修正必要ステップ数算出部２０４、Ｅメールファイル添付部２０５及びＥメール発信処理部２０６の各プログラムから構成される。Ｅメール受信処理部２０１は、送られてきたＥメールの発信元を調べ正規の発信者から送られてきたメールであるか否かを判断するプログラムである。Ｅメール添付ファイル取り出し部２０２は、受信したＥメールから添付ファイルを取り出すプログラムであり、更にソースプログラム、ｍａｋｅｆｉｌｅ又はシェルスクリプト及びＯＳ名コンパイラのバージョン等のポーティング先環境情報とを分離するプログラムである。修正必要箇所検索処理部２０３は、Ｅメール添付ファイル取り出し部２０２で分離されたソースプログラムで修正が必要な部分があるか否か、あればどの部分かをＥメール添付ファイル取り出し部２０２で分離されたｍａｋｅｆｉｌｅ又はシェルスクリプトとポーティング先として指定した情報から修正必要箇所を検出する。修正必要ステップ数算出部２０４は、ポーティング前ソースプログラム、ｍａｋｅｆｉｌｅ又はシェルスクリプトの全ステップ数のうち、修正が必要なステップ数を算出するプログラムである。Ｅメールファイル添付部２０５は、修正後のソースプログラム、ｍａｋｅｆｉｌｅ・シェルスクリプト、修正表等の実行結果をＥメールに添付するプログラムである。Ｅメール発信処理部２０６は、修正必要箇所検索処理部２０３の実行結果を添付したＥメールを発信するプログラムである。
【０００９】
図３は、ポーティング支援システム２００の概略の処理の流れを示すフローチャートである。ステップ３０１でポーティング対象情報を添付ファイルに持つＥメール（電子メール）を受信する。この時正規の登録者以外からのＥメールはステップ３０２以降の処理には入らない。ステップ３０２ではステップ３０１で受信した添付ファイルからポーティング対象のソースプログラム、ｍａｋｅｆｉｌｅ又はシェルスクリプト、ポーティング先環境情報をそれぞれ取り出す。ステップ３０３は、ポーティング先環境に適合するようにソースプログラム、ｍａｋｅｆｉｌｅ又はシェルスクリプトに対する修正必要箇所を検出するところであり、その詳細を図４で説明する。ステップ３０４は、ｍａｋｅｆｉｌｅ又はシェルスクリプトの修正必要箇所を検出するところであり、その詳細を図７で説明する。ステップ３０５では標準規格、ポーティング先環境と一致しないソースプログラム、ｍａｋｅｆｉｌｅ又はシェルスクリプトのステップ数を算出する。ここではステップ３０３及びステップ３０４で検出したソースプログラム及びｍａｋｅｆｉｌｅ又はシェルスクリプトで修正が必要な箇所について、ポーティング前のソースプログラム及びｍａｋｅｆｉｌｅ又はシェルスクリプトのうち修正が必要なステップ数を計算する。ステップ３０６は、修正後のソースプログラム及びｍａｋｅｆｉｌｅ又はシェルスクリプト、これらのポーティング先環境に対しての修正が必要な箇所の情報及び合致率をＥメールで送信する。合致率は、非修正行数／（修正行数＋非修正行数）である。
【００１０】
図４は、図３のソースプログラムの修正必要箇所検出処理の詳細を示す図である。ステップ４０１でソースプログラムを入力してインクルードファイルを展開する。ステップ４０２でソースプログラムの末尾か否かを判断する。末尾である場合はソースの修正必要箇所検出処理を終了する。末尾でない場合はステップ４０３以降の処理を実施する。ステップ４０３ではそのソースプログラムを構文解析し、構成要素の取り出しをする。ステップ４０４でソースプログラムから関数・マクロの実行文が見つかった場合は、ステップ４０５では標準規格データベースとの比較をする。ステップ４０５の詳細は図５で説明する。ステップ４０６では各社拡張仕様データベースとの比較をする。ステップ４０６の詳細は図６で説明する。
【００１１】
図５は、ステップ４０５で標準規格データベースとの比較をする部分を詳細に示す図である。ステップ５０１は標準規格データベースに、同じ名称の関数・マクロがあるか否かを判定する。同じ関数・マクロ名称がある場合は、ステップ５０２で関数・マクロの仕様が一致するか否かを判定する。不一致の場合はステップ５０３にて標準規格データベースとの不一致行数をカウントアップする。ステップ５０４では不一致の関数・マクロについて修正箇所、修正前と修正後の仕様を表の形でまとめた修正表に登録する。ステップ５０５では修正後のコーディングを実際のソースプログラムに反映する。修正前のコーディングについてコメントを付加してどのような修正をしたかが判るようにする。
【００１２】
図６は、ステップ４０６で各社拡張仕様データベースとの比較をする部分の処理を詳細に示す図である。ステップ６０１で各社拡張仕様のデータベースに同名の関数・マクロがあるか否かを判断する。同名の関数・マクロがある場合は、ステップ６０２で関数・マクロの仕様が一致するか否か判定する。不一致の場合はステップ６０３で各社拡張仕様データベースとの不一致行をカウントアップする。ステップ６０４で不一致の関数・マクロについて修正箇所、修正前と修正後の仕様を修正表に登録する。ステップ６０５で修正後のコーディングを実際のソースプログラムに反映する。修正前のコーディングについてコメントを付加してどのような修正をしたかが判るようにする。標準規格データベースを基にした修正ファイルと各社拡張仕様データベースを基にした修正は別々のファイルに出力する。
【００１３】
図７は、ｍａｋｅｆｉｌｅ又はシェルスクリプトの修正箇所を検出する処理を表す図である。ステップ７０１でｍａｋｅｆｉｌｅ又はシェルスクリプトを入力する。ステップ７０２でｍａｋｅｆｉｌｅまたはシェルスクリプトの末尾か否かを調べ、末尾でない場合はステップ７０３でｍａｋｅｆｉｌｅまたはシェルスクリプトの構文解析をする。構文解析で要素に分解した結果、オプションが指定されているか否かをステップ７０４で判定する。オプションが指定されていた場合、ステップ７０５で修正表に登録する。次にオプションが指定されていた場合はステップ７０６で標準規格データベースと比較をする。ステップ７０６の詳細は図８で説明する。次にステップ７０７で各社拡張仕様データベースとの比較をする。ステップ７０７の詳細は図９で説明する。
【００１４】
図８は、ｍａｋｅｆｉｌｅ又はシェルスクリプトと標準規格データベースとの比較処理の説明図である。ステップ８０１で標準規格データベースに同名のオプションがあるか否かを判定する。同名のオプションがある場合にはステップ８０２でオプションの数と型が一致するか否かの判定をする。一致しないときにはステップ８０３でコンパイル・リンク・オプションについて修正箇所、修正前と修正後の仕様を表の形でまとめた修正表に登録する。ステップ８０４で修正後のコーディングを実際のｍａｋｅｆｉｌｅ又はシェルスクリプトに反映する。
【００１５】
図９は、各社拡張仕様データベースとの比較処理を示す図である。ステップ９０１では各社拡張仕様データベースに同名のオプションがあるか否かを判定する。同名のオプションがある場合はステップ９０２でオプションの数と型が一致するか否かを調べる。一致しないときにはステップ９０３で修正箇所、修正前と修正後の仕様を修正表に登録する。ステップ９０４で修正後のコーディングを実際のｍａｋｅｆｉｌｅまたはシェルスクリプトに反映する。修正を反映したｍａｋｅｆｉｌｅまたはシェルスクリプトは、標準規格を基にしたものと各社拡張仕様を基にしたものの２種類出力する。
【００１６】
図１０は、ソースプログラムをポーティング支援システム２００で変換した例を示す図である。変換前プログラム１００１をポーティング支援システム２００で変換し、変換後プログラム１００３を得る。変換後プログラム１００３の行１００４と行１００５の部分は、変更前の関数の部分をコメントの形で表現し、変更箇所が判るようになっている。
【００１７】
図１１は、ソースプログラムについて標準規格データベース及び各社拡張仕様データベースのフォーマットの例を示す図である。１行目に関数名・マクロ名の型と名前、２行目以降引数の数個分だけ各引数の型と名前がこの順序で登録されている。空白行を１行はさみ、これを関数・マクロの数だけ繰り返す。これを図１１の例で説明する。表中の列１１０７は関数又は引数の型を表している。列１１０８は関数名又は引数名を表している。この表では行１１０２から関数名がｆｇｅｔｓでこの関数はｃｈａｒへのポインタを返す関数であることが判る。行１１０３では引数名がａであり、この引数の型はｃｈａｒ型へのポインタであることが判る。行１１０４の次の行が空白なので関数ｆｇｅｔｓの引数はＦＩＬＥ型の引数ｃまでであることが判る。次の関数は行１１０６から始まるｆｐｕｔｓであることが判る。
【００１８】
図１２は、ステップ５０４及びステップ６０４で使用するソースプログラム中の関数について修正前の表現と修正後の表現の対応を保持している修正表の例を示す図である。この修正表には列１２０６がソースファイルのファイル名、列１２０７がファイル中の修正したステートメントの行番号を保持している。この列が空白であると前の列と同じ行番号であることを意味する。列１２０８は変更前の関数又は引数の型を保持している部分である。列１２０９は変更前の関数名又は引数名を保持している。列１２１０は変更後の関数又は引数の型を保持している。列１２１１は変更後の関数名又は引数名を保持している。図１２の例では、この関数の存在するファイル名は「／ｕｓｒ／ｓｒｃ／ａ．ｃ」であり、修正対象となる関数ｆｇｅｔｓが１０行目にあることを示している。行１２０２では関数ｆｇｅｔｓの１番目の引数は名前がａであり、この引数はｃｈａｒへのポインタを返す型である。行１２０３までが関数ｆｇｅｔｓの引数であり、空白行１２０４をはさんで行１２０５からが次の関数ｆｐｕｔｓであることが判る。この例では関数ｆｇｅｔｓがｇｅｔｓに、関数ｆｐｕｔｓがｐｕｔｓに変換されている。
【００１９】
図１３は、ｍａｋｅｆｉｌｅをポーティング支援システム２００で変換した例を示す図である。変換前ｍａｋｅｆｉｌｅ１３０１をポーティング支援システム２００で変換し、変換後ｍａｋｅｆｉｌｅ１３０３を得る。変換後ｍａｋｅｆｉｌｅ１３０３中行１３０４の部分が変更前ｍａｋｅｆｉｌｅの部分をコメントによって表現することによって、変更箇所が判るようになっている。この例はｍａｋｅｆｉｌｅであるがシェルスクリプトの場合でも同じである。
【００２０】
図１４は、ｍａｋｅｆｉｌｅについて標準規格データベース及び各社拡張仕様データベースのフォーマットの例を示す図である。列１４０２がコンパイルオプションかリンクオプションかを表している列であり、この列の内容が「ｃｏｍｐｉｌｅ」であればこのオプションはコンパイルオプションであり、「ｌｉｎｋ」であればリンクオプションである。列１４０３はオプション名を示す。
【００２１】
図１５は、ステップ８０３及びステップ９０３で使用するｍａｋｅｆｉｌｅの修正前の表現と修正後の表現の対応を保持している修正表の例を示す図である。この修正表には列１５０３がオプションの存在するｍａｋｅｆｉｌｅのファイル名、列１５０４がファイル中の修正した行番号を保持している。この列が空白であると前の列と同じ行番号であることを意味する。列１５０５は変更前のオプションがコンパイルオプションかリンクオプションかを表している。列１５０６は変更前のオプション名を保持している部分である。列１５０７は変更後のオプションがコンパイルオプションかリンクオプションかを表している。列１５０８は変更後のオプション名を保持している部分である。図１５の例では、１５０９からこのオプションの存在するファイル名は／ｕｓｒ／ｍｆｉｌであり、修正対象となるオプション「ｃ」が１０行目にあることが判る。行１５０２では列１５０５が「ｌｉｎｋ」となっているのでリンクオプションであることが判る。この例では変換によってコンパイルオプションＯｓが削除されている。
【００２２】
図１６は、インターネットの代わりに郵便等の手段によっても記録媒体に記録されたポーティング前プログラムとポーティング後プログラムを送受信できることを示す図である。ここでは郵便を例として揚げているが郵便に限らず他の通信手段でも本発明は適用できる。
【００２３】
【発明の効果】
以上説明したように本発明によれば、ポーティング支援システムがポーティング先の環境に依存しないため、ポーティング先の環境にかかわらずに効率的にソースプログラムをポーティングすることができる。また標準規格、各社拡張仕様に基づいて必要な修正行数を提示することにより、プログラムのポーティングに必要な作業量を事前に把握することができるので正確な作業計画を立てることができるという効果がある。
【図面の簡単な説明】
【図１】実施形態のシステム構成を示す図である。
【図２】実施形態のポーティング支援システム２００の構成を示す図である。
【図３】実施形態のポーティング支援システム２００の概略の処理の流れを示すフローチャートである。
【図４】実施形態のソースプログラムの修正必要箇所検出処理の流れを示すフローチャートである。
【図５】実施形態の標準規格データベースとの比較処理を示すフローチャートである。
【図６】実施形態の各社拡張仕様データベースとの比較処理を示すフローチャートである。
【図７】実施形態のｍａｋｅｆｉｌｅの修正箇所を検出する処理を示すフローチャートである。
【図８】実施形態のｍａｋｅｆｉｌｅと標準規格データデースとの比較処理を示すフローチャートである。
【図９】実施形態のｍａｋｅｆｉｌｅと各社拡張仕様データベースとの比較処理を示すフローチャートである。
【図１０】ソースファイルをポーティング支援システムで変換した例を示す図である。
【図１１】標準規格データベース及び各社拡張仕様データベースでのソースのフォーマットの例を示す図である。
【図１２】ソースファイルに対する修正内容を登録する修正表の例を示した図である。
【図１３】ｍａｋｅｆｉｌｅをポーティング支援システムで変換した例を示す図である。
【図１４】標準規格データベース及び各社拡張仕様データベースでのオプションのフォーマットの例を示す図である。
【図１５】ｍａｋｅｆｉｌｅに対する修正内容を登録する修正表の例を示す図である。
【図１６】インターネットの代わりに郵便でポーティング前プログラムとポーティング後プログラムを送受信する構成を示す図である。
【符号の説明】
１００…ＰＣ、２００…ポーティング支援システム、２０３…修正必要箇所検索処理部、２０４…修正必要ステップ数算出部
【図１】
0004015382.tif 000002
【図２】
0004015382.tif 000003
【図３】
0004015382.tif 000004
【図４】
0004015382.tif 000005
【図５】
0004015382.tif 000006
【図６】
0004015382.tif 000007
【図７】
0004015382.tif 000008
【図８】
0004015382.tif 000009
【図９】
0004015382.tif 000010
【図１０】
0004015382.tif 000011
【図１１】
0004015382.tif 000012
【図１２】
0004015382.tif 000013
【図１３】
0004015382.tif 000014
【図１４】
0004015382.tif 000015
【図１５】
0004015382.tif 000016
【図１６】
0004015382.tif 000017