(57)【要約】【課題】  国際化解析を自動化するためには、国際化未対応のプログラムの変換候補の検索と、変更が度々生じる国際化ルールにいかに解決するかが課題であった。【解決手段】  プログラムを選択する入力部と、入力部によって選択されたプログラムを字句・構文解析する字句構文解析部と、字句・構文解析されたプログラムを国際化ルールデータに従って国際化解析する国際化解析部と、国際化解析部の解析結果に基づいて、プログラムにおける国際化未対応プログラム部分を国際化対応プログラムに変換する国際化プログラム変換部とを備えてプログラム変換システムを構成する。【選択図】      図１
2007080196.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを選択する入力部と、
前記入力部によって選択されたプログラムを字句・構文解析する字句構文解析部と、
前記字句・構文解析されたプログラムを国際化ルールデータに従って国際化解析する国際化解析部と、
前記国際化解析部の解析結果に基づいて、前記プログラムにおける国際化未対応プログラム部分を国際化対応プログラムに変換する国際化プログラム変換部と、を備えることを特徴とするプログラム変換システム。
【請求項２】
前記国際化ルールデータは、前記入力部によって修正可能であることを特徴とする請求項１に記載のプログラム変換システム。
【請求項３】
前記国際化プログラム変換部は、前記国際化解析されたプログラムの解析結果に基づいて、前記国際化未対応プログラム部分を参照して前記国際化未対応プログラム部分が確認された後、該国際化未対応プログラム部分を国際化対応プログラムに変換することを特徴とする請求項１または２に記載のプログラム変換システム。
【請求項４】
国際化未対応プログラムを字句・構文解析する字句構文解析ステップと、
前記字句・構文解析されたプログラムを国際化ルールデータに従って国際化解析する国際化解析ステップと、
前記国際化解析の結果に基づいて、国際化未対応プログラム部分を国際化対応プログラムに変換する国際化プログラム変換ステップと、を備えることを特徴とするプログラム変換方法。
【請求項５】
コンピュータに、
国際化未対応プログラムを字句・構文解析させ、
前記字句・構文解析されたプログラムを国際化ルールデータに従って国際化解析させ、
前記国際化解析の結果に基づいて、国際化未対応プログラム部分を国際化対応プログラムに変換させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム変換システム、および、その変換方法に関し、特に、国際化に対応していないソフトウェアのプログラムを、国際化に対応済みのプログラムに変換するプログラム変換システム、および、その変換方法に関する。
【背景技術】
【０００２】
各国のソフトウェア開発会社は、自国の言語で開発したソフトウェアを、他国でも販売できるように、他国の言語へ翻訳して、他国に対し、そのソフトウェア翻訳版の提供を行っている。そこで、他国での販売を想定したソフトウェア開発を行うには、各国言語や習慣に適合可能なソフトウェアのためのプログラミング手法が必要である。
【０００３】
その様な他国での販売を想定したソフトウェア開発においては、一般には、開発の第１段階として、世界中のどこでも使える汎用的なプログラム部分の開発を行い、次に、第２段階として、汎用的には作りえない国毎にそれぞれ修正が必要なプログラム部分の開発が行われる。第１段階で使用されるプログラミング手法は、汎用的なソフトウェアの開発を行うためのものであり、複数の国や地域の文化、言語および習慣を扱うことができるようにソフトウエアを汎用化する手法であることから、「国際化」と言われている。これに対して、第２段階は、国毎に対応してプログラム開発が行われることから、「地域化」と言われている。
【０００４】
ここで、国際化されたソフトウェアが備える基本条件は、（１）マルチバイト文字対応であること（例えば、全角日本語はダブルバイト、半角英語はシングルバイトのように、各国の言語に応じてバイト数が相違する。）、（２）複数の言語の文字に対応できること、（３）プログラムの中でメッセージ等の入出力処理部分と、メッセージ等のデータ定義部分とが切り離されていること、（４）各国の言語対応を前提にしてライブラリが作成されていることである。
【０００５】
さらに、上述の国際化されたソフトウェアを開発するために必要な国際化プログラミングのポイントを、次に、説明すると、第１ポイントは、コードセットの独立である。国際化されたプログラムでは、様々な国の文字データを処理する必要があるが、特定の国の文字集合に依存した処理を行っていると他の国の文字データを適切に処理することができない。そのため、プログラムの処理コードは単一の共通コード（プロセスコードと言う。）で行い、ユーザインタフェースやファイル内のデータなどを表現する国毎のコード（ファイルコードと言う。）とは独立にプログラムを作成することが必要である。
【０００６】
第２ポイントは、メッセージカタログ（クライアントコンピュータの言語設定に従って自動的に適切なメッセージを取り出す仕組み）の利用である。プログラム中にメッセージやメニューなどで表示する文字列を直接埋め込んでいる（このことをハードコードと言う。）と、１つのプログラムで１つの言語にしか対応することができない。メッセージカタログを利用すれば、メッセージ部分の翻訳言語を追加することによって、プログラム自体を変更することなく、ユーザインタフェース部分の対応言語を追加することが可能となる。
【０００７】
第３ポイントは、ＪＡＶＡ（登録商標）やＣ＋＋などのプログラミング言語で用意されている国際化関数の利用である。例えば、国毎の言語を入出力するには、マルチバイト文字の入出力が可能な関数を利用している。つまり、プロセスコードとしてＣやＣ＋＋のワイド文字などのマルチバイト文字に対応したデータ型で処理を行う場合、ワイド文字の入出力（ユーザインタフェースからの入出力であったり、プロセス間、スレッド間の入出力等）に対応する関数を利用している。また、日付や通貨記号などの国毎に異なるデータの表現方法があるものについては、それらを適切に処理できる国際化関数を利用する。
【０００８】
上述のようにソフトウェアの「国際化」を行うためには、事前に開発者が理解すべき事項が多く、また、プログラム言語毎に用意される国際化関数、型宣言等は相違する。そのため、従来、ソフトウェアの国際化を実現するためには、開発者自身がソフトウェアの国際化プログラミング手法を習得した上で、プログラムの変換を行う必要があった。
【０００９】
従来技術として、この様なプログラミング作業を支援するためのプログラム変換システムが提案されている。これらのプログラム変換システムは、プログラミングの際に発生する言語の翻訳処理の多くを自動化しているが、その翻訳処理は、「地域化」すべきプログラムに対する修正を自動化する処理である（例えば、特許文献１）。或いは、別のプログラム変換システムは、単一のマスタメッセージファイルからメッセージを生成し、メッセージカタログを「地域化」し、オンラインヘルプメッセージを表示するために必要なファイルを生成するシステムである（例えば、特許文献２）。しかし、これらのシステムは、いずれも、「国際化」が既にされているプログラムを「地域化」するものであり、汎用的なプログラム開発が必要な「国際化」する作業を支援、或いは、自動化するシステムは提供されていなかった。
【００１０】
また、ソフトウェアの国際化プログラミング手法は知られている（例えば、非特許文献１を参照。）。例えば、この国際化プログラミングにおける基礎技術として、上述のプロセスコード、ＪＡＶＡ（登録商標）やＣ＋＋のようなプログラム言語が備える国際化関数の仕様、または、それらの応用としてのプログラミング手法が開示されている。
【００１１】
【特許文献１】特開平８−６７８１号公報
【特許文献２】特開平１０−１１６２５１号公報
【非特許文献１】清兼義弘、末廣陽一編著、「国際化プログラミング」、共立出版、１９９８年８月２５日発行
【発明の開示】
【発明が解決しようとする課題】
【００１２】
上述のように、従来のプログラム変換システムは、ソフトウェアの地域化を目的としており、文字列や文章から構成されるメッセージやユーザインタフェースをプログラム処理部分から分離し、それらを翻訳する手段によってプログラムを自動翻訳するものである。
【００１３】
プログラムを国際化に対応させるためには、国際化に未対応の関数を、国際化に対応させる関数に変換する必要がある。この対応には、関数の有する複雑な文法（関数の引数に関数呼び出しがある場合等）を的確に解析する手段が必要となる。しかしながら、関数の構文が複雑になると、国際化されるべき国際化未対応の関数の検索を、断片化した構成要素を基に条件検索を行っても、その検索条件の数が膨大化する。また、その条件が単純であると、非常に多くの変換対象を検索してしまい、国際化未対応の関数を適切に選出できないという問題があった。
【００１４】
さらに、プログラムの国際化には、国際化ライブラリの仕様から、プロジェクト毎、会社毎に適用する関数等を選択し、それによりプログラミング規約を決めて、統一的なプログラムの修正を行う場合が多い。この様に規約が多様なため、国際化の自動化は困難であった。
【課題を解決するための手段】
【００１５】
以上の課題を解決するために、本発明のプログラム変換システムでは、プログラムを選択する入力部と、入力部によって選択されたプログラムを字句・構文解析する字句構文解析部と、字句構文解析されたプログラムを国際化ルールデータに従って国際化解析する国際化解析部と、国際化解析部の解析結果に基づいて、プログラムにおける国際化未対応プログラム部分を国際化対応プログラムに変換する国際化プログラム変換部とを備えた。
【００１６】
また、本発明のプログラム変換方法では、国際化未対応プログラムを字句・構文解析する字句構文解析ステップと、字句構文解析されたプログラムを国際化ルールデータに従って国際化解析する国際化解析ステップと、国際化解析の結果に基づいて、国際化未対応プログラム部分を国際化対応プログラムに変換する国際化プログラム変換ステップとを行うこととした。
【発明の効果】
【００１７】
本発明は、国際化に対応していないプログラムに対して、まず、字句・構文解析を行うことによって、国際化未対応関数の構文定義された変換対象の解析結果を出力する。次に、プログラム言語毎に宣言部、関数呼び出し等にパターン定義される国際化ルールデータによって、字句・構文解析後の解析結果を適切な国際化関数に変換することで、国際化未対応プログラムを国際化対応プログラムに変換することを可能にする。
【００１８】
更に、プログラム言語毎の国際化ルールデータを修正可能とすることで、プロジェクト毎のプログラム規約の変更に対応することを容易とする。
【発明を実施するための最良の形態】
【００１９】
本発明による国際化に対応していないソフトウェアのプログラムを国際化に対応済みのプログラムに変換するプログラム変換システムに係る実施形態について、添付図面を参照して詳述する。以下では、その実施形態を、プログラム変換システムの具体例として説明する。
【実施例】
【００２０】
図１は、本発明に係るプログラム変換システムにおける機能の概略構成例を示す。この変換システムは、プログラム読み取り部１、字句構文解析部２、国際化解析部３、国際化プログラム変換部４、プログラム保存データベース（ＤＢ１、ＤＢ２）を有し、さらに、国際化ルールデータを保存する国際化ルールデータベース５と、プログラム読み取り部１の読取機能設定部ａ、字句構文解析部２の解析機能設定部ｂ、国際化ルールデータベースの国際化ルール設定部ｃを備えている。なお、読取機能設定部ａ、解析機能設定部ｂ、国際化ルール設定部ｃは、後述される入力装置に含まれる入力設定手段であり、表示部（図１では、図示されない）によって表示される読取機能設定画面、解析機能設定画面、国際化ルール設定画面を介して、入力部（図示されない）によって入力設定する手段を有する。
【００２１】
プログラム読み取り部１は、読取機能設定部ａでユーザによって指示された条件に従って、解析対象である国際化に対応していない１つ以上のプログラム、もしくは、対象ディレクトリ内の全プログラムを、プログラム保存データベース（ＤＢ１）から読み込む。
【００２２】
字句構文解析部２は、プログラム読み取り部１が読み込んだプログラムの字句・構文解析を行う。構文解析とは、文章の文法的な関係を明らかにすることである。そのためには、単なる字句を検索するだけではなく、文字列間を状態遷移のような関係で記述されなければならない。字句構文解析部２は、この字句・構文解析をＢＮＦ（バッカス正規形式）記法によって定義された構文ルールに従って実行する。
【００２３】
以下に示す数１に、本実施形態に係る字句構文解析部で字句・構文解析のために使用されるＢＮＦで記述された構文ルールの例を示す。
【００２４】
【数１】
2007080196.tif 000003
【００２５】
このＢＮＦコードには、国際化する対象プログラムを字句・構文解析するための構文ルールが記述される。このＢＮＦコードの第１行目から説明する。開始タグ“FUNCTION_USE::=”は、“FUNCTION_USE”（関数の呼び出し）が、次に続く超記号（メタ・シンボル）“::=”の後に構文定義されることを示す。開始タグの最初には、非終端記号としての構成要素“IDENTIFIER”が記述される。なお、“＜”と“＞”とで囲まれる要素のことを、構成要素といい、また、他の構文ルールで定義されない構成要素を終端記号という。構成要素“IDENTIFIER”は、２７行目と２８行目で終端記号の組合せで定義されている。これにより、関数呼び出しを定義する文字列の最初の部分が、IDENTIFIERの定義に合致した文字列として解析されることが示される。ここでいう解析を、メモリ等のハードウェア構成に関連して説明すると、“IDENTIFIER”という構成要素で示されるカテゴリー別に、配列データとして、メモリ上に保存されることを意味する。その配列データは、ＢＮＦ定義の構文ルールによって決まる他の構成要素が保存されている配列データのアドレスデータ情報（終端記号間の状態遷移情報）と、元のプログラム内の行等のアドレス情報と共に保存される。
【００２６】
“IDENTIFIER”の次に、“SPACE”、“COMMENT1”、“COMMENT2”のいずれかの構成要素が続くことが、これらの要素間にある超記号（メタ・シンボル）“｜”（“または”の意味）を用いて示されている。従って、対象プログラムを構文解析する場合においては、“IDENTIFIER”の次に来る文字列が、“SPACE”、“COMMENT1”、“COMMENT2”のいずれかの構成要素で示されるカテゴリーに分類されることが示されている。“SPACE”、“COMMENT1”、“COMMENT2”は、それぞれ数１の２４行目から２６行目で定義されている。“ SPACE”は、スペースやタブなどの空白文字を定義し、“COMMENT1”、“COMMENT2”は２種類の異なる形式のコメントの記述方法、例えば、“COMMENT1”は、コメントが文字“//”で開始され、“COMMENT2”は、コメントが文字“/*”で開始される等のように、定義している。
【００２７】
また、括弧で囲まれるこれらの構成要素の最後に記述される超記号（メタ・シンボル）“*”は、“SPACE”、“COMMENT1”、“COMMENT2”の何れかが、０回以上繰り返されることが示される。０回以上繰り返されるという意味は、これらの要素は、対象プログラム内に表示されない場合でも、何度も繰り返されて表示される場合も構文解析の対象とすることを意味する。
【００２８】
その次に非終端記号としての構成要素である“PARAM”が来る。非終端記号“PARAM”は、数１の２行目から２２行目までで定義される。
【００２９】
２行目以降に示す関数のパラメータの定義では、まず最初に終端記号“（”が記述される。これは、“PARAM”が、関数の識別子の後にくる括弧で括られるパラメータの文字列を構文解析対象とすることを示す。
【００３０】
また、２行目以降の構成要素内に、“IDENTIFIER”が超記号“＊”とともに記述される。これは、“IDENTIFIER”が、０回以上繰り替えしプログラム内にある場合も構文解析されることが示される。これは、“IDENTIFIER”が、括弧である“（”と“）”内に示されるような、関数の引数に関数呼び出しがあるプログラムも解析対象となることを示す。従って、数１で示される構文定義は、複雑な状態遷移を有する字句の関係を解析できることがわかる。
【００３１】
上述のように、ＢＮＦは、非終端記号と終端記号を用いて定義される。数１の例では、国際化解析で必要となるもののうち、「関数の呼び出し」にあたる文字列を“FUNCTION_USE”という非終端記号で定義している。「関数呼び出し」以外の国際化解析に必要な「文字リテラル／文字列リテラル」、「文字の比較演算」なども同様に定義される。これらの定義に従って構文解析が実行される。
【００３２】
また、字句・構文解析においては、その後にくる国際化解析において必要な解析結果を得られれば良い。従って、プログラムに記述されるその他の、構造の情報や、予約語（ｉｆ等）は、解析対象から外される。
【００３３】
また、字句・構文解析においては、解析対象のプログラムは、「関数呼び出し」、「文字リテラル／文字列リテラル」などの国際化解析に必要なカテゴリー毎の非終端記号（例えば、“IDENTIFIER”）を用いて状態遷移を有する終端記号（例えば、“IDENTIFIER”に相当する関数名“isspace”）の文字列という形で解析される。
【００３４】
次に、国際化解析部３では、字句構文解析部２の解析結果を基に、さらに、国際化ルールデータベース４に格納されている国際化ルールデータを参照して、国際化解析を行う。
【００３５】
国際化ルールデータは、プログラム言語（ＪＡＶＡ（登録商標）、Ｃ＋＋等）毎に、宣言部、関数仕様部、文字列部等のパターン（ＸＭＬデータ）を有している。
【００３６】
以下に示す表１は、Ｃ言語における国際化に関するデータ型の一部である。
【００３７】
【表１】
2007080196.tif 000004
【００３８】
表１は、Ｃ言語として用意されている国際化データ型の一部とその説明である。例えば、表１に示すデータ型wint_tは、ワイド文字の値を表現するための国際化用データ型である。この国際化用データ型に対応する国際化未対応データ型として、intが挙げられる。
【００３９】
このように、国際化用データ型は、その目的から国際化未対応データ型に対して用意されている。
【００４０】
以下に示す表２は、Ｃ言語における国際化関数の一部である。
【００４１】
【表２】
2007080196.tif 000005
【００４２】
表２は、Ｃ言語として用意されている国際化関数と、その機能の説明である。例えば、、表２に示すiswspace関数は、ワイド文字がspaceクラスかどうか調べる関数である。この国際化関数に対応する国際化未対応関数としてisspace関数が該当する。
【００４３】
このように、国際化関数も、その目的から国際化未対応関数に対して用意されているものであり、その対応はプログラム言語のライブラリにおいて予め明確に対応付けされている。
【００４４】
そのため、国際化関数（またはデータ型等）と国際化未対応関数（あるいはデータ型等）との関係を、国際化ルールデータとして予め定義することが可能である。従って、字句・構文解析の解析結果と国際化ルールデータの国際化未対応データ型または関数を照合することにより、その照合された国際化未対応関数等に対応する変換対象である国際化対応関数を見つけ出すことが可能である。
【００４５】
数２に国際化ルールのー実施例であるＸＭＬファイルを示す。
【００４６】
【数２】
2007080196.tif 000006
【００４７】
このＸＭＬファイルには、国際化未対応関数（変換対象データ）と国際化関数（変換候補データ）の対応関係が記述されている。例えば、１行目のTOKEN idは、変換対象となる国際化未対応関数である。また、alt-infoは、変換候補となる関数等を示すための要素である。付加情報であるerr-codeは、国際化未対応関数から国際化関数への変換理由を示すための要素であり、例えば、その要素のデータ“ECB001”は、“ワイド文字に対応していないデータ型です”という変換理由を意味する。
【００４８】
国際化処理部３は、ＸＭＬで記述された変換対象データ、例えば数２の“isspace”を、字句構文解析結果の構成要素“IDENTIFIER”として保存されるデータとの照合を行う。さらに、国際化処理部３が行う上記の照合は、単なるデータ（トークン）同士の照合のみではない。というのは、字句構文解析された各構成要素は、ＢＮＦで定義された関係（状態遷移）を有するため、関数の呼び出し（“IDENTIFIER”）のあるプログラム位置が、パラメータであってもその国際化未対応部分を照合できるからである。
【００４９】
さらに、関数の引数に関数呼び出しがあるような場合の他に、変数の利用箇所、宣言部分にさかのぼる場合等、ＸＭＬで定義される変換対象データと字句構文解析結果の構成要素との照合を確実に、つまり、変換対象データの欠落を生じず、かつ、なんら関係の無い文字列を変換対象データとすることなく、国際化プログラム変換を実行可能である。
【００５０】
さらに上述の例であれば、国際化解析の結果、候補となる国際化関数、例えば数２の国際化関数“iswspace”に相当する国際化未対応関数“isspace”を含むプログラム部分が判明する。変換箇所として検出されるプログラム部分は、単なる“isspace”という文字列のみではなく、後述される他の文字列との関係を有した形で示される。
【００５１】
また、変更の必要性が少なく、一般的な処理が可能な字句構文解析部２と、プロジェクト毎の国際化ルールの修正が頻繁に生じる国際化解析部３とを分離することで、字句構文解析部２による国際化未対応のプログラム内の国際化修正候補の照合が、変換対象データの欠落を生じず、かつ、構文上の関係を有さない文字列を変換対象データとすることなく適切に行われる。
【００５２】
さらに、国際化解析部３においては、国際化ルールデータベースの国際化ルールを国際化ルール設定ｃによって適宜修正することによって、プロジェクト毎のプログラミング規約の変更等に適切に対処することができる。また、変換対象データの欠落を生じず、かつ、構文上の関係を有さない文字列を変換対象データからはずすことで、ユーザによる解析結果の確認作業を省略することができるので、国際化解析を自動化することが可能である。
【００５３】
国際化プログラム変換部４は、さらに、変換結果確認部ｄを介して、プログラムの変換箇所（国際化されるべき関数またはデータ型部分等）と検出された問題点の情報の両方を同時に表示する機能を持っている。
【００５４】
図３は、本発明に係るプログラム変換システムの国際化解析部によって出力部（示されない）に表示される変換詳細情報画面の例を示す。変換詳細情報画面３０には、変換箇所がプログラムの宣言部にあるのか関数使用部にあるのかを示す構文の種類欄、プログラムの変換箇所を示す変換箇所欄、プログラム行欄、説明欄、変換候補欄、および、国際化関数に関する情報（i18n function）か、国際化データ型に関する情報（i18n macro）かを示す参考情報欄がある。
【００５５】
以下に示す数３は、図３の変換詳細情報画面に示される国際化解析結果となった解析対象の国際化未対応プログラムを示す。
【００５６】
【数３】
2007080196.tif 000007
【００５７】
数３は、stdin（標準入力）から読み取った文字データのうち、先頭の空白文字を読み飛ばした後、alnumクラスの文字の数を数えるプログラムである。このプログラムの処理では、１文字１バイトの英文字に対しては意図通りに動作するが、日本語の漢字を含むようなマルチバイト文字に対しては正しく動作しない。
【００５８】
図３の変換詳細情報画面３０の変換箇所欄には、字句構文解析部２と国際化解析部３によって検出された数３に示されるプログラムに対する変換箇所が表示されている。ＸＭＬの変換対象データと、字句・構文解析結果の照合結果として、変換箇所欄に示されるのは、関数もしくは関数の引数に関しても示される。
【００５９】
図３の例では、数３の１０行目、while(isspace(c=fgetc(stdin))) という１文を解析した結果として、isspace関数呼び出しの引数内に存在するfgetc関数呼び出しについても正確に解析している。また、変換箇所として国際化未対応関数であるisspace関数が検出され、国際化関数である置換候補iswspaceを候補にした結果、iswspaceの引数である文字データ“c”の型を国際化データ型に変換する必要がある。このため“c”を定義するデータ型である数３の５行目を変換対象と正確に解析している。これと異なり、プログラムの処理の中で、国際化データ型に変更する必要が無い６行目の型定義intに関しては、変換候補と提示していない。また、ロケールを設定するために、setlocale関数が変換候補として解析される。
【００６０】
また、変換候補欄には、その変換される説明と、変換される関数またはデータ型の参考情報がリンクとして表示されている。変換情報は、国際化ルールデータベース５に保存されており、必要に応じて、国際化ルール設定部ｃで画面に表示された変換詳細情報画面３０を確認し、入力部（図示されない）によって編集することが可能である。
【００６１】
さらに、ユーザは、この変換詳細情報画面３０を確認し、それぞれの変換箇所の行毎に確認し、または、図示されないが変換候補毎にカテゴライズされた変換候補画面を確認することで変換箇所を確認することによって、ユーザの確認を入力部に入力することで、国際化プログラム変換部４は、変換箇所は、変換候補に変換し、プログラム保存データベース（ＤＢ２）に保存される。
【００６２】
また、この変換作業は、ユーザにとっては、国際化に関する学習機会として有用である。さらに、国際化変換が適切になされると期待できる場合は、ユーザの確認作業を行わず、国際化解析部３の国際化解析処理終了後、国際化プログラム変換部４による国際化未対応プログラム部分を、国際化対応プログラム部分に変換し、プログラム保存データベース（ＤＢ２）に国際化変換後のプログラムを保存しても良い。
【００６３】
以下に示す数４は、図３の変換詳細情報画面に示される国際化解析結果の確認、または、ユーザの確認を行わず自動で変換が行われた場合の国際化対応プログラムを示す。
【００６４】
【数４】
2007080196.tif 000008
【００６５】
図３に示された変換箇所が、変換候補に変換された結果、例えば、８行目に“c”のデータ型がwint_tに代わり、１３行目にロケールを設定するためにsetlocale関数が挿入され、標準入力された１文字１バイトの英文字に対しても、日本語などのマルチバイトに対しても正しく動作する国際化対応プログラムとなった。
【００６６】
以上において、本発明に係るプログラム変換システムにおける機能の概略について説明された。
【００６７】
以上に説明された本発明に係るプログラム変換処理に関する一例を、図２のフローチャートにより説明する。
【００６８】
図２に示されるように、フローチャートでは、まず、ステップＳ２１において、プログラム読み取り部１は、読取機能設定部ａで設定された国際化未対応の解析対象プログラムをインポートする。次いで、ステップＳ２２に進む。
【００６９】
ステップＳ２２では、字句構文解析部２に対し、解析機能制御設定部ｂでのプログラム言語、プログラム言語毎のライブラリ（例えば、Ｍｏｔｉｆ、Ｗｉｎ３２等）の選択を行い、その情報を与え、次のステップＳ２３に進む。
【００７０】
ステップＳ２３では、字句構文解析部２は、プログラム毎の国際化に必要な最小限の情報と構文定義とを基に解析対象プログラムの字句解析および構文解析を行う。
【００７１】
ステップ２４では、国際化解析部３は、ステップＳ２３の構文解析結果に基づいて、国際化ルールデータベース５に保存されている国際化ルールデータを参照しながら、国際化解析処理を行う。解析処理が終了すると、ステップＳ２５に進む。
【００７２】
ステップＳ２５では、国際化プログラム変換部４は、国際化解析部３の解析結果を表示するとともに、プログラムの変換箇所について、変換候補とその変更に関する学習の情報を付加して結果を提示する。解析結果生成部４は、さらに出力部（図示されない）に、プログラムの変更箇所と検出された問題点の情報の両方を同時に表示する機能を持っている。
【００７３】
次にステップＳ２６に進み、ユーザによって変換候補が確認されると、ステップＳ２７に進み、解析対象のプログラムのあったディレクトリへエクスポートされ、解析処理が終了する。
【００７４】
また、ユーザによって、字句・構文解析結果と国際化ルールデータで定義された国際化未対応関数等との照合結果によって生じる変換候補が多すぎる、あるいは、少なすぎると判断される場合は、ステップＳ２８に進み、国際化ルール設定ｃによって、国際化ルールを修正する。その修正が終了すると、再度ステップＳ２４に進み、国際化解析を行う。
【００７５】
図４は、本発明に係るハードウェア構成を示す図である。図１のプログラム変換システムは、例えば、図４に示すようなコンピュータ１０により実行される。コンピュータ１０は、ＣＰＵ１１、および、ＣＰＵ１１に対してプログラム（データ）を与え、或いは、処理された結果を格納するメモリ１２（例えば、ＲＡＭ（Random Access Memory））、ディスプレイ１３、例えば、キーボードやマウスのような入力装置１４、ハードディスク１５等を備える。
【００７６】
プログラム変換方法を実行する国際化解析プログラム（データ）は、記録媒体に保存され、ＣＤ／ＤＶＤドライブ１７等からローディングされて、ＣＰＵ１１の制御によって、コンピュータ１０のハードディスク１５に保存され、次に、プログラムを実行するために、ＣＰＵ１１の制御によって、メモリ１２に格納され、更に、ＣＰＵ１１の制御によってＣＰＵ１１に送られ、そこで、プログラムは、ＣＰＵ１１で実行、処理される。また、図１に示されるプログラム読み取り部１、字句構文解析部２、国際化解析部３、および、国際化プログラム変換部４の各処理は、ＣＰＵ１１で実行される。
【００７７】
国際化未対応、および、国際化対応のプログラムは、ハードディスク１５内に保存され、国際化ルールデータは、ハードディスク１５内に、ＸＭＬのファイル形式でファイル保存され、もしくは、リレーショナルデータベースやＸＭＬデータベース内に保存される。読取機能設定部ａ、解析機能設定部ｂ、国際化ルール設定部ｃはディスプレイ１３に設定画面を表示させ、変換結果確認部ｄは、ディスプレイ１３に確認画面を表示させ、その設定／確認情報は入力装置１４によって入力される。
【００７８】
また、入力装置を介し選択された国際化未対応プログラムは、ＣＰＵ１１の制御によって、ハードディスク１５から、メモリ１２に送られ、メモリ１２に格納される。次に、ＣＰＵ１１は、国際化未対応プログラムを、メモリ１２からＣＰＵ１１に送り、字句構文解析部２の処理は、国際化未対応プログラムを字句構文解析処理する。ＣＰＵ１１で実行／処理された解析結果は、メモリ１２に送られる。国際化解析部３の処理は、国際化ルールデータベースからＸＭＬで定義された国際化ルールデータをメモリ１２に格納し、ＣＰＵ１１でそのＸＭＬデータを抜き取り処理（パース）を行い、抜き取り処理されたデータを、再度メモリ１２に格納する。
【００７９】
国際化解析部３による処理は、メモリ１２に格納された国際化ルールを参照し、メモリ１２に格納された字句構文解析結果に対して国際化解析処理を行う。ＣＰＵ１１で解析処理された国際化解析結果は、ＣＰＵ１１によってメモリ１２に送られ、メモリ１２に格納され、さらにＣＰＵ１１はその国際化解析結果をディスプレイ１３に表示する。
【００８０】
ディスプレイ１３によって表示された国際化解析結果が、ユーザによって承認されると、メモリ１２（またはハードディスク１５）に格納されていた国際化解析結果は、ＣＰＵ１１によってハードディスク１５に保存される。なお、メモリ１２にデータを格納される場合は、メモリ１２の容量の関係からハードディスク１５に仮保存される場合がある。
【００８１】
また、本発明に係るプログラム変換システムを実行する国際化解析プログラムは、コマンドベースのソフトウェアとして実施可能である。その場合、国際化未対応プログラムのディレクトリパス、読取機能設定部ａの設定内容、解析機能設定部ｂの設定内容、国際化ルールを記述したＸＭＬファイルのディレクトリパス等は、全てコマンドのパラメータ（引数）等で指定される。
【００８２】
プログラム変換システムの起動や、プログラム変換方法をコンピュータに実行させるプログラムの起動に際しては、入力装置１４から起動の他に、ＣＰＵ１１で実行中の他プログラムから起動し、回線１６に接続された他コンピュータ１９から起動し、或いは、他コンピュータ１９内の実行中のプログラムから起動されるようにしても良い。入力装置１４から入力されたユーザの確認情報に従って、ＣＰＵ１１は、国際化未対応プログラム部分を、国際化対応プログラム部分に変換し、変換された国際化対応プログラム部分は、ハードディスク１５に保存される。
【００８３】
以上説明したように、本発明においては、プログラム変換技術により、ソフトウェア変換システムおよびソフトウェア変換方法は、国際化未対応のプログラムを国際化プログラムに変換することを可能にしている。また、国際化解析結果によって、国際化未対応プログラム部分の欠落を生じず、また、構文上関係を有さない部分が生じないように、字句構文解析を記述する構文ルールと、国際化ルールデータが定義される場合、ユーザの確認を有することなく、国際化プログラム変換処理が自動化される。
【図面の簡単な説明】
【００８４】
【図１】本発明に係るプログラム変換システムにおける機能構成例を示す図である。
【図２】本発明に係るプログラム変換処理の一例を説明するフローチャートである。
【図３】本発明に係るプログラム変換システムの国際化解析部によって表示される変換候補とその関連情報の詳細画面の一例を示す図である。
【図４】本発明に係るプログラム変換システムのハードウェア構成を示す図である。
【符号の説明】
【００８５】
１    プログラム読み取り部
２    字句構文解析部
３    国際化解析部
４    国際化プログラム変換部
５    国際化ルールデータベース
１０    コンピュータ
１１    ＣＰＵ
１２    メモリ
１３    ディスプレイ
１４    キーボード
１５    ハードディスク
１６    回線
１７    ＣＤ／ＤＶＤドライブ
１９    他のコンピュータ
３０    変換詳細情報画面
【図１】
2007080196.tif 000009
【図２】
2007080196.tif 000010
【図３】
2007080196.tif 000011
【図４】
2007080196.tif 000012