(57)【特許請求の範囲】
【請求項１】
ソースプログラムを記述するプログラミング言語において記述文中に記載可能な定義語の属性に関する規則（構文規則）を格納する構文規則格納部と、
前記ソースプログラムにおける定義語およびその属性を格納する定義語格納部と、
前記プログラミング言語において同一記述文中に記載可能な複数の定義語についてそれらの属性の組合せに関する規則（組合せ規則）を格納する組合せ規則格納部を備え、
前記ソースプログラムにおいて翻訳エラーとなった未定義語の属性の候補（属性候補）
を前記構文規則に加えて前記組合せ規則に基づいて抽出する属性候補抽出部と、
前記未定義語との文字列の照合率が所定条件を満たす前記定義語のうち、前記属性候補として抽出された属性を有する定義語を、修正候補として前記定義語格納部から抽出する修正候補抽出部と、
前記修正候補から修正語を選択し、前記未定義語を前記修正語に修正する修正部とを備えることを特徴とする修正装置。
【請求項２】
前記修正候補となりうる任意語およびその属性を格納する任意語格納部をさらに備え、
前記修正候補抽出部は、前記定義語格納部から前記修正候補を抽出することに加えて、
前記未定義語に類似する前記任意語のうち、前記属性候補として抽出された属性を有する
任意語を、前記修正候補として前記任意語格納部からさらに抽出することを特徴とする請
求項１に記載の修正装置。
【請求項３】
前記修正部は、複数の前記修正候補がある場合、前記未定義語および前記修正候補間の
文字列の照合率に基づいて前記修正語を選択することを特徴とする請求項１から請求項２のいずれか１項に記載の修正装置。
【請求項４】
前記修正候補の対象となる条件（修正候補対象条件）を設定する修正候補対象条件設定
部をさらに備え、
前記修正候補抽出部は、前記修正候補対象条件を用いて前記修正候補を抽出することを
特徴とする請求項１から請求項３のいずれか１項に記載の修正装置。
【請求項５】
前記修正部による修正の結果を表す情報を出力する結果出力部をさらに備えることを特
徴とする請求項１から請求項４のいずれか１項に記載の修正装置。
【請求項６】
ソースプログラムを翻訳する際に、翻訳エラーとなる未定義語を請求項１から請求項
５のいずれか１項に記載の修正装置を用いて修正する翻訳装置。
【請求項７】
コンピュータが、
ソースプログラムを記述するプログラミング言語において記述文中に記載可能な定義語の属性に関する規則（構文規則）を格納する構文規則格納部と、前記ソースプログラムにおける定義語およびその属性を格納する定義語格納部と、前記プログラミング言語において同一記述文中に記載可能な複数の定義語についてそれらの属性の組合せに関する規則（組合せ規則）を格納する組合せ規則格納部を用いて、
前記ソースプログラムにおいて翻訳エラーとなった未定義語の属性の候補（属性候補）を前記構文規則に加えて前記組合せ規則に基づいて抽出し、
前記未定義語との文字列の照合率が所定条件を満たす前記定義語のうち、前記属性候補として抽出された属性を有する定義語を、修正候補として前記定義語格納部から抽出し、
前記修正候補から修正語を選択し、前記未定義語を前記修正語に修正する修正方法。
【請求項８】
ソースプログラムを記述するプログラミング言語において記述文中に記載可能な定義語の属性に関する規則（構文規則）を格納する構文規則格納部と、前記ソースプログラムにおける定義語およびその属性を格納する定義語格納部と、前記プログラミング言語において同一記述文中に記載可能な複数の定義語についてそれらの属性の組合せに関する規則（組合せ規則）を格納する組合せ規則格納部を用いて、
前記ソースプログラムにおいて翻訳エラーとなった未定義語の属性の候補（属性候補）を前記構文規則に加えて前記組合せ規則に基づいて抽出する属性候補抽出ステップと、
前記未定義語との文字列の照合率が所定条件を満たす前記定義語のうち、前記属性候補として抽出された属性を有する定義語を、修正候補として前記定義語格納部から抽出する修正候補抽出ステップと、
前記修正候補から修正語を選択し、前記未定義語を前記修正語に修正する修正ステップ
と、
をコンピュータ装置に実行させるコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースプログラムを修正する技術に関する。
【背景技術】
【０００２】
システム開発において、新規開発では、ユーザによって新たなソースプログラムが記述される。また、過去資産流用時には、ユーザによって既存のソースプログラムが一部改造される。このような場合に、新たにコーディングされた部分では、エディットミスなど単純なスペルミスが発生する可能性がある。また、ソースプログラムの保守性・可読性向上のため、ユーザによって命名されるデータ名や関数名などの定義語は、長い文字列になる傾向がある。このような場合、定義語を参照する箇所でエディットミスを招く可能性は、短い文字列の場合よりも高くなる。大規模なシステム開発であるほど、単純ミスの修正は煩わしく、できるだけ時間をかけないようにしたいという要望がある。
【０００３】
スペルミスを防ぐ方法としては、専用エディタによる入力補助機能が知られている。しかしながら、一般的な入力補助機能では、プログラミング言語に必須の語(予約語など)および構文の形式のヒントは表示されるが、定義語は入力補助対象とならない。
【０００４】
また、他のスペルミスを防ぐ方法として、スニペット機能を備えたエディタを利用することが考えられる。スニペット機能とは、よく記述するコードをスニペットとして事前登録しておき、スニペットを呼び出して貼り付けることを可能とする機能である。スニペット機能を用いて定義語の入力支援を行うこともできるが、事前に登録する準備作業が必要となる。
【０００５】
このような問題に関連する技術として、特許文献１に記載されたものが知られている。この関連技術は、ソースプログラム中に予約語に類似する単語が存在するか調べ、存在する場合は、その単語と、その単語の存在位置と、その単語に類似する全ての予約語を修正候補として出力する。そして、この関連技術は、ユーザによって選択された修正候補を用いてソースプログラムを修正する。
【０００６】
また、このような問題に関連する他の技術として、特許文献２に記載されたものが知られている。この関連技術は、ソースプログラムをコンパイルする際にエラーとなった箇所について、過去の修正履歴辞書を参照することにより自動修正を行う。
【０００７】
また、このような問題に関連する他の技術として、特許文献３に記載されたものが知られている。この関連技術は、コンパイルエラーのエラーパターンに対して予測されるソースプログラムの修正方法をあらかじめデータベースに格納しておく。そして、この関連技術は、コンパイルエラーを検出した場合に、そのエラーパターンに対する修正方法をデータベースから検出することにより自動修正を行う。
【０００８】
また、このような問題に関連する他の技術として、特許文献４に記載されたものが知られている。この関連技術は、ソースプログラムの文法チェックを行った際に定義語を取り出す。そして、この関連技術は、ソースプログラム中でエラーとなったエラーテキストについて、最も近いシステム用語または定義語を選定する。そして、この関連技術は、選定した用語を用いてエラーテキストを修正する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平１０−１３３８８３号公報
【特許文献２】特開平１１−８５５３６号公報
【特許文献３】特開平９−１８５５００号公報
【特許文献４】特開昭６３−２４５７３８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、特許文献１に記載された関連技術は、複数の修正候補がある場合には、ユーザによる選択作業が必要であり、ユーザの作業を十分に軽減できないという課題がある。
【００１１】
また、特許文献２に記載された関連技術は、修正履歴辞書に基づいて修正を行うため、過去に同様のエラーがない箇所については、修正できないという課題がある。
【００１２】
また、特許文献３に記載された関連技術は、あらかじめエラーパターンに対する修正方法をデータベースに格納しておく必要があり、事前準備が必要であるという課題がある。
【００１３】
また、特許文献４に記載された関連技術は、エラーテキストに対して、システム用語または定義語とのパターンマッチングを行うことにより、修正可能かどうかを判別する。このように、この関連技術は、テキストのパターンマッチングだけで用語を選定して修正するため、修正の精度が十分でないという課題がある。
【００１４】
本発明は、上述の課題を解決するためになされたもので、ユーザの修正作業や事前準備作業を十分に軽減しながら、過去に同様のエラーがなくても、ソースプログラムにおいて翻訳エラーとなる箇所をより精度よく修正する技術を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明の修正装置は、ソースプログラムを記述するプログラミング言語において記述文中に記載可能な定義語の属性に関する規則（構文規則）を格納する構文規則格納部と、前記ソースプログラムにおける定義語およびその属性を格納する定義語格納部と、前記プログラミング言語において同一記述文中に記載可能な複数の定義語についてそれらの属性の組合せに関する規則（組合せ規則）を格納する組合せ規則格納部を備え、前記ソースプログラムにおいて翻訳エラーとなった未定義語の属性の候補（属性候補）を前記構文規則に加えて前記組合せ規則に基づいて抽出する属性候補抽出部と、前記未定義語との文字列の照合率が所定条件を満たす前記定義語のうち、前記属性候補として抽出された属性を有する定義語を、修正候補として前記定義語格納部から抽出する修正候補抽出部と、前記修正候補から修正語を選択し、前記未定義語を前記修正語に修正する修正部とを備える。
【００１６】
また、本発明の翻訳装置は、ソースプログラムの翻訳する際に、翻訳エラーとなる未定義語を本発明の修正装置を用いて修正する。
【００１７】
本発明の修正方法は、コンピュータが、ソースプログラムを記述するプログラミング言語において記述文中に記載可能な定義語の属性に関する規則（構文規則）を格納する構文規則格納部と、前記ソースプログラムにおける定義語およびその属性を格納する定義語格納部と、前記プログラミング言語において同一記述文中に記載可能な複数の定義語についてそれらの属性の組合せに関する規則（組合せ規則）を格納する組合せ規則格納部を用いて、前記ソースプログラムにおいて翻訳エラーとなった未定義語の属性の候補（属性候補）を前記構文規則に加えて前記組合せ規則に基づいて抽出し、前記未定義語との文字列の照合率が所定条件を満たす前記定義語のうち、前記属性候補として抽出された属性を有する定義語を、修正候補として前記定義語格納部から抽出し、前記修正候補から修正語を選択し、前記未定義語を前記修正語に修正する。
【００１８】
本発明のコンピュータ・プログラムは、ソースプログラムを記述するプログラミング言語において記述文中に記載可能な定義語の属性に関する規則（構文規則）を格納する構文規則格納部と、前記ソースプログラムにおける定義語およびその属性を格納する定義語格納部と前記プログラミング言語において同一記述文中に記載可能な複数の定義語についてそれらの属性の組合せに関する規則（組合せ規則）を格納する組合せ規則格納部を用いて、前記ソースプログラムにおいて翻訳エラーとなった未定義語の属性の候補（属性候補）を前記構文規則に加えて前記組合せ規則に基づいて抽出する属性候補抽出ステップと、前記未定義語との文字列の照合率が所定条件を満たす前記定義語のうち、前記属性候補として抽出された属性を有する定義語を、修正候補として前記定義語格納部から抽出する修正候補抽出ステップと、前記修正候補から修正語を選択し、前記未定義語を前記修正語に修正する修正ステップと、をコンピュータ装置に実行させる。
【発明の効果】
【００１９】
本発明は、ユーザの修正作業や事前準備作業を十分に軽減しながら、過去に同様のエラーがなくても、ソースプログラムにおいて翻訳エラーとなる箇所をより精度よく修正する技術を提供することができる。
【図面の簡単な説明】
【００２０】
【図１】本発明の第１の実施の形態としての翻訳装置の機能ブロック図である。
【図２】本発明の第１の実施の形態としての翻訳装置のハードウェア構成図である。
【図３】本発明の第１の実施の形態における修正装置の動作を説明するフローチャートである。
【図４】本発明の第２の実施の形態としての翻訳装置の機能ブロック図である。
【図５】本発明の第２の実施の形態における修正装置の動作の概略を説明するフローチャートである。
【図６】本発明の第２の実施の形態における修正装置の属性候補抽出処理を説明するフローチャートである。
【図７】本発明の第２の実施の形態における修正装置の修正候補抽出処理を説明するフローチャートである。
【図８】本発明の第２の実施の形態における修正装置の修正処理を説明するフローチャートである。
【図９】本発明の第２の実施の形態において設定されるパラメータの一例を示す図である。
【図１０】本発明の第２の実施の形態において構文規則格納部に格納される情報の一例を示す図である。
【図１１】本発明の第２の実施の形態において組合せ規則格納部に格納される情報の一例を示す図である。
【図１２】本発明の第２の実施の形態において定義語格納部に格納される情報の一例を示す図である。
【図１３】本発明の第２の実施の形態において任意語格納部に格納される情報の一例を示す図である。
【図１４】（ａ）、（ｂ）および（ｃ）は、それぞれ、本発明の第２の実施の形態における属性候補テーブルの一例を示す図である。
【図１５】（ａ）、（ｂ）、（ｃ）および（ｄ）は、それぞれ、本発明の第２の実施の形態における修正候補テーブルの一例を示す図である。
【図１６】（ａ）および（ｂ）は、それぞれ、本発明の第２の実施の形態における修正結果テーブルの一例を示す図である。
【図１７】（ａ）は、本発明の第２の実施の形態における修正前のソースプログラムの一例を示し、（ｂ）は、修正語のソースプログラムの一例を示す図である。
【図１８】本発明の第２の実施の形態における変換結果リストの一例を示す図である。
【発明を実施するための形態】
【００２１】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００２２】
（第１の実施の形態）
本発明の第１の実施の形態としての翻訳装置１および修正装置１０の構成を図１に示す。図１において、翻訳装置１は、修正装置１０と、翻訳部１１とを含む。また、修正装置１０は、構文規則格納部１０１と、定義語格納部１０２と、属性候補抽出部１０３と、修正候補抽出部１０４と、修正部１０５とを含む。
【００２３】
ここで、翻訳装置１は、図２に示すように、ＣＰＵ（Central Processing Unit）１００１と、ＲＡＭ（Random Access Memory）１００２と、ＲＯＭ（Read Only Memory）１００３と、ハードディスク等の記憶装置１００４と、入力装置１００５と、出力装置１００６とを備えたコンピュータ装置によって構成可能である。この場合、翻訳部１１は、入力装置１００５と、出力装置１００６と、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１とによって構成される。また、修正装置１０の構文規則格納部１０１および定義語格納部１０２は、記憶装置１００４によって構成される。また、属性候補抽出部１０３、修正候補抽出部１０４および修正部１０５は、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１によって構成される。なお、翻訳装置１および修正装置１０、ならびに、その各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００２４】
翻訳部１１は、翻訳対象のソースプログラムをオブジェクトプログラムに翻訳する際に、翻訳エラーとなる未定義語を、修正装置１０を用いて修正する。また、翻訳部１１は、翻訳の際にコンパイラ内部情報を生成する。例えば、コンパイラ内部情報には、トークンテーブルやディクショナリが含まれる。ここで、トークンテーブルは、プログラムの記述を語単位に分解した情報である。また、ディクショナリは、語の属性情報を含む情報である。このようなコンパイラ内部情報は、後述の定義語格納部１０２により用いられる。なお、翻訳部１１は、翻訳対象のソースプログラムを指定する情報を、入力装置１００５を介して取得することにより、翻訳を開始してもよい。また、翻訳部１１は、翻訳対象のソースプログラムを記憶装置１００４等から取得してもよい。また、翻訳部１１は、修正装置１０を用いて未定義語を修正することにより翻訳したオブジェクトプログラムを、記憶装置１００４等に出力してもよい。また、翻訳部１１は、翻訳結果を表す情報を、出力装置１００６に出力してもよい。
【００２５】
構文規則格納部１０１は、構文規則を格納する。構文規則とは、ソースプログラムが記述されたプログラミング言語において記述文中に記載可能な定義語の属性に関する規則である。例えば、構文規則は、記述文の種類、その記述文において定義語が記述され得る位置（記述位置）、および、その位置に記述される定義語がとり得る属性をそれぞれ表す情報によって構成されていてもよい。
【００２６】
定義語格納部１０２は、ソースプログラムにおける定義語およびその属性を格納する。定義語格納部１０２は、このような定義語およびその属性を、翻訳部１１により生成されるコンパイラ内部情報に基づいて抽出し、格納してもよい。あるいは、翻訳部１１が、翻訳を行う際に、生成したコンパイラ内部情報に基づいて、定義語およびその属性を抽出し、定義語格納部１０２に格納してもよい。
【００２７】
属性候補抽出部１０３は、ソースプログラムにおいて翻訳エラーとなった未定義語の属性の候補（属性候補）を、構文規則に基づいて抽出する。例えば、構文規則が、前述したように記述文の種類、記述位置、および、属性によって構成される場合、属性候補抽出部１０３は、未定義語の出現する記述文の種類およびその記述位置に合致する構文規則で定められた属性を、属性候補として抽出すればよい。
【００２８】
修正候補抽出部１０４は、未定義語に類似する定義語のうち、属性候補として抽出された属性を有する定義語を、修正候補として定義語格納部１０２から抽出する。例えば、修正候補抽出部１０４は、未定義語に類似するか否かを、文字列の照合率に基づいて判定してもよい。この場合、修正候補抽出部１０４は、未定義語に対する文字列の照合率が所定条件を満たす定義語のうち、属性候補の示す属性を有するものを、修正候補とすればよい。
【００２９】
修正部１０５は、修正候補から修正語を選択する。もし、修正候補抽出部１０４によって複数の修正候補が抽出されている場合、修正部１０５は、所定の基準に基づいて、修正語を選択すればよい。例えば、修正部１０５は、複数の修正候補から、未定義語および修正候補間の文字列の照合率に基づいて、修正語を選択してもよい。
【００３０】
また、修正部１０５は、翻訳エラーのあった未定義語を、選択した修正語に修正する。例えば、修正部１０５は、翻訳中に生成したトークンやディクショナリ等のコンパイラ内部情報における未定義語を修正語に修正する。これにより、翻訳部１１は、翻訳エラーを回避して翻訳を続けることができる。
【００３１】
以上のように構成された翻訳装置１における修正装置１０の動作について、図３を参照して説明する。ここでは、翻訳装置１において、翻訳部１１がソースプログラムを取得して翻訳を開始し、翻訳エラーとなった各未定義語について、その未定義語に関する情報を入力として修正装置１０を動作させる。ここで、修正装置１０に入力される未定義語に関する情報には、例えば、未定義語の文字列、出現する記述文の種類、および、その記述位置をそれぞれ表す情報が含まれるものとする。これにより、修正装置１０は、以下の動作を開始する。
【００３２】
なお、以下の動作において、構文規則格納部１０１にはあらかじめ構文規則が格納されているものとする。また、定義語格納部１０２には、翻訳部１１により生成されたコンパイラ内部情報に基づいて、定義語およびその属性が既に格納されているものとする。
【００３３】
まず、属性候補抽出部１０３は、ソースプログラムにおいて翻訳エラーとなった未定義語の属性候補を、構文規則に基づいて抽出する（ステップＳ１）。
【００３４】
例えば、前述のように、構文規則が、記述文の種類、記述位置および属性によって構成される場合、属性候補抽出部１０３は、未定義語の出現する記述文の種類および記述位置に合致する構文規則において、定められている属性を属性候補として抽出すればよい。
【００３５】
次に、修正候補抽出部１０４は、定義語格納部１０２から、未定義語に類似する定義語を抽出する（ステップＳ２）。
【００３６】
例えば、前述のように、修正候補抽出部１０４は、未定義語に対する文字列の照合率が所定条件を満たす定義語を、未定義語に類似する定義語として抽出してもよい。
【００３７】
次に、修正候補抽出部１０４は、ステップＳ２で抽出された類似する定義語のうち、ステップＳ１で属性候補として抽出された属性を有する定義語を、修正候補として抽出する（ステップＳ３）。
【００３８】
次に、修正部１０５は、ステップＳ３で抽出された修正候補から修正語を選択する（ステップＳ４）。
【００３９】
例えば、前述のように、修正候補抽出部１０４によって複数の修正候補が抽出されている場合、修正部１０５は、未定義語および各修正候補間の文字列の照合率に基づいて、修正語を選択してもよい。
【００４０】
次に、修正部１０５は、未定義語を、ステップＳ４で選択された修正語に修正する（ステップＳ５）。
【００４１】
例えば、前述のように、修正部１０５は、翻訳中に生成したトークンやディクショナリ等のコンパイラ内部情報における未定義語を修正語に修正してもよい。
【００４２】
以上で、修正装置１０は、動作を終了する。
【００４３】
次に、本発明の第１の実施の形態の効果について述べる。
【００４４】
本発明の第１の実施の形態としての翻訳装置および修正装置は、ユーザの修正作業や事前準備作業を十分に軽減しながら、過去に同様のエラーがなくても、ソースプログラムにおいて翻訳エラーとなる箇所をより精度よく修正することができる。
【００４５】
その理由は、構文規則格納部に、定義語の属性に関する構文規則を格納しておき、定義語格納部に、ソースプログラムにおける定義語およびその属性を格納しておくからである。そして、属性候補抽出部が、ソースプログラムにおいて翻訳エラーとなった未定義語の属性候補を構文規則に基づいて抽出するからである。そして、修正候補抽出部が、未定義語に類似する定義語のうち、属性候補として抽出された属性を有する定義語を、修正候補として定義語格納部から抽出するからである。そして、修正部が、修正候補から修正語を選択し、未定義語を修正語に修正するからである。
【００４６】
このように、本実施の形態は、ソースプログラムにおける定義語が格納された定義語格納部を修正候補の抽出対象として用いるため、修正候補となる語の事前登録作業を必要とせず、過去の修正履歴を必要としない。また、本実施の形態は、複数の修正候補から修正語を選択するので、ユーザの修正作業を必要としない。また、本実施の形態は、未定義語に対する類似性だけでなく、未定義語の属性候補を考慮して修正候補を抽出するので、より精度の高い修正語を選択することができる。
【００４７】
（第２の実施の形態）
次に、本発明の第２の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第１の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【００４８】
まず、本発明の第２の実施の形態としての翻訳装置２の構成を図４に示す。図４において、翻訳装置２は、本発明の第１の実施の形態としての翻訳装置１に対して、修正装置１０に替えて修正装置２０を備える点が異なる。また、修正装置２０は、本発明の第１の実施の形態としての修正装置１０に対して、属性候補抽出部１０３に替えて属性候補抽出部２０３と、修正候補抽出部１０４に替えて修正候補抽出部２０４とを備え、さらに、組合せ規則格納部２０６と、任意語格納部２０７と、修正候補対象条件設定部２０８と、結果出力部２０９とを備える点が異なる。
【００４９】
ここで、翻訳装置２および修正装置２０が図２に示したハードウェア要素を備えるコンピュータ装置によって構成される場合、組合せ規則格納部２０６および任意語格納部２０７は、記憶装置１００４によって構成される。また、修正候補対象条件設定部２０８は、入力装置１００５と、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１とによって構成される。また、結果出力部２０９は、出力装置１００６と、ＲＯＭ１００３および記憶装置１００４に記憶されたコンピュータ・プログラムおよび各種データをＲＡＭ１００２に読み込んで実行するＣＰＵ１００１とによって構成される。なお、翻訳装置２および修正装置２０、ならびに、その各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【００５０】
組合せ規則格納部２０６は、組合せ規則を格納する。組合せ規則は、プログラミング言語において同一記述文中に記載可能な複数の定義語についての、それらの属性の組合せに関する規則である。ここで、属性の組合せとは、同一記述文中に記載可能な複数の定義語について、そのうち１つの属性が決定している場合には、他の少なくとも１つの属性が限定されることをいう。例えば、組合せ規則は、記述文の種類、その記述文中に記述可能な一方の定義語の属性、および、一方の定義語の属性に対して組合せ可能な他方の定義語の属性からなる情報であってもよい。なお、組合せ規則格納部２０６は、このような組合せ規則として、翻訳装置２にあらかじめ保持される組合せ規則を利用可能である。
【００５１】
任意語格納部２０７は、未定義語の修正候補となりうる任意語およびその属性を格納する。任意語は、未定義語の修正候補としたい語であって、定義語格納部１０２に含まれない任意の文字列である。例えば、任意語としては、対象のソースプログラムの外部で定義され、対象のソースプログラムで参照される定義語等が想定される。任意語格納部２０７は、このような任意語およびその属性を、入力装置１００５を介して入力される情報に基づいて格納してもよい。
【００５２】
属性候補抽出部２０３は、構文規則および組合せ規則に基づいて属性候補を抽出する。例えば、属性候補抽出部２０３は、まず、本発明の第１の実施の形態と同様に、構文規則において、未定義語の出現する記述文においてその記述位置に対応する属性を、属性候補として抽出する。さらに、属性候補抽出部２０３は、未定義語が記述されているソースプログラムの記述文において、他の定義語が記述されている場合は、属性候補を組合せ規則と照合する。具体的には、属性候補抽出部２０３は、組合せ規則格納部２０６を参照し、構文規則格納部１０１から抽出した属性候補のうち、その記述文において他の定義語の属性に対して組合せ可能な属性を属性候補として残す。また、属性候補抽出部２０３は、組合せ不可能な属性を、属性候補から除外する。
【００５３】
修正候補抽出部２０４は、本発明の第１の実施の形態と同様に、定義語格納部１０２から修正候補を抽出することに加えて、任意語格納部２０７からも修正候補を抽出する。具体的には、修正候補抽出部２０４は、未定義語に類似する任意語のうち、属性候補として抽出された属性を有する任意語を、修正候補として任意語格納部２０７からさらに抽出すればよい。
【００５４】
また、修正候補抽出部２０４は、定義語格納部１０２および任意語格納部２０７から修正候補を抽出する際に、修正候補対象条件を用いる。修正候補対象条件とは、例えば、文字列の照合率が閾値以上であることや、除外条件を満たさないことであってもよい。具体的には、修正候補抽出部２０４は、修正候補対象条件に合致する語のうち、属性候補の示す属性を有するものを、修正候補とすればよい。このような修正候補対象条件は、後述の修正候補対象条件設定部２０８によって設定される。
【００５５】
また、修正候補抽出部２０４は、修正候補を１つも抽出できなかった場合、修正候補対象条件を変更して再度修正候補の抽出を試みてもよい。例えば、修正候補対象条件が、照合率が閾値以上であることを表す場合、修正候補抽出部２０４は、所定の照合率変更幅だけ照合率の閾値を下げて再度修正候補の抽出処理を行ってもよい。また、この場合、修正候補抽出部２０４は、所定の最低照合率まで照合率を変更しても修正候補を抽出できない場合、再抽出処理を中止してもよい。
【００５６】
修正候補対象条件設定部２０８は、修正候補対象条件を設定する。修正候補対象条件は、例えば、前述のように、未定義語との文字列の照合率が閾値以上であることや、除外条件に合致しないことであってもよい。また、修正候補対象条件は、複数の条件の組合せであってもよい。
【００５７】
また、修正候補対象条件設定部２０８は、修正候補対象条件を設定・変更するためのパラメータを、入力装置１００５を介して取得してもよい。例えば、修正候補対象条件設定部２０８は、照合率の閾値、最低照合率、照合率変更幅、除外条件等のパラメータを、入力装置１００５を介して取得し、取得した値を用いて修正候補対象条件を設定してもよい。この場合、修正候補対象条件設定部２０８は、入力がないパラメータについて、あらかじめ定められた値を用いるようにしてもよい。
【００５８】
結果出力部２０９は、修正部１０５による修正結果を表す情報を、記憶装置１００４または出力装置１００６等に出力する。修正結果を表す情報とは、例えば、修正後のソースプログラムや、未定義語および修正語の対応を示すリスト等であってもよい。
【００５９】
以上のように構成された翻訳装置２における修正装置２０の動作について、図面を参照して説明する。ここでは、翻訳装置２において、翻訳部１１がソースプログラムを取得して翻訳を開始し、翻訳エラーとなった各未定義語について、その未定義語に関する情報を入力として修正装置２０を動作させる。ここで、修正装置２０に入力される未定義語に関する情報には、未定義語の文字列、出現する記述文の種類、その記述位置、同一の記述文中に他の定義語があるか否か、ある場合は他の定義語の属性をそれぞれ表す情報が含まれるものとする。これにより、修正装置２０は、以下の動作を開始する。
【００６０】
なお、以下の動作において、構文規則格納部１０１および組合せ規則格納部２０６には、それぞれ構文規則および組合せ規則があらかじめ格納されているものとする。また、定義語格納部１０２には、翻訳部１１により生成されたコンパイラ内部情報に基づいて、定義語およびその属性が既に格納されているものとする。また、任意語格納部２０７には、修正候補となり得る任意語およびその属性が格納されているものとする。
【００６１】
まず、修正装置２０の動作の概略を図５に示す。
【００６２】
図５では、まず、修正候補対象条件設定部２０８は、修正候補対象条件を設定する（ステップＳ１１）。
【００６３】
例えば、前述のように、修正候補対象条件設定部２０８は、修正候補対象条件を設定・変更するためのパラメータとして、照合率の閾値、最低照合率、照合率変更幅、または、除外条件を表す情報を入力装置１００５から取得することにより、修正候補対象条件を設定してもよい。
【００６４】
次に、属性候補抽出部２０３は、ソースプログラムにおいて翻訳エラーとなった未定義語の属性候補を、構文規則および組合せ規則に基づいて抽出する（ステップＳ１２）。このステップの詳細については後述する。
【００６５】
次に、修正候補抽出部２０４は、未定義語の修正候補を、修正候補対象条件を用いて、定義語格納部１０２および任意語格納部２０７から抽出する（ステップＳ１３）。このステップの詳細については後述する。
【００６６】
次に、修正部１０５は、未定義語を修正語に修正する（ステップＳ１４）。このステップの詳細については後述する。
【００６７】
次に、結果出力部２０９は、ステップＳ１４における修正の結果を表す情報を出力する（ステップＳ１５）。
【００６８】
例えば、前述のように、結果出力部２０９は、修正後のソースプログラムや、修正した未定義語および修正語の対応を示すリスト等を、修正結果を表す情報として出力してもよい。
【００６９】
以上で、修正装置２０は、動作を終了する。
【００７０】
次に、ステップＳ１２における属性候補の抽出処理の詳細について、図６を参照して説明する。
【００７１】
図６において、まず、属性候補抽出部２０３は、構文規則に基づいて、未定義語の属性候補を抽出する（ステップＳ２１）。
【００７２】
具体的には、属性候補抽出部２０３は、構文規則格納部１０１に格納された各構文規則について、未定義語の出現する記述文の種類および記述位置に合致するか否かを判断する。そして、属性候補抽出部２０３は、合致する構文規則において、その記述位置に定められている属性を、属性候補として抽出すればよい。
【００７３】
次に、属性候補抽出部２０３は、この未定義語について組合せ規則との照合が必要か否かを判断する（ステップＳ２２）。
【００７４】
具体的には、属性候補抽出部２０３は、この未定義語と同一記述文中に他の定義語が出現しているか否かに基づいて、組合せ規則との照合が必要か否かを判断すればよい。
【００７５】
ここで、組合せ規則との照合が不要と判断した場合、属性候補抽出部２０３は、属性候補の抽出処理を終了する。
【００７６】
一方、組合せ規則との照合が必要と判断した場合、属性候補抽出部２０３は、組合せ規則に基づいて、同一記述文中に出現する他の定義語の属性と組合せ可能な属性を抽出する（ステップＳ２３）。
【００７７】
具体的には、属性候補抽出部２０３は、組合せ規則格納部２０６に格納された各組合せ規則について、未定義語の出現する記述文の種類、および、同一記述文中に出現する他の定義語の属性が合致するか否かを判断する。そして、属性候補抽出部２０３は、合致する各組合せ規則において、その属性に組合せ可能なものとして定められているもう一方の属性を抽出すればよい。
【００７８】
次に、属性候補抽出部２０３は、ステップＳ２１で抽出した属性候補のうち、ステップＳ２３で抽出した組合せ可能な属性に含まれるものを残し、含まれないものを除外する（ステップＳ２４）。そして、属性候補抽出部２０３は、属性候補の抽出処理を終了する。
【００７９】
以上で、属性候補抽出処理の説明を終了する。
【００８０】
次に、ステップＳ１３における修正候補の抽出処理の詳細について、図７を参照して説明する。
【００８１】
図７において、まず、修正候補抽出部２０４は、定義語格納部１０２または任意語格納部２０７に格納される各定義語および各任意語について、ステップＳ３１〜Ｓ３２の処理を実行する。
【００８２】
ここでは、まず、修正候補抽出部２０４は、この定義語または任意語が、修正候補対象条件を満たすか否かを判断する（ステップＳ３１）。
【００８３】
例えば、修正候補対象条件として、文字列の照合率が閾値以上であり、かつ、除外条件を満たさないという条件が設定されているとする。この場合、修正候補抽出部２０４は、この定義語または任意語について、未定義語に対する文字列の照合率が閾値以上であり、かつ、除外条件を満たさないか否かを判断すればよい。
【００８４】
ここで、修正候補対象条件を満たす場合、修正候補抽出部２０４は、この定義語または任意語およびその属性を、修正候補として抽出する（ステップＳ３２）。
【００８５】
一方、ステップＳ３１において修正候補対象条件を満たさないと判断された場合、修正候補抽出部２０４は、この定義語または任意語の判断処理を終了する。
【００８６】
各定義語および各任意語についてステップＳ３１〜Ｓ３２の処理を完了すると、次に、修正候補抽出部２０４は、修正候補が少なくとも１つは抽出されたか否かを判断する（ステップＳ３３）。
【００８７】
ここで、修正候補が１つも抽出されていない場合、修正候補抽出部２０４は、修正候補対象条件の変更が可能か否かを判断する（ステップＳ３４）。
【００８８】
例えば、前述の最低照合率および照合率変更幅が設定されている場合、修正候補抽出部２０４は、現在の照合率の閾値を照合率変更幅だけ下げた値が、最低照合率以上であるか否かに基づいて、修正候補対象条件の変更が可能か否かを判断してもよい。
【００８９】
ここで、修正候補対象条件の変更が可能でない場合、修正候補抽出部２０４は、修正候補抽出処理を終了する。
【００９０】
一方、修正候補対象条件の変更が可能である場合、修正候補抽出部２０４は、修正候補対象条件を変更する（ステップＳ３５）。
【００９１】
例えば、前述の照合率変更幅が設定されている場合、修正候補抽出部２０４は、現在の照合率の閾値を照合率変更幅だけ下げてもよい。
【００９２】
そして、修正候補抽出部２０４は、定義語格納部１０２および任意語格納部２０７に含まれる各定義語および各任意語について、ステップＳ３１〜Ｓ３２の処理を再度実行する。
【００９３】
一方、ステップＳ３３において、修正候補が少なくとも１つは抽出されている場合、修正候補抽出部２０４は、各修正候補について、ステップＳ３６〜Ｓ３７の処理を実行する。
【００９４】
ここでは、まず、修正候補抽出部２０４は、この修正候補の属性が、ステップＳ１２で抽出された属性候補のいずれかに該当するか否かを判断する（ステップＳ３６）。
【００９５】
なお、属性候補が１つも抽出されていなかった場合、修正候補抽出部２０４は、修正候補抽出不可を表す情報を出力装置１００６に出力し、動作を終了してもよい。
【００９６】
ステップＳ３６において、この修正候補の属性が、属性候補のいずれかに該当する場合、修正候補抽出部２０４は、この修正候補を残す。
【００９７】
一方、ステップＳ３６において、この修正候補の属性が、属性候補のいずれにも該当しない場合、修正候補抽出部２０４は、この修正候補を除外する（ステップＳ３７）。
【００９８】
各修正候補についてステップＳ３６〜Ｓ３７の処理を完了すると、修正候補抽出部２０４は、修正候補の抽出処理を終了する。
【００９９】
次に、ステップＳ１４における修正処理の詳細について、図８を参照して説明する。
【０１００】
図８では、まず、修正部１０５は、ステップＳ１３において修正候補が少なくとも１つは抽出されたか否かを判断する（ステップＳ４１）。
【０１０１】
ここで、１つも修正候補が抽出されていない場合、修正部１０５は、動作を終了する。このとき、修正部１０５は、修正不可を表す情報を出力装置１００６に出力してもよい。
【０１０２】
一方、１つ以上の修正候補が抽出されている場合、修正部１０５は、１つの修正候補が抽出されているか複数の修正候補が抽出されているかを判断する（ステップＳ４２）。
【０１０３】
ここで、１つの修正候補が抽出されている場合、修正部１０５は、その修正候補を修正語として選択し（ステップＳ４３）、ステップＳ４５の処理に進む。
【０１０４】
一方、複数の修正候補が抽出されている場合、修正部１０５は、複数の修正候補から、修正語を選択する（ステップＳ４４）。例えば、修正部１０５は、未定義語との照合率に基づいて、修正語を選択してもよい。この場合、修正部１０５は、未定義語との照合率が最も高い修正候補を修正語として選択してもよい。なお、照合率が同率である等の理由により修正語を選択できない場合、修正部１０５は、修正不可として処理を終了してもよい。このとき、修正部１０５は、修正不可を表す情報を出力装置１００６に出力してもよい。
【０１０５】
次に、修正部１０５は、選択した修正語を用いて未定義語を修正する（ステップＳ４５）。
【０１０６】
例えば、前述のように、修正部１０５は、翻訳中に生成したトークンやディクショナリ等のコンパイラ内部情報において、未定義語を修正語に修正してもよい。
【０１０７】
以上で、修正部１０５は、修正処理を終了する。
【０１０８】
次に、上述した修正装置２０の構成および動作を具体例で示す。
【０１０９】
なお、この具体例では、翻訳装置２としてＣＯＢＯＬのコンパイラを適用する。すなわち、翻訳部１１は、ＣＯＢＯＬで記述されたソースプログラムを翻訳し、翻訳エラーとなる各未定義語について翻訳装置２に含まれる修正装置２０を呼び出す。また、この具体例では、定義語の属性として、種類および属性を適用するものとする。ここで、定義語の種類とは、定義語がデータ名であるか、関数名であるか、プログラム名であるか等を示すものとする。また、属性とは、節、型、字類、項類、長さ、引数に関する情報等、定義語に付随する各種情報を示すものとする。なお、この具体例では、語の種類および属性を、本発明における属性として扱い、以降、「種類・属性」とも記載する。
【０１１０】
また、ここでは、修正装置２０は、処理中のデータを一時的に格納する領域として、属性候補テーブル、修正候補テーブル、修正結果テーブルを用いるものとする。また、翻訳装置２は、翻訳中にトークンテーブルおよびディクショナリを生成するものとする。
【０１１１】
また、この具体例では、修正装置２０には、修正候補対象条件に関するパラメータとして、照合率、最低照合率、照合率変更幅、および、除外条件が設定されているものとする。例えば、これらのパラメータは、コマンドラインオプション、環境変数、または、設定ファイル等により設定されるようになっていてもよい。
【０１１２】
また、この具体例では、図９に示すように、照合率、最低照合率および照合率変更幅としては、それぞれ０より大きく１００未満の数値が設定可能となっている。また、除外条件としては、文字数、開始文字、含まれる文字列等に関する条件が設定可能となっている。
【０１１３】
また、構文規則格納部１０１には、図１０に一例を示す構文規則が格納されている。これらの構文規則は、記述文の種類、記述位置、その記述位置に記載可能な定義語の種類、その定義語がとり得る属性とからなる。例えば、項番１の構文規則は、ＩＦ文の左辺に記載可能な定義語の種類はデータ名であり、そのとり得る属性は、作業場所節、字類数字、項類数字、外部１０進数であることを示している。なお、図１０における項番は、説明のために付加した情報であり、構文規則として必ずしも必要な情報ではない。
【０１１４】
また、組合せ規則格納部２０６には、図１１に一例を示す組合せ規則が格納されている。これらの組合せ規則は、記述文の種類と、組合せ可能なオペランド１の種類・属性およびオペランド２の種類・属性とからなる。例えば、項番１の組合せ規則は、ＩＦ文において、オペランド１（またはオペランド２）の属性が「データ名、作業場所節、字類数字、項類数字、外部10進数、…」であれば、オペランド２（またはオペランド１）の属性が「データ名、作業場所節、字類数字、項類数字、外部10進数、…」に限定されることを表している。なお、図１１における項番は、説明のために付加した情報であり、組合せ規則として必ずしも必要な情報ではない。
【０１１５】
なお、図１０および図１１に示したような構文規則および組合せ規則は、翻訳装置２が翻訳のために有する各種情報に基づきあらかじめ格納可能である。
【０１１６】
定義語格納部１０２は、図１２に示すように、定義語の文字列およびその種類・属性を格納する。なお、これらの情報は、翻訳部１１による翻訳時に生成されるトークンおよびディクショナリから抽出可能である。なお、図１２における項番は、説明のために付加した情報であり、定義語格納部１０２に必ずしも必要な情報ではない。
【０１１７】
任意語格納部２０７は、図１３に示すように、任意語の文字列およびその種類・属性を格納する。例えば、任意語としては、修正候補となりうる外部属性のデータ名や関数名等が想定される。そのような任意語は、翻訳単位内に定義が出現しない。そのため、そのような任意語は、トークンから抽出されない。このように、任意語格納部２０７には、修正候補となりうるが定義語格納部１０２には格納されない任意語およびその種類・属性について、利用者により入力された情報が格納されているものとする。なお、図１３における項番は、説明のために付加した情報であり、任意語格納部２０７に必ずしも必要な情報ではない。
【０１１８】
一時的なデータ格納領域である属性候補テーブルは、図１４（ａ）に示すように、各属性候補についてその種類・属性を格納可能となっている。属性候補テーブルには、属性候補抽出部２０３によって抽出される属性候補が格納される。なお、図１４における項番は、説明のために付加した情報であり、属性候補テーブルに必ずしも必要な情報ではない。
【０１１９】
一時的なデータ格納領域である修正候補テーブルは、図１５（ａ）に示すように、各修正候補について、任意語であるか定義語であるか、その文字列、その種類・属性、および、対象の未定義語との照合率とをそれぞれ表す情報を格納可能となっている。修正候補テーブルには、修正候補抽出部２０４によって抽出される修正候補が格納される。なお、図１５における項番は、説明のために付加した情報であり、修正候補テーブルに必ずしも必要な情報ではない。
【０１２０】
一時的なデータ格納領域である修正結果テーブルは、図１６（ａ）に示すように、ソースプログラムにおける記述位置、その記述位置で翻訳エラーとなった未定義語の文字列、および、それに対して決定された修正語の文字列とを格納可能となっている。修正語テーブルには、修正部１０５によって決定される情報が格納される。なお、図１６における項番は、説明のために付加した情報であり、修正候補テーブルに必ずしも必要な情報ではない。
【０１２１】
以上のように構成されたＣＯＢＯＬの翻訳装置２およびその内部に実装された修正装置２０の動作について説明する。
【０１２２】
ここでは、翻訳装置２は、図１７（ａ）に示す修正前のソースプログラムを対象とする。なお、翻訳装置２の翻訳部１１は、任意のタイミングで修正装置２０の各部を動作させてよい。例えば、翻訳部１１は、初期処理（例えば、オプション解析など）において、修正装置２０の修正候補対象条件設定部２０８を動作させ、照合率等の各種パラメータの設定を行ってもよい。また、翻訳部１１は、翻訳の際の各種解析処理において語の文字列が原因で翻訳エラーが発生した場合に、修正装置２０の属性候補抽出部２０３、修正候補抽出部２０４、修正部１０５を動作させて修正語を決定してもよい。ここで、翻訳の際の各種解析処理とは、例えば、字句解析、構文解析、意味解析などである。また、翻訳エラーとしては、例えば、定義の無いデータ名が演算や比較の処理に使用されているなどがある。また、翻訳部１１は、翻訳結果の出力処理において、修正装置２０の結果出力部２０９を動作させて修正結果を表示してもよい。
【０１２３】
まず、修正候補対象条件設定部２０８は、照合率の閾値、最低照合率、照合率変更幅、および、除外条件を、コマンドラインオプション、環境変数、または、設定ファイルに基づき設定する（ステップＳ１１）。ここでは、照合率の閾値として80%、最低照合率として50%、照合率変更幅として5%、除外条件として５文字以下をそれぞれ表す情報が設定されたものとする。
【０１２４】
次に、属性候補抽出部２０３は、翻訳部１１から、翻訳エラーとなった未定義語の記述文の種類、記述位置、同一記述文中の他の定義語の有無、他の定義語の種類・属性の情報を取得する。ここでは、図１７（ａ）に示した修正前のソースプログラムの110行目において、「LIMTCNT」が未定義のため翻訳エラーとなったものとする。この場合、属性候補抽出部２０３は、未定義語の記述位置として「IF文の右辺」を表す情報を取得する。また、属性候補抽出部２０３は、同一記述文中の他の定義語の有無として、「有」を表す情報を取得する。また、属性候補抽出部２０３は、他の定義語「WKCNT01」の種類・属性として「作業場所節のデータ名で、字類が数字、項類が数字、データの表現形式はCOMP-1で2バイト、…」を表す情報を取得する。
【０１２５】
次に、属性候補抽出部２０３は、図１０に示した構文規則格納部１０１のうち、未定義語の記述文の種類および記述位置「IF文の右辺」が合致する構文規則は項番１０、１１、１２であると判断する。そして、属性候補抽出部２０３は、項番１０、１１、１２の構文規則でそれぞれ定められた種類・属性を、属性候補テーブルに登録する（ステップＳ２１）。
【０１２６】
これにより、属性候補テーブルには、図１４（ｂ）に示す情報が登録された状態となる。
【０１２７】
次に、属性候補抽出部２０３は、この未定義語「LIMTCNT」と同一記述文中に他の定義語「WKCNT01」があるため（ステップＳ２２でＹｅｓ）、組合せ規則との照合を行う。具体的には、属性候補抽出部２０３は、図１１に示した組合せ規則格納部２０６のうち、記述文ＩＦにおけるオペランド１に定義語「WKCNT01」の上述の種類・属性が定められた組合せ規則は、項番２、３であると判断する。そして、属性候補抽出部２０３は、項番２、３においてオペランド１の種類・属性と組合せ可能なオペランド２の種類・属性を抽出する。ここでは、「作業場所節、字類数字、項類数字、COMP-1、2バイト、…」と、「作業場所節、字類数字、項類数字、COMP-2、4バイト、…」とが、組合せ可能な種類・属性として抽出される（ステップＳ２３）。
【０１２８】
そして、属性候補抽出部２０３は、属性候補テーブルに登録された属性候補（図１４（ｂ））のうち、組合せ可能なオペランド２の種類・属性に含まれないものを属性候補テーブルから削除する。この場合、属性候補テーブルに登録されている項番３の属性候補「作業場所節、字類英数字、項類英数字、英数字項目、1バイト、…」は、組合せ可能なオペランド２の種類・属性に含まれない。したがって、属性候補抽出部２０３は、項番３の属性候補を属性候補テーブルから削除する（ステップＳ２４）。
【０１２９】
これにより、属性候補テーブルには、図１４（ｃ）に示す情報が格納された状態となる。
【０１３０】
次に、修正候補抽出部２０４は、翻訳エラーとなった未定義語の文字列を取得する。ここでは、図１７（ａ）の修正前のソースプログラムの180行目において翻訳エラーとなる「WKCOT01」の文字列を取得した場合について説明する。
【０１３１】
次に、修正候補抽出部２０４は、図１２に示した定義語格納部１０２および図１３に示した任意語格納部２０７から、未定義語「WKCOT01」との文字列の照合率が８０％以上である語を修正候補として抽出し、その種類・属性と共に修正候補テーブルに登録する。ここでは、定義語「WKCNT01」が照合率８６％で、定義語「WKCNT」が照合率７０％で、定義語「WKCNT02」が照合率７１％で、任意語「WKPOT01」が照合率８６％で抽出されたものとする。
【０１３２】
これにより、修正候補テーブルは、図１５（ｂ）に示す情報が格納された状態となる。
【０１３３】
次に、修正候補抽出部２０４は、修正候補テーブルの各修正候補について、除外条件に合致するものを修正候補テーブルから削除する。ここでは、修正候補テーブルの項番２「WKCNT」が５文字以下であり、除外条件「５文字以下」に合致する。そこで、修正候補抽出部２０４は、修正候補テーブルから項番２の「WKCNT」を削除する（ステップＳ３１〜Ｓ３２）。
【０１３４】
これにより、修正候補テーブルは、図１５（ｃ）に示す情報が格納された状態となる。
【０１３５】
次に、修正候補抽出部２０４は、図１５（ｃ）に示す修正候補テーブルの修正候補のうち、その種類・属性が属性候補テーブルに含まれないものを除外する。この場合、項番１の修正候補「WKCNT01」の種類・属性は、図１４（ｃ）の属性候補テーブルの項番１の属性候補に該当する（ステップＳ３６でＹｅｓ）。また、項番３の修正候補「WKCNT02」の種類・属性は、図１４（ｃ）の属性候補テーブルの項番２の属性候補に該当する（ステップＳ３６でＹｅｓ）。ところが、項番４の修正候補「WKPOT01」の種類・属性は、図１４（ｃ）の属性候補テーブルに含まれない（ステップＳ３６でＮｏ）。そこで、修正候補抽出部２０４は、項番４の修正候補「WKPOT01」を、修正候補テーブルから削除する（ステップＳ３７）。
【０１３６】
これにより、修正候補テーブルは、図１５（ｄ）に示す情報が格納された状態となる。
【０１３７】
次に、修正部１０５は、項番１の修正候補「WKCNT01」および項番２の修正候補「WKCNT02」のうち（ステップＳ４１でＹｅｓ、ステップＳ４２でＹｅｓ）、照合率がより高い「WKCNT01」を修正語として決定する（ステップＳ４４）。そして、修正部１０５は、トークンテーブル、ディクショナリなどのコンパイラ内部情報において、未定義語「WKCOT01」を修正語「WKCNT01」に修正する（ステップＳ４５）。
【０１３８】
また、修正部１０５は、修正前のソースプログラムにおける未定義語（置換対象）の記述位置（行番号、桁位置など）、未定義語の文字列、修正語の文字列をそれぞれ表す情報を、修正語テーブルに登録する。ここでは、修正前のソースプログラムで翻訳エラーとなった110行目の「LIMTCNT」、120行目の「LIMITCT」、180行目の「WKCOT01」について修正処理が完了したことを想定する。この場合、修正結果テーブルには、図１６（ｂ）に示す情報が格納された状態となる。
【０１３９】
次に、結果出力部２０９は、修正結果テーブルに格納された情報を基に、修正結果を表す情報を生成する。ここでは、結果出力部２０９は、修正結果を表す情報として、修正語のソースプログラムおよび変換結果リストを生成するものとする。具体的には、結果出力部２０９は、修正前のソースプログラムにおいて、修正結果テーブルに基づき特定される未定義語を置換箇所として、修正語に置換する。これにより、図１７（ｂ）に示す修正後ソースプログラムが生成される。また、結果出力部２０９は、修正結果テーブルを基に、修正前後の語の対応関係を表す変換結果リストを生成する。これにより、図１８に示す変換結果リストが生成される。そして、結果出力部２０９は、生成した修正後ソースプログラムおよび変換結果リストを、出力装置１００６等に出力する。
【０１４０】
以上で、翻訳装置２および修正装置２０の具体的な動作例の説明を終了する。
【０１４１】
次に、本発明の第２の実施の形態の効果について述べる。
【０１４２】
本発明の第２の実施の形態としての翻訳装置および修正装置は、ユーザの修正作業や事前準備作業を十分に軽減しながら、過去に同様のエラーがなくても、ソースプログラムにおいて翻訳エラーとなる箇所をさらに精度よく修正することができる。
【０１４３】
その理由は、組合せ規則格納部に、定義語の属性の組合せに関する組合せ規則を格納しておき、属性候補抽出部は、構文規則に加えて組合せ規則に基づいて、属性候補を抽出するからである。
【０１４４】
これにより、本実施の形態は、構文規則において合致する属性を有していても、組合せ規則において合致しない属性を有する語を修正候補とすることがなく、より精度よく修正語を決定することができる。
【０１４５】
また、他の理由は、任意語格納部に、修正候補となり得る任意語およびその属性を格納しておき、修正候補抽出部は、定義語格納部に加えて任意語格納部から、翻訳エラーとなった未定義語に対する修正候補を抽出するからである。
【０１４６】
これにより、本実施の形態は、対象のソースプログラム内で定義されていない等の理由で定義語格納部に格納されていない任意語でも、修正候補に加えることができ、より精度よく修正語を決定することができる。
【０１４７】
また、さらに他の理由は、修正候補対象条件設定部が修正候補対象条件を設定し、修正候補抽出部は、修正候補を抽出できない場合は、修正候補対象条件を変更しながら修正候補を抽出するからである。
【０１４８】
これにより、本実施の形態は、修正候補を抽出できない場合でも、ユーザ作業を必要とせずに、修正候補を再抽出することが可能となる。
【０１４９】
このように、本実施の形態は、ソースプログラムにおける単純なスペルミスによる翻訳エラーを取り除くために人手によるプログラム修正および再コンパイルの作業を行う必要がない。また、本実施の形態は、文字列の類似性だけでなく、属性を考慮して修正候補を絞り込むことにより、言語仕様に合致した修正語を決定可能となる。また、本実施の形態は、修正候補対象条件を設定可能とすることにより、より柔軟に修正候補を抽出した中から修正語を決定することができる。また、本実施の形態は、任意語格納部を備えることにより、翻訳対象のソースプログラム単位内では解決できない翻訳エラーを修正可能である。また、本実施の形態は、結果出力部により修正後のソースプログラムを生成するため、ユーザの再修正作業を不要とする。また、本実施の形態は、結果出力部により修正結果の詳細を出力するため、利用者にとって修正内容の確認が容易である。また、本実施の形態は、翻訳装置の内部に実装され、修正した結果に基づいて翻訳を行うため、専用エディタや特別な機能を持つ開発支援製品を不要とする。
【０１５０】
例えば、上述の具体例のように、プログラミング言語ＣＯＢＯＬでは、プログラム記述の予約語、利用者定義語などについて、記述可能箇所や記述可能な属性の組み合わせが言語仕様として定められている。このようなプログラミング言語を対象とする場合、本実施の形態は、利用者により命名・定義された多数のデータ名や関数名が類似する場合であっても、属性を考慮して修正候補を絞り込むことができ、より正確な修正語に置換することができる。
【０１５１】
なお、本実施の形態において、ＣＯＢＯＬを対象とする具体例について説明したが、本発明が対象とするプログラミング言語を限定するものではない。上述した本発明の各実施の形態は、構文規則および組合せ規則に準ずる情報が言語仕様として定められているプログラミング言語に対して特に有効である。
【０１５２】
また、上述した本発明の各実施の形態は、特定の語および任意の語の記述順序に規則性があり、任意の語の属性について構文規則や組合せ規則に相当する規則を有する言語または文書であれば、プログラミング言語以外を対象とすることも可能である。
【０１５３】
また、上述した本発明の各実施の形態において、修正装置は、翻訳装置の内部に実装されるものとして説明したが、専用エディタや開発支援装置の内部への実装や、単独装置としての実装も可能である。
【０１５４】
また、上述した本発明の各実施の形態において、未定義語に類似する定義語または任意語を、文字列の照合率に基づいて抽出する例を中心に説明したが、未定義語に対する類似性の判断には、その他各種公知の技術を適用可能である。
【０１５５】
また、上述した本発明の各実施の形態において、翻訳装置および修正装置の各機能ブロックが、記憶装置またはＲＯＭに記憶されたコンピュータ・プログラムを実行するＣＰＵによって実現される例を中心に説明した。その他、各装置における各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
【０１５６】
また、上述した本発明の各実施の形態において、翻訳装置および修正装置の機能ブロックは、複数の装置に分散されて実現されてもよい。
【０１５７】
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した修正装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータの記憶装置（記憶媒体）に格納しておいてもよい。そして、係るコンピュータ・プログラムを当該ＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【０１５８】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【０１５９】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。
【符号の説明】
【０１６０】
１、２    翻訳装置
１０、２０    修正装置
１１    翻訳部
１０１    構文規則格納部
１０２    定義語格納部
１０３、２０３    属性候補抽出部
１０４、２０４    修正候補抽出部
１０５    修正部
２０６    組合せ規則格納部
２０７    任意語格納部
２０８    修正候補対象条件設定部
２０９    結果出力部
１００１    ＣＰＵ
１００２    ＲＡＭ
１００３    ＲＯＭ
１００４    記憶装置
１００５    入力装置
１００６    出力装置
【図１】
0006442908.tif 000002
【図２】
0006442908.tif 000003
【図３】
0006442908.tif 000004
【図４】
0006442908.tif 000005
【図５】
0006442908.tif 000006
【図６】
0006442908.tif 000007
【図７】
0006442908.tif 000008
【図８】
0006442908.tif 000009
【図９】
0006442908.tif 000010
【図１０】
0006442908.tif 000011
【図１１】
0006442908.tif 000012
【図１２】
0006442908.tif 000013
【図１３】
0006442908.tif 000014
【図１４】
0006442908.tif 000015
【図１５】
0006442908.tif 000016
【図１６】
0006442908.tif 000017
【図１７】
0006442908.tif 000018
【図１８】
0006442908.tif 000019