(57)【要約】【課題】構文エラー範囲に対応するコメントの翻訳精度を向上させる技術を提供する。【解決手段】翻訳プログラムが、コンピュータに、ソースコードと第１言語で記述されたコメントとを含むソースファイルデータを取得し、ソースコードの構文解析により発生した構文エラーの発生範囲を特定し、ソースコードに関して、構文エラーの発生範囲に出現する単語であって構文エラーの発生範囲外に出現しない単語を抽出し、構文エラーの発生範囲にて第２言語に翻訳されたコメントにおいて、抽出された単語に対応する第２言語で記述された単語に、抽出した単語を関連付けて出力する処理を実行されることにより、上記課題の解決を図る。【選択図】図３
2015170134.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
ソースコードと第１言語で記述されたコメントとを含むソースファイルデータを取得し、
前記ソースコードの構文解析により発生した構文エラーの発生範囲を特定し、
前記ソースコードに関して、前記構文エラーの発生範囲に出現する単語であって該構文エラーの発生範囲外に出現しない単語を抽出し、
前記構文エラーの発生範囲にて該第２言語に翻訳された前記コメントにおいて、抽出された前記単語に対応する第２言語で記述された単語に、抽出した前記単語を関連付けて出力する
処理を実行させることを特徴とする翻訳プログラム。
【請求項２】
前記単語の抽出において、前記構文エラーの発生範囲外の前記ソースコードから、前記構文解析により得られた、予め宣言された単語を取得し、前記構文エラーの発生範囲に含まれる単語から、前記予め宣言された単語及び予約語と重複しない単語を抽出する
ことを特徴とする請求項１に記載の翻訳プログラム。
【請求項３】
前記単語の抽出において、前記構文エラーの発生範囲外の前記ソースコードから、前記構文解析により得られた、予め宣言された単語を取得し、前記構文エラーの発生範囲の前記ソースコードから、所定の記述規則に適合する単語を取得し、前記所定の記述規則に適合する単語から、前記予め宣言された単語と重複しない単語を抽出する
ことを特徴とする請求項１に記載の翻訳プログラム。
【請求項４】
ソースコードと第１言語で記述されたコメントとを含むソースファイルデータを取得する取得部と、
前記ソースコードの構文解析により発生した構文エラーの発生範囲を特定する特定部と、
前記ソースコードに関して、前記構文エラーの発生範囲に出現する単語であって該構文エラーの発生範囲外に出現しない単語を抽出する抽出部と、
前記構文エラーの発生範囲にて該第２言語に翻訳された前記コメントにおいて、抽出された前記単語に対応する第２言語で記述された単語に、抽出した前記単語を関連付けて出力する出力部と、
を備えることを特徴とする翻訳装置。
【請求項５】
前記抽出部は、前記構文エラーの発生範囲外の前記ソースコードから、前記構文解析により得られた、予め宣言された単語を取得し、前記構文エラーの発生範囲に含まれる単語から、前記予め宣言された単語及び予約語と重複しない単語を抽出する
ことを特徴とする請求項４に記載の翻訳装置。
【請求項６】
前記抽出部は、前記構文エラーの発生範囲外の前記ソースコードから、前記構文解析により得られた、予め宣言された単語を取得し、前記構文エラーの発生範囲の前記ソースコードから、所定の記述規則に適合する単語を取得し、前記所定の記述規則に適合する単語から、前記予め宣言された単語及び予約語と重複しない単語を抽出する
ことを特徴とする請求項４に記載の翻訳装置。
【請求項７】
コンピュータが、
ソースコードと第１言語で記述されたコメントとを含むソースファイルデータを取得し、
前記ソースコードの構文解析により発生した構文エラーの発生範囲を特定し、
前記ソースコードに関して、前記構文エラーの発生範囲に出現する単語であって該構文エラーの発生範囲外に出現しない単語を抽出し、
前記構文エラーの発生範囲にて該第２言語に翻訳された前記コメントにおいて、抽出された前記単語に対応する第２言語で記述された単語に、抽出した前記単語を関連付けて出力する
処理を実行することを特徴とする翻訳方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、翻訳技術に関する。
【背景技術】
【０００２】
製品を開発する過程において、海外の拠点と共同して開発する機会は多い。その際に、ソースコードの説明文（ソースコメント）が未翻訳なため、関数動作が分からないという自体に陥ることがある。手動で翻訳すればいいが、それは手間と時間がかかるという問題点がある。これらの作業は、翻訳量が少量の場合は大した問題にはならないが、現代社会のほとんどの開発体系を占める「大規模開発」になると、その量は多くなり、手間がどんどん増えていってしまう。
【０００３】
ソースコメントを利用した技術としては、例えば、第１及び第２技術がある。第１技術としては、プログラムの注釈部分のみ機械的に翻訳する技術がある（例えば、特許文献１）。第１技術では、プログラム読込手段が、外部記憶装置よりプログラムを読込み、翻訳前プログラム記憶手段に記憶し、プログラム言語指定手段はプログラム言語の種別を注釈抽出手段に通知する。注釈抽出手段は、翻訳前プログラム記憶手段に保持されたプログラムを構成するロジック部分と注釈部分の内、注釈部分を抽出して注釈記憶手段に保存する。機械翻訳手段は注釈記憶手段に保持された注釈を、その記述される言語から他の指定された言語へと翻訳し、注釈記憶手段に保存する。翻訳された注釈は注釈組込手段によってプログラムに組込まれ、翻訳後プログラム記憶手段に保存される。翻訳後プログラム記憶手段はプログラム書込手段により、外部記憶装置に書込まれる。
【０００４】
また、第２技術として、プログラムに含まれるコメント等を利用して、関数名や変数名の参考となる名前データベースを作成する技術がある（例えば、特許文献２）。第２技術では、関数／変数／コメント特定手段により特定した関数、変数又はコメントと、コメント解析手段により生成した検索用インデックスと、に基づいて、関数、変数又はコメントに対応する検索用インデックスを含む名前データベースを作成する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−２０５２５号公報
【特許文献２】特開２００９−３０１３８５号公報
【特許文献３】特開２０１０−１７６４３９号公報
【特許文献４】特開２００９−２５１６８４号公報
【特許文献５】特開２０１３−１３４７５３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
第２技術では、ソースコードの構文解析がされたものが対象であり、構文エラーとならないソースコードが前提となっている。ソースコードの解析を行うためには構文が正しく書かれていることが必要である。したがって、構文エラーが含まれているソースコードではソースコードの解析ができず、変数一覧も取得できない。ソースコメントの翻訳においては、単純に翻訳するとかえって意味が正しい文章ではなくなる単語が含まれる場合があり、例えば、変数名、関数名、マクロ名等が挙げられる。そのため、構文エラーが含まれているソースコード内では、単語が変数名、関数名、マクロ名等の翻訳除外候補であるかを判別することができない。
【０００７】
その結果、図２に示すように、構文エラー内でのみ出現する単語がコメントに含まれている場合、その単語が翻訳除外候補として本来翻訳されるべきものではないとしても、翻訳除外候補として認識されないため、翻訳されてしまうことになる。したがって、例えば、新しい関数や変数追加時に関連するコメントが発生した場合、構文エラーが生じると、変数や関数が認識されないので、コメント翻訳時にそのような問題が生じることが考えられる。
【０００８】
本発明は、一側面として、構文エラー範囲に対応するコメントの翻訳精度を向上させる技術を提供する。
【課題を解決するための手段】
【０００９】
本発明の一側面にかかる翻訳プログラムは、コンピュータに次の処理を実行させる。コンピュータは、ソースコードと第１言語で記述されたコメントとを含むソースファイルデータを取得する。コンピュータは、ソースコードの構文解析により発生した構文エラーの発生範囲を特定する。コンピュータは、ソースコードに関して、構文エラーの発生範囲に出現する単語であって構文エラーの発生範囲外に出現しない単語を抽出する。コンピュータは、構文エラーの発生範囲にて第２言語に翻訳されたコメントにおいて、抽出された単語に対応する第２言語で記述された単語に、抽出した単語を関連付けて出力する。
【発明の効果】
【００１０】
本発明の一側面によれば、構文エラー範囲に対応するコメントの翻訳精度を向上させることができる。
【図面の簡単な説明】
【００１１】
【図１】英語で記載されたコメントの翻訳について説明するための図である。
【図２】英語で記載されたコメントの翻訳において、変数まで翻訳されることを説明するための図である。
【図３】本実施形態における翻訳装置の一例を示す。
【図４】本実施形態における構文エラーが起こらないソースファイルについての全体の流れを説明するための図である。
【図５】本実施形態における構文エラー箇所翻訳方法１を用いたソース解析（Ｓ４）を説明するための図である。
【図６】本実施形態における構文エラー箇所翻訳方法２を用いたソースコードの記述パターンを利用して、変数を判別することを説明するための図である。
【図７】本実施形態の実施例に係る翻訳装置の構成例を示す。
【図８】本実施形態の実施例における翻訳除外候補一覧の一例を示す。
【図９】本実施形態の実施例における翻訳コメントテーブルの一例を示す。
【図１０】本実施形態の実施例におけるエラー行番号テーブルの一例を示す。
【図１１】本実施形態の実施例における例外候補一覧の一例を示す。
【図１２】本実施形態の実施例における制御部による翻訳処理フローを示す。
【図１３】本実施形態の実施例におけるソースファイルの解析処理（Ｓ１３）の詳細フローを示す。
【図１４】本実施形態の実施例における構文エラー範囲外翻訳方法による処理フローを示す。
【図１５】本実施形態（実施例１）における構文エラー箇所翻訳方法１による処理フローを示す。
【図１６】本実施形態（実施例２）における構文エラー箇所翻訳方法２による処理フローを示す。
【図１７】本実施形態における翻訳結果の出力処理（Ｓ１６）の詳細フローを示す。
【図１８】本実施形態の実施例におけるプログラムを実行するコンピュータのハードウェア環境の構成ブロック図の一例である。
【発明を実施するための形態】
【００１２】
ソースコメントを翻訳しようとして、翻訳サイト等に原文をそのままコピー＆ペーストしても、図１（Ａ）に示すように、コメント中の変数名まで翻訳してしまう。そのため、翻訳文が煩雑になってしまう場合や、コメントが複数行にまたがっている場合は、コメント記号（//や/* 等）が混ざってしまい翻訳できないといった自体に陥ったりする。
【００１３】
そこで、ソースコメント内の文章を英日翻訳しようとした際に、現在だと以下の手順を踏む必要がある。まず、ソースを開き、翻訳したい部分の英文をコピーする。コピーする際、コメント記号を除き、変数名、関数名、マクロ名等の「翻訳しない英単語」（以下、翻訳除外候補と称する）がある場合は、図１（Ａ）に示すように、翻訳除外候補を大文字に変える等の処置を施す。そして、翻訳除外候補について処置を施した英文を翻訳し、結果を確認する。この手順は、日英翻訳の場合も同様である。
【００１４】
翻訳エンジンで変数を意識せずにコメントを翻訳すると、翻訳する必要のない変数が翻訳されて、意味がわからないコメントとなってしまう。そのために、翻訳対象外の単語を予め登録しておくことが考えられる。例えば、上記第１技術では、コメント部分を抽出し、コメント部分に含まれる単語が予め登録した翻訳対象外パターンと一致する単語を含むかを確認している。しかしながら、翻訳対象外パターンは固定的に登録されるものであり、ソースコードに応じて、翻訳する必要のない変数等を人の手で登録する必要がある。
【００１５】
また、上述したように、第２技術は、ソースコードの構文解析がされたものが対象であり、構文エラーとならないソースコードが前提となっている。したがって、構文エラー内でのみ出現する単語がコメントに含まれている場合、その単語が翻訳除外候補として本来翻訳されるべきものではないとしても、翻訳除外候補として認識されないため、翻訳されてしまうことになる。したがって、例えば、新しい関数や変数追加時に関連するコメントが発生した場合、構文エラーが生じると、変数や関数が認識されないので、コメント翻訳時にそのような問題が生じることが考えられる。
【００１６】
このように、従来、どの単語が変数かということはソースコードの構文解析を経なければ判別できず、結果としてどの単語を翻訳から除外すればよいのかはソースコード全体を把握していなければ分からない。本実施形態では、下記の手順を行うことにより、構文エラー範囲に対応するコメントの翻訳精度を向上させる。
【００１７】
図３は、本実施形態における翻訳装置の一例を示す。翻訳装置１は、取得部２、特定部３、抽出部４、出力部５を含む。
【００１８】
取得部２は、ソースコードと第１言語で記述されたコメントとを含むソースファイルデータを取得する。取得部２の一例として、制御部１２が挙げられる。
【００１９】
特定部３は、ソースコードの構文解析により発生した構文エラーの発生範囲を特定する。取得部２の一例として、制御部１２が挙げられる。
【００２０】
抽出部４は、ソースコードに関して、前記構文エラーの発生範囲に出現する単語であって該構文エラーの発生範囲外に出現しない単語を抽出する。抽出部４の一例として、制御部１２が挙げられる。
【００２１】
出力部５は、構文エラーの発生範囲にて第２言語に翻訳されたコメントにおいて、抽出された単語に対応する第２言語で記述された単語に、該抽出した前記単語を関連付けて出力する。出力部５の一例として、制御部１２が挙げられる。
【００２２】
このように構成することにより、構文エラー範囲に対応するコメントの翻訳精度を向上させることができる。
【００２３】
また、抽出部４は、構文エラーの発生範囲外のソースコードから、構文解析により得られた、予め宣言された単語を取得する。抽出部４は、構文エラーの発生範囲に含まれる単語から、予め宣言された単語及び予約語と重複しない単語を抽出する。
【００２４】
このように構成することにより、構文エラーが発生した範囲にて初めて出現した単語を例外候補として抽出し、翻訳前後の例外候補を関係付けて出力することができる。その結果、構文解析エラーとなって、関数、変数、マクロ名と認識されずに翻訳された単語に、翻訳前の単語を併記して出力させることで、構文エラー範囲に対応するコメントの翻訳精度を向上させることができる。
【００２５】
抽出部４は、構文エラーの発生範囲外のソースコードから、構文解析により得られた、予め宣言された単語を取得する。抽出部４は、構文エラーの発生範囲の前記ソースコードから、所定の記述規則に適合する単語を取得する。抽出部４は、前記所定の記述規則に適合する単語から、前記予め宣言された単語と重複しない単語を抽出する。
【００２６】
このように構成することにより、構文エラーが発生した範囲にて初めて出現した単語を例外候補として抽出し、翻訳前後の例外候補を関係付けて出力することができる。その結果、構文解析エラーとなって、関数、変数、マクロ名と認識されずに翻訳された単語に、翻訳前の単語を併記して出力させることで、構文エラー範囲に対応するコメントの翻訳精度を向上させることができる。
【００２７】
本実施形態では、一例として、オープンソースの統合ソフトウェア開発環境（ＩＤＥ）の一つであるＥｃｌｉｐｓｅを用いて、ソースファイルを開いた時に、ソースファイル中のコメント（ソースコメント）が翻訳される場合について説明する。なお、ＩＤＥは、Ｅｃｌｉｐｓｅに限定されない。
【００２８】
図４は、本実施形態における構文エラーが起こらないソースファイルについての全体の流れを説明するための図である。コンピュータ１１には、Ｅｃｌｉｐｓｅ実行環境がインストールされている。
【００２９】
（Ｓ１）コンピュータ１１は、オペレーティングシステム（ＯＳ）のロケールの判定を行う。ロケールとは、ソフトウェアに内蔵される、言語や国・地域ごとに異なる単位、記号、日付、通貨などの仕様である。ＯＳが日本語仕様の場合には日英翻訳が行われる。ＯＳが英語仕様の場合には英日翻訳が行われる。
【００３０】
（Ｓ２）コンピュータ１１は、ユーザによって入力されたソースファイル１０を開く（ｆｉｌｅ  ｏｐｅｎ）。
【００３１】
（Ｓ３）コンピュータ１１は、ソースファイル１０の拡張子を参照することにより、ソースコードを記述しているプログラム言語（Ｊａｖａ（登録商標）、Ｃ＋＋、ＣＯＢＯＬ等）を判定する。
【００３２】
（Ｓ４）コンピュータ１１は、ソースファイル１０の解析を行う。解析する内容は以下の通りである。コンピュータ１１は、プログラム言語ごとに規定されているコメント記号（Ｊａｖａなら”//”,”/* 〜 */”）に基づいて、コメントの判別を行い、ソースファイル１０からコメント部分を取り出す（Ｓ４−１）。
【００３３】
コンピュータ１１は、取り出したコメントが記述されているソースファイル１０上の行番号を記憶装置に保存する（Ｓ４−２）。コメントが複数行にまたがる場合、コンピュータ１１は、その行の範囲も記憶装置に保存する。
【００３４】
コンピュータ１１は、ソースファイル１０内にある変数、関数、及びマクロ定義を全て解析して変数一覧を作成し、その変数一覧を翻訳除外候補一覧２１として記憶装置に保存する（Ｓ４−３）。
【００３５】
（Ｓ５）コンピュータ１１は、ソースファイル１０から翻訳すべき箇所を取り出す。コンピュータ１１は、コメント文においてコメント記号を削除する。それから、コンピュータ１１は、コメント内にある翻訳除外候補と同じ単語に対して、翻訳対象から除外するために、例えば、その翻訳除外候補と同じ単語を大文字に変換する等の整形を行う。
【００３６】
（Ｓ６）コンピュータ１１は、Ｓ５の処理がされたコメントを、翻訳エンジンを用いて翻訳する。
【００３７】
（Ｓ７）コンピュータ１１は、Ｅｃｌｉｐｓｅのエディタを開く。
【００３８】
（Ｓ８）コンピュータ１１は、翻訳結果をＥｃｌｉｐｓｅのエディタ上に戻す。例えば、翻訳結果を表示させる方法としては、元のファイルにその翻訳結果を出力したり、ポップアップで画面上に表示させる等の方法がある。
【００３９】
上述したように、図４は、構文エラーが起こらないソースファイルについての翻訳方法（以下、「構文エラー範囲外翻訳方法」と称する。）である。しかしながら、例えば、図５に示すように、宣言されていない変数が使用されているために構文エラーが発生したソースコードについては、その変数により表される文字または文字列が、実際に変数か否かを判別することができない。
【００４０】
そこで、ソースコードにおいて構文エラーが起こる箇所については、下記の方法（以下、「構文エラー箇所翻訳方法」という。）を行う。構文エラー箇所翻訳方法としては、構文エラー箇所翻訳方法１，２がある。まずは、構文エラー箇所翻訳方法１について説明する。
【００４１】
構文エラー箇所翻訳方法１において、Ｓ１〜Ｓ３までは、図４で説明した構文エラー範囲外翻訳方法と同様である。Ｓ４のソースコード解析については、図４で説明する。
【００４２】
図５は、本実施形態における構文エラー箇所翻訳方法１を用いたソース解析（Ｓ４）を説明するための図である。Ｓ４のソース解析では、コンピュータ１１は、次の処理を行う。
【００４３】
図５（Ａ）に示すように、コンピュータ１１は、構文チェックの結果、ソースファイル１０にて構文エラーを起こす箇所が検出された場合、ＩＤＥの機能を用いてエラーが発生した行の行番号（エラー開始行とエラー終了行）を取得する。それから、コンピュータ１１は、その取得した行番号（エラー開始行とエラー終了行）を記憶装置に保存する（Ｓ４−１Ａ）。
【００４４】
コンピュータ１１は、ソースファイル１０において構文エラーが発生した行の範囲内において、翻訳除外候補となりうる単語を抽出する。その抽出の方法では、コンピュータ１１は、まず構文エラーが生じているソースコードの範囲内から全ての単語を抽出し、その抽出した全ての単語から言語毎の予約語（ｉｎｔ、ｂｏｏｌ等）を除いた単語を例外候補として記憶装置に保存する。エラー範囲内において予約語を除外している理由は、予約語が翻訳の対象とする単語になりえるからである（例：ｎｕｍｂｅｒが予約語である言語もあるが、ｎｕｍｂｅｒ自体は「数」という英語として用いられることが多く、後者の場合には翻訳の対象となる。）。
【００４５】
コンピュータ１１は、構文エラーが生じている範囲外のソースコードについて、既に構文エラー範囲外翻訳方法で取得している翻訳除外候補一覧２１に、例外候補と同じ単語があるか検索する（Ｓ４−３Ａ）。
【００４６】
コンピュータ１１は、翻訳除外候補一覧２１に例外候補と同じ単語がある場合は、例外候補からその単語を外す（Ｓ４−４Ａ）。一方、コンピュータ１１は、翻訳除外候補一覧２１に例外候補と同じ単語がない場合は、その例外候補として分類した未確定の単語を、正式に確定させる（Ｓ４−５Ａ）。
【００４７】
構文エラー箇所翻訳方法１において、Ｓ５〜Ｓ７までは図４で説明した構文エラー範囲外翻訳方法と同様である。翻訳結果表示フェーズ（Ｓ８）では、コメント内に例外候補にある単語が現れた場合には、コンピュータ１１は、図５（Ｂ）に示すように、その単語の原文及び翻訳語を並べて、表示装置に表示させる。
【００４８】
構文エラー箇所翻訳方法１では、ソースコード内の単語をキーに例外候補の候補を選出しているが、言語毎の規約を用いて選出する方法（構文エラー箇所翻訳方法２）もある。構文エラー箇所翻訳方法２の手順は、以下の通りである。
【００４９】
構文エラー箇所翻訳方法２において、Ｓ１〜Ｓ３までは、図４で説明した構文エラー範囲外翻訳方法と同様である。Ｓ４のソース解析では、コンピュータ１１は、構文チェックの結果、ソースファイル１０に構文エラーを起こす箇所が検出された場合、ＩＤＥの機能を用いてエラーが発生した行の行番号（エラー開始行とエラー終了行）を取得する。それから、コンピュータ１１は、その取得した行番号（エラー開始行とエラー終了行）を記憶装置に保存する（Ｓ４−１Ａ）。
【００５０】
コンピュータ１１は、構文エラーが生じているソースコードの範囲内において、翻訳除外候補となりうる単語を抽出する（Ｓ４−２Ｂ）。ここで、コンピュータ１１は、その抽出の方法として言語毎の規約を利用する。言語には予約語があり、図６に示すように、宣言用の予約語がソースコード中に現れた場合、その予約語の後ろにある単語は高確率で変数である。同様に、図６に示すように、”(”や”{“等の開き括弧がソースコード中に現れた場合、その開き括弧の前にある単語は高確率で予約語か関数である。よって、コンピュータ１１は、構文エラーが生じているソースコードの範囲内において、翻訳除外候補となりうる単語を抽出後、その抽出した単語から予約語を除外することで変数名を取得可能となる。コンピュータ１１は、このような言語のルールより例外候補となり得る単語を全て抽出する。
【００５１】
その後、コンピュータ１１は、構文エラー箇所翻訳方法１と同様に、Ｓ４−３Ａ〜Ｓ４−５Ａ、Ｓ５〜Ｓ７を行う。
【００５２】
本実施形態によれば、構文エラー範囲に対応するコメントの翻訳精度を向上させることができるので、オフショア開発等の効率が上がる。
【００５３】
以下では、本実施形態の実施例について説明する。
図７は、本実施形態の実施例に係る翻訳装置の構成例を示す。コンピュータ１１は、制御部１２、記憶部２０を含む。翻訳装置は、コンピュータ１１の制御部１２が本実施形態に係るプログラムを実行することにより、実現される。コンピュータ１１は、一例として、Ｊａｖａ実行環境１４、Ｅｃｌｉｐｓｅ １５、及び翻訳エンジン１７を含む。Ｊａｖａ実行環境１４は、コンピュータ１１上でＪａｖａアプリケーションプログラムを動かせるようにするソフトウェア群である。Ｊａｖａ実行環境１４は、Ｅｃｌｉｐｓｅ １５がコンピュータにインストールされている場合には含まれている。翻訳エンジン１７は、ある言語を別の言語に翻訳する。なお、本実施形態では、翻訳エンジン１７がコンピュータにインストールされているが、これに限定されず、翻訳エンジンの代わりに、例えば、インターネット上の翻訳サイトを利用しても良い。
【００５４】
記憶部２０は、翻訳除外候補一覧２１、翻訳コメントテーブル２２、エラー行番号テーブル２３、例外候補テーブル２４を格納する。
【００５５】
制御部１２は、本実施形態におけるプログラムを記憶部２０より読み出して、翻訳処理１３を行う。翻訳処理１３において、制御部１２は、記憶部２０に記憶されているまたは入力装置より入力されたソースコメント１６とソースコードとが記述されたソースファイルを読み出す。制御部１２は、ソースコメントを取り出す前にソースファイル全体を解析し、各プログラミング言語に応じた変数宣言の部分で、宣言されている文字または文字列、すなわち単語を翻訳除外候補一覧２１に記憶し、翻訳除外候補とする。
【００５６】
制御部１２は、構文エラーを起こす行に関しては、行番号をエラー行番号テーブル２３に記憶しておき、構文エラー箇所翻訳方法１または２を用いる。
【００５７】
制御部１２は、翻訳対象の文であるソースコメントを翻訳エンジン１７に渡す際、そのソースファイル内で宣言されている単語、すなわち変数が翻訳されないよう、例えば、大文字にする等の処理を加える。
【００５８】
制御部１２は、翻訳不要な単語に処理を加えた翻訳文を翻訳エンジン１７に渡す。大文字に変換する等の処理を施した単語は翻訳されないので、結果としてソースファイル内で宣言した変数は翻訳されない。また、制御部１２は、例外候補については、翻訳前の語と翻訳後の語とを並べて表示させる。
【００５９】
図８は、本実施形態の実施例における翻訳除外候補一覧の一例を示す。翻訳除外候補一覧２１は、「ＩＤ」２１−１と、「翻訳所徐除外候補」２１−２のデータ項目を含む。「ＩＤ」２１−１には、ソースファイルを識別する情報（ソースファイルＩＤ）が格納される。「翻訳所徐除外候補」２１−２には、ソースコード中に出てくる単語がそのまま格納される。
【００６０】
図９は、本実施形態の実施例における翻訳コメントテーブルの一例を示す。翻訳コメントテーブル２２は、「ＩＤ」２２−１、「開始行」２２−２、「終了行」２２−３、「コメント文」２２−４のデータ項目を含む。
【００６１】
「ＩＤ」２２−１には、ソースファイルを識別する情報（ソースファイルＩＤ）が格納される。「開始行」２２−２及び「終了行」２２−３には、ソースコメントがある行番号（開始、終端）が格納される。「コメント文」２２−４には、「開始行」２２−２及び「終了行」２２−３に格納された行番号の範囲に記述してあるコメントが格納される。
【００６２】
図１０は、本実施形態の実施例におけるエラー行番号テーブルの一例を示す。エラー行番号テーブル２３は、「ＩＤ」２３−１、「開始行」２３−２、「終了行」２３−３、「コメント文」２３−４のデータ項目を含む。
【００６３】
「ＩＤ」２３−１には、ソースファイルを識別する情報（ソースファイルＩＤ）が格納される。「開始行」２３−２及び「終了行」２３−３には、構文エラーを起こすソースコードの行番号（開始、終端）が格納される。「原文」２３−４には、「開始行」２２−２及び「終了行」２２−３に格納された行番号に記述してある構文エラーを起こすコードが格納される。
【００６４】
図１１は、本実施形態の実施例における例外候補一覧の一例を示す。例外候補一覧２４は、「ＩＤ」２４−１、「例外候補（翻訳前）」２４−２、「例外候補（翻訳後）」２４−３のデータ項目を含む。「ＩＤ」２３−１には、ソースファイルを識別する情報（ソースファイルＩＤ）が格納される。「例外候補（翻訳前）」２４−２には、構文エラー範囲内において検出した例外候補の内、翻訳除外候補一覧２１及び予約語にない翻訳前の文字列を格納する。「例外候補（翻訳後）」２４−３には、「例外候補（翻訳前）」２４−２に格納された文字列の翻訳後の文字列が格納される。
【００６５】
図１２は、本実施形態の実施例における制御部による翻訳処理フローを示す。まず、制御部１２は、コンピュータ１１にインストールされているＯＳのロケールを判定し、そのＯＳが日本語仕様の場合には、例えば日英翻訳を行い、英語仕様の場合には例えば英日翻訳を行う。
【００６６】
それから、コメントを含むソースコードが記述されたソースファイルが入力されると、制御部１２は、そのソースファイルを開く（Ｓ１１）。制御部１２は、そのソースファイルの拡張子を参照して、ソースコードの言語（Ｊａｖａ、Ｃ＋＋、ＣＯＢＯＬ等）を判定する（Ｓ１２）。
【００６７】
制御部１２は、ソースファイルの解析を行う（Ｓ１３）。Ｓ１３の処理の詳細については、図１３にて説明する。それから、制御部１２は、ソースファイルの解析後、翻訳コメントテーブル２２から翻訳対象となるコメントを取り出す（Ｓ１４）。
【００６８】
制御部１２は、翻訳エンジン１７を用いて、ソースファイルから取り出した翻訳対象となるコメントを所定の言語（例えば、英語、フランス語、ドイツ語、スペイン語、韓国語、中国語等）に翻訳する。さらに、制御部１２は、例外候補一覧２４の「例外候補（翻訳前）」２４−２の単語をその所定の言語に翻訳して、「例外候補（翻訳後）」２４−３に格納する（Ｓ１５）。
【００６９】
制御部１２は、Ｓ１５の翻訳結果を出力する（Ｓ１６）。Ｓ１６の詳細については、図１７で説明する。なお、出力方法としては、例えば、制御部１２は、Ｅｃｌｉｐｓｅ １５のエディタを開き、翻訳結果をＥｃｌｉｐｓｅ １５のエディタ上に戻す。翻訳結果を見せる方法としては、元のファイルに書く／ポップアップで見せる等の方法がある。
【００７０】
図１３は、本実施形態の実施例におけるソースファイルの解析処理（Ｓ１３）の詳細フローを示す。制御部１２は、ソースコードの構文解析を行う（Ｓ２１）。
【００７１】
構文解析の結果、ソースコードにおいて、構文エラーが発生しなかった範囲について、構文エラー範囲外翻訳方法による処理を行う（Ｓ２２）。Ｓ２２の詳細については、図１４で説明する。
【００７２】
次に、構文解析の結果、ソースコードにおいて、構文エラーが発生した範囲について、制御部１２は、構文エラー箇所翻訳方法１または２の処理を行う（Ｓ２３）。Ｓ２３の詳細については、図１５または図１６で説明する。
【００７３】
図１４は、本実施形態の実施例における構文エラー範囲外翻訳方法による翻訳処理フローを示す。制御部１２は、構文解析の結果、ソースファイル内にある、変数、関数、マクロ定義についての変数一覧が生成され、その変数一覧を翻訳除外候補として全て取得する（Ｓ３１）。制御部１２は、取得した翻訳除外候補を翻訳除外候補一覧２１へ保存する（Ｓ３２）。
【００７４】
制御部１２は、ソースファイルからコメント行を検索し、コメント記号に基づいて、コメントが開始される行番号、コメントが終了する行番号を取得する（Ｓ３３）。制御部１２は、コメント行の開始と、終わりの行番号を翻訳コメントテーブル２２へ保存する（Ｓ３４）。
【００７５】
制御部１２は、ソースファイルから、その開始行から終わり行までのコメントを抽出し（Ｓ３５）、抽出したコメントからコメント記号を削除する（Ｓ３６）。制御部１２は、翻訳除外候補一覧２１を参照して、そのコメントに翻訳除外候補がある場合は、その翻訳除外候補を大文字等に変換して、そのコメントを整形する（Ｓ３７）。制御部１２は、整形したコメント文を翻訳コメントテーブル２２へ保存する。
【００７６】
ソースファイル内のコメント記号で囲まれた全てのコメントについて、Ｓ３３〜Ｓ３８の処理を行う。
【００７７】
次に、実施例１，２としてそれぞれ、構文エラー箇所翻訳方法１、２の処理（Ｓ２３）について詳述する。まずは、実施例１として、構文エラー箇所翻訳方法１による処理について説明する。
【００７８】
図１５は、本実施形態（実施例１）における構文エラー箇所翻訳方法１による処理フローを示す。制御部１２は、ＩＤＥより、ソースコードにおいて構文エラーが発生している行を取得する（Ｓ４１）。
【００７９】
制御部１２は、取得した行の行番号（始め、終わり）をエラー番号テーブル２３に保存する（Ｓ４２）。それから、制御部１２は、ソースコードのエラー範囲内における全ての単語を抽出する（Ｓ４３）。
【００８０】
制御部１２は、Ｓ４３で抽出した単語群から、予約語を除外する（Ｓ４４）。
制御部１２は、翻訳除外候補一覧２１を用いて、Ｓ４４で予約語が除外された単語群に、翻訳除外候補と同じ単語がないかを検索する（Ｓ４５）。
【００８１】
制御部１２は、Ｓ４５での検索の結果、Ｓ４４で予約語が除外された単語群と翻訳除外候補一覧２１に登録された単語群との間で重複していない単語を例外候補として例外候補テーブル２４に保存する（Ｓ４６）。
【００８２】
次に、実施例２として、構文エラー箇所翻訳方法２による翻訳処理について説明する。
図１６は、本実施形態（実施例２）における構文エラー箇所翻訳方法２による処理フローを示す。制御部１２は、ＩＤＥより、ソースコードにおいて構文エラーが発生している行を取得する（Ｓ５１）。
【００８３】
制御部１２は、取得した行の行番号（始め、終わり）をエラー番号テーブル２３に保存する（Ｓ５２）。
【００８４】
それから、制御部１２は、ソースコードのエラー範囲内において、言語毎の規約に適合する単語（例えば、予約語の直後に記述されている単語、または開き括弧の直前に記述されている単語）を抽出する。なお、本実施例では、言語毎の規約に適合する単語として、予約語の直後に記述されている単語、または開き括弧の直前に記述されている単語を抽出するが、これに限定されず、言語の仕様に応じて、様々な規約を用いても良い。
【００８５】
制御部１２は、Ｓ５３で抽出した単語群から、予約語を除外する（Ｓ５４）。
制御部１２は、翻訳除外候補一覧２１を用いて、Ｓ５４で予約語が除外された単語群に、翻訳除外候補と同じ単語がないかを検索する（Ｓ５５）。
【００８６】
制御部１２は、Ｓ５５での検索の結果、Ｓ５４で予約語が除外された単語群と翻訳除外候補一覧２１に登録された単語群との間で重複していない単語を例外候補として例外候補テーブル２４に保存する（Ｓ５６）。
【００８７】
図１７は、本実施形態における翻訳結果の出力処理（Ｓ１６）の詳細フローを示す。制御部１２は、Ｓ１５で翻訳されたコメントを出力する（Ｓ６１）。
【００８８】
さらに、制御部１２は、例外候補一覧２４に例外候補が登録されている場合、翻訳されたコメントに、「例外候補（翻訳後）」２４−３に格納された単語と一致する単語があるかを検索する。検索の結果、翻訳されたコメントに、「例外候補（翻訳後）」２４−３に格納された単語と一致する単語がある場合、制御部１２は、次の処理を行う。すなわち、制御部１２は、「例外候補（翻訳後）」２４−３に対応する「例外候補（翻訳前）」２４−２に格納された単語（翻訳前単語）を、翻訳されたコメントにおいて対応する単語（翻訳後単語）に関連付けて出力する（Ｓ６２）。関連付けて出力するとは、例えば、翻訳前単語と翻訳後単語とを、図５に示すように並べて出力することをいうがこれに限定されず、出力された翻訳後単語と翻訳前単語を線で結んでも良い。
【００８９】
図１８は、本実施形態の実施例におけるプログラムを実行するコンピュータのハードウェア環境の構成ブロック図の一例である。コンピュータ１１は、翻訳装置として機能する。コンピュータ１１は、ＣＰＵ３２、ＲＯＭ３３、ＲＡＭ３６、通信Ｉ／Ｆ３４、記憶装置３７、出力Ｉ／Ｆ３１、入力Ｉ／Ｆ３５、読み取り装置３８、バス３９、出力機器４１、入力機器４２によって構成されている。
【００９０】
ここで、ＣＰＵは、中央演算装置を示す。ＲＯＭは、リードオンリメモリを示す。ＲＡＭは、ランダムアクセスメモリを示す。Ｉ／Ｆは、インターフェースを示す。バス３９には、ＣＰＵ３２、ＲＯＭ３３、ＲＡＭ３６、通信Ｉ／Ｆ３４、記憶装置３７、出力Ｉ／Ｆ３１、入力Ｉ／Ｆ３５、及び読み取り装置３８が接続されている。読み取り装置３８は、可搬型記録媒体を読み出す装置である。出力機器４１は、出力Ｉ／Ｆ３１に接続されている。入力機器４２は、入力Ｉ／Ｆ３５に接続にされている。
【００９１】
記憶装置３７としては、ハードディスク、フラッシュメモリ、磁気ディスクなど様々な形式の記憶装置を使用することができる。記憶装置３７またはＲＯＭ３３には、ＣＰＵ３２を翻訳装置として機能させるプログラム、翻訳除外候補一覧２１、翻訳コメントテーブル２２、エラー行番号テーブル２３、例外候補テーブル２４が格納されている。
【００９２】
ＣＰＵ３２は、記憶装置３７等に格納した上記実施形態で説明した処理を実現するプログラムを読み出し、当該プログラムを実行する。
【００９３】
上記実施形態で説明した処理を実現するプログラムは、プログラム提供者側から通信ネットワーク４０、および通信Ｉ／Ｆ３４を介して、例えば記憶装置３７に格納されてもよい。また、上記実施形態で説明した処理を実現するプログラムは、市販され、流通している可搬型記憶媒体に格納されていてもよい。この場合、この可搬型記憶媒体は読み取り装置３８にセットされて、ＣＰＵ３２によってそのプログラムが読み出されて、実行されてもよい。可搬型記憶媒体としてはＣＤ−ＲＯＭ、フレキシブルディスク、光ディスク、光磁気ディスク、ＩＣカード、ＵＳＢメモリ装置など様々な形式の記憶媒体を使用することができる。このような記憶媒体に格納されたプログラムが読み取り装置３８によって読み取られる。
【００９４】
また、入力機器４２には、キーボード、マウス、電子カメラ、ウェブカメラ、マイク、スキャナ、センサ、タブレットなどを用いることが可能である。また、出力機器４１には、ディスプレイ、プリンタ、スピーカなどを用いることが可能である。また、ネットワーク４０は、インターネット、ＬＡＮ、ＷＡＮ、専用線、有線、無線等の通信網であってよい。
【００９５】
なお、本発明は、以上に述べた実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
【符号の説明】
【００９６】
１      翻訳装置
２      取得部
３      特定部
４      抽出部
５      出力部
１０    ソースコード
１１    コンピュータ
１２    制御部
１３    翻訳処理
１４    Ｊａｖａ実行環境
１５    Ｅｃｌｉｐｓｅ
１６    ソースコメント
１７    翻訳エンジン
２０    記憶部
２１    翻訳除外候補一覧
２２    翻訳コメントテーブル
２３    エラー行番号テーブル
２４    例外候補テーブル
【図１】
2015170134.tif 000003
【図２】
2015170134.tif 000004
【図３】
2015170134.tif 000005
【図５】
2015170134.tif 000006
【図６】
2015170134.tif 000007
【図７】
2015170134.tif 000008
【図８】
2015170134.tif 000009
【図９】
2015170134.tif 000010
【図１０】
2015170134.tif 000011
【図１１】
2015170134.tif 000012
【図１２】
2015170134.tif 000013
【図１３】
2015170134.tif 000014
【図１４】
2015170134.tif 000015
【図１５】
2015170134.tif 000016
【図１６】
2015170134.tif 000017
【図１７】
2015170134.tif 000018
【図１８】
2015170134.tif 000019
【図４】
2015170134.tif 000020