(58)【調査した分野】(Int.Cl.,DB名)
ソースプログラムを記述するプログラミング言語において記述文中に記載可能な定義語の属性に関する規則(構文規則)を格納する構文規則格納部と、前記ソースプログラムにおける定義語およびその属性を格納する定義語格納部と、前記プログラミング言語において同一記述文中に記載可能な複数の定義語についてそれらの属性の組合せに関する規則(組合せ規則)を格納する組合せ規則格納部を用いて、
前記ソースプログラムにおいて翻訳エラーとなった未定義語の属性の候補(属性候補)を前記構文規則に加えて前記組合せ規則に基づいて抽出する属性候補抽出ステップと、
前記未定義語との文字列の照合率が所定条件を満たす前記定義語のうち、前記属性候補として抽出された属性を有する定義語を、修正候補として前記定義語格納部から抽出する修正候補抽出ステップと、
前記修正候補から修正語を選択し、前記未定義語を前記修正語に修正する修正ステップ
と、
をコンピュータ装置に実行させるコンピュータ・プログラム。
【発明を実施するための形態】
【0021】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【0022】
(第1の実施の形態)
本発明の第1の実施の形態としての翻訳装置1および修正装置10の構成を
図1に示す。
図1において、翻訳装置1は、修正装置10と、翻訳部11とを含む。また、修正装置10は、構文規則格納部101と、定義語格納部102と、属性候補抽出部103と、修正候補抽出部104と、修正部105とを含む。
【0023】
ここで、翻訳装置1は、
図2に示すように、CPU(Central Processing Unit)1001と、RAM(Random Access Memory)1002と、ROM(Read Only Memory)1003と、ハードディスク等の記憶装置1004と、入力装置1005と、出力装置1006とを備えたコンピュータ装置によって構成可能である。この場合、翻訳部11は、入力装置1005と、出力装置1006と、ROM1003および記憶装置1004に記憶されたコンピュータ・プログラムおよび各種データをRAM1002に読み込んで実行するCPU1001とによって構成される。また、修正装置10の構文規則格納部101および定義語格納部102は、記憶装置1004によって構成される。また、属性候補抽出部103、修正候補抽出部104および修正部105は、ROM1003および記憶装置1004に記憶されたコンピュータ・プログラムおよび各種データをRAM1002に読み込んで実行するCPU1001によって構成される。なお、翻訳装置1および修正装置10、ならびに、その各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【0024】
翻訳部11は、翻訳対象のソースプログラムをオブジェクトプログラムに翻訳する際に、翻訳エラーとなる未定義語を、修正装置10を用いて修正する。また、翻訳部11は、翻訳の際にコンパイラ内部情報を生成する。例えば、コンパイラ内部情報には、トークンテーブルやディクショナリが含まれる。ここで、トークンテーブルは、プログラムの記述を語単位に分解した情報である。また、ディクショナリは、語の属性情報を含む情報である。このようなコンパイラ内部情報は、後述の定義語格納部102により用いられる。なお、翻訳部11は、翻訳対象のソースプログラムを指定する情報を、入力装置1005を介して取得することにより、翻訳を開始してもよい。また、翻訳部11は、翻訳対象のソースプログラムを記憶装置1004等から取得してもよい。また、翻訳部11は、修正装置10を用いて未定義語を修正することにより翻訳したオブジェクトプログラムを、記憶装置1004等に出力してもよい。また、翻訳部11は、翻訳結果を表す情報を、出力装置1006に出力してもよい。
【0025】
構文規則格納部101は、構文規則を格納する。構文規則とは、ソースプログラムが記述されたプログラミング言語において記述文中に記載可能な定義語の属性に関する規則である。例えば、構文規則は、記述文の種類、その記述文において定義語が記述され得る位置(記述位置)、および、その位置に記述される定義語がとり得る属性をそれぞれ表す情報によって構成されていてもよい。
【0026】
定義語格納部102は、ソースプログラムにおける定義語およびその属性を格納する。定義語格納部102は、このような定義語およびその属性を、翻訳部11により生成されるコンパイラ内部情報に基づいて抽出し、格納してもよい。あるいは、翻訳部11が、翻訳を行う際に、生成したコンパイラ内部情報に基づいて、定義語およびその属性を抽出し、定義語格納部102に格納してもよい。
【0027】
属性候補抽出部103は、ソースプログラムにおいて翻訳エラーとなった未定義語の属性の候補(属性候補)を、構文規則に基づいて抽出する。例えば、構文規則が、前述したように記述文の種類、記述位置、および、属性によって構成される場合、属性候補抽出部103は、未定義語の出現する記述文の種類およびその記述位置に合致する構文規則で定められた属性を、属性候補として抽出すればよい。
【0028】
修正候補抽出部104は、未定義語に類似する定義語のうち、属性候補として抽出された属性を有する定義語を、修正候補として定義語格納部102から抽出する。例えば、修正候補抽出部104は、未定義語に類似するか否かを、文字列の照合率に基づいて判定してもよい。この場合、修正候補抽出部104は、未定義語に対する文字列の照合率が所定条件を満たす定義語のうち、属性候補の示す属性を有するものを、修正候補とすればよい。
【0029】
修正部105は、修正候補から修正語を選択する。もし、修正候補抽出部104によって複数の修正候補が抽出されている場合、修正部105は、所定の基準に基づいて、修正語を選択すればよい。例えば、修正部105は、複数の修正候補から、未定義語および修正候補間の文字列の照合率に基づいて、修正語を選択してもよい。
【0030】
また、修正部105は、翻訳エラーのあった未定義語を、選択した修正語に修正する。例えば、修正部105は、翻訳中に生成したトークンやディクショナリ等のコンパイラ内部情報における未定義語を修正語に修正する。これにより、翻訳部11は、翻訳エラーを回避して翻訳を続けることができる。
【0031】
以上のように構成された翻訳装置1における修正装置10の動作について、
図3を参照して説明する。ここでは、翻訳装置1において、翻訳部11がソースプログラムを取得して翻訳を開始し、翻訳エラーとなった各未定義語について、その未定義語に関する情報を入力として修正装置10を動作させる。ここで、修正装置10に入力される未定義語に関する情報には、例えば、未定義語の文字列、出現する記述文の種類、および、その記述位置をそれぞれ表す情報が含まれるものとする。これにより、修正装置10は、以下の動作を開始する。
【0032】
なお、以下の動作において、構文規則格納部101にはあらかじめ構文規則が格納されているものとする。また、定義語格納部102には、翻訳部11により生成されたコンパイラ内部情報に基づいて、定義語およびその属性が既に格納されているものとする。
【0033】
まず、属性候補抽出部103は、ソースプログラムにおいて翻訳エラーとなった未定義語の属性候補を、構文規則に基づいて抽出する(ステップS1)。
【0034】
例えば、前述のように、構文規則が、記述文の種類、記述位置および属性によって構成される場合、属性候補抽出部103は、未定義語の出現する記述文の種類および記述位置に合致する構文規則において、定められている属性を属性候補として抽出すればよい。
【0035】
次に、修正候補抽出部104は、定義語格納部102から、未定義語に類似する定義語を抽出する(ステップS2)。
【0036】
例えば、前述のように、修正候補抽出部104は、未定義語に対する文字列の照合率が所定条件を満たす定義語を、未定義語に類似する定義語として抽出してもよい。
【0037】
次に、修正候補抽出部104は、ステップS2で抽出された類似する定義語のうち、ステップS1で属性候補として抽出された属性を有する定義語を、修正候補として抽出する(ステップS3)。
【0038】
次に、修正部105は、ステップS3で抽出された修正候補から修正語を選択する(ステップS4)。
【0039】
例えば、前述のように、修正候補抽出部104によって複数の修正候補が抽出されている場合、修正部105は、未定義語および各修正候補間の文字列の照合率に基づいて、修正語を選択してもよい。
【0040】
次に、修正部105は、未定義語を、ステップS4で選択された修正語に修正する(ステップS5)。
【0041】
例えば、前述のように、修正部105は、翻訳中に生成したトークンやディクショナリ等のコンパイラ内部情報における未定義語を修正語に修正してもよい。
【0042】
以上で、修正装置10は、動作を終了する。
【0043】
次に、本発明の第1の実施の形態の効果について述べる。
【0044】
本発明の第1の実施の形態としての翻訳装置および修正装置は、ユーザの修正作業や事前準備作業を十分に軽減しながら、過去に同様のエラーがなくても、ソースプログラムにおいて翻訳エラーとなる箇所をより精度よく修正することができる。
【0045】
その理由は、構文規則格納部に、定義語の属性に関する構文規則を格納しておき、定義語格納部に、ソースプログラムにおける定義語およびその属性を格納しておくからである。そして、属性候補抽出部が、ソースプログラムにおいて翻訳エラーとなった未定義語の属性候補を構文規則に基づいて抽出するからである。そして、修正候補抽出部が、未定義語に類似する定義語のうち、属性候補として抽出された属性を有する定義語を、修正候補として定義語格納部から抽出するからである。そして、修正部が、修正候補から修正語を選択し、未定義語を修正語に修正するからである。
【0046】
このように、本実施の形態は、ソースプログラムにおける定義語が格納された定義語格納部を修正候補の抽出対象として用いるため、修正候補となる語の事前登録作業を必要とせず、過去の修正履歴を必要としない。また、本実施の形態は、複数の修正候補から修正語を選択するので、ユーザの修正作業を必要としない。また、本実施の形態は、未定義語に対する類似性だけでなく、未定義語の属性候補を考慮して修正候補を抽出するので、より精度の高い修正語を選択することができる。
【0047】
(第2の実施の形態)
次に、本発明の第2の実施の形態について図面を参照して詳細に説明する。なお、本実施の形態の説明において参照する各図面において、本発明の第1の実施の形態と同一の構成および同様に動作するステップには同一の符号を付して本実施の形態における詳細な説明を省略する。
【0048】
まず、本発明の第2の実施の形態としての翻訳装置2の構成を
図4に示す。
図4において、翻訳装置2は、本発明の第1の実施の形態としての翻訳装置1に対して、修正装置10に替えて修正装置20を備える点が異なる。また、修正装置20は、本発明の第1の実施の形態としての修正装置10に対して、属性候補抽出部103に替えて属性候補抽出部203と、修正候補抽出部104に替えて修正候補抽出部204とを備え、さらに、組合せ規則格納部206と、任意語格納部207と、修正候補対象条件設定部208と、結果出力部209とを備える点が異なる。
【0049】
ここで、翻訳装置2および修正装置20が
図2に示したハードウェア要素を備えるコンピュータ装置によって構成される場合、組合せ規則格納部206および任意語格納部207は、記憶装置1004によって構成される。また、修正候補対象条件設定部208は、入力装置1005と、ROM1003および記憶装置1004に記憶されたコンピュータ・プログラムおよび各種データをRAM1002に読み込んで実行するCPU1001とによって構成される。また、結果出力部209は、出力装置1006と、ROM1003および記憶装置1004に記憶されたコンピュータ・プログラムおよび各種データをRAM1002に読み込んで実行するCPU1001とによって構成される。なお、翻訳装置2および修正装置20、ならびに、その各機能ブロックのハードウェア構成は、上述の構成に限定されない。
【0050】
組合せ規則格納部206は、組合せ規則を格納する。組合せ規則は、プログラミング言語において同一記述文中に記載可能な複数の定義語についての、それらの属性の組合せに関する規則である。ここで、属性の組合せとは、同一記述文中に記載可能な複数の定義語について、そのうち1つの属性が決定している場合には、他の少なくとも1つの属性が限定されることをいう。例えば、組合せ規則は、記述文の種類、その記述文中に記述可能な一方の定義語の属性、および、一方の定義語の属性に対して組合せ可能な他方の定義語の属性からなる情報であってもよい。なお、組合せ規則格納部206は、このような組合せ規則として、翻訳装置2にあらかじめ保持される組合せ規則を利用可能である。
【0051】
任意語格納部207は、未定義語の修正候補となりうる任意語およびその属性を格納する。任意語は、未定義語の修正候補としたい語であって、定義語格納部102に含まれない任意の文字列である。例えば、任意語としては、対象のソースプログラムの外部で定義され、対象のソースプログラムで参照される定義語等が想定される。任意語格納部207は、このような任意語およびその属性を、入力装置1005を介して入力される情報に基づいて格納してもよい。
【0052】
属性候補抽出部203は、構文規則および組合せ規則に基づいて属性候補を抽出する。例えば、属性候補抽出部203は、まず、本発明の第1の実施の形態と同様に、構文規則において、未定義語の出現する記述文においてその記述位置に対応する属性を、属性候補として抽出する。さらに、属性候補抽出部203は、未定義語が記述されているソースプログラムの記述文において、他の定義語が記述されている場合は、属性候補を組合せ規則と照合する。具体的には、属性候補抽出部203は、組合せ規則格納部206を参照し、構文規則格納部101から抽出した属性候補のうち、その記述文において他の定義語の属性に対して組合せ可能な属性を属性候補として残す。また、属性候補抽出部203は、組合せ不可能な属性を、属性候補から除外する。
【0053】
修正候補抽出部204は、本発明の第1の実施の形態と同様に、定義語格納部102から修正候補を抽出することに加えて、任意語格納部207からも修正候補を抽出する。具体的には、修正候補抽出部204は、未定義語に類似する任意語のうち、属性候補として抽出された属性を有する任意語を、修正候補として任意語格納部207からさらに抽出すればよい。
【0054】
また、修正候補抽出部204は、定義語格納部102および任意語格納部207から修正候補を抽出する際に、修正候補対象条件を用いる。修正候補対象条件とは、例えば、文字列の照合率が閾値以上であることや、除外条件を満たさないことであってもよい。具体的には、修正候補抽出部204は、修正候補対象条件に合致する語のうち、属性候補の示す属性を有するものを、修正候補とすればよい。このような修正候補対象条件は、後述の修正候補対象条件設定部208によって設定される。
【0055】
また、修正候補抽出部204は、修正候補を1つも抽出できなかった場合、修正候補対象条件を変更して再度修正候補の抽出を試みてもよい。例えば、修正候補対象条件が、照合率が閾値以上であることを表す場合、修正候補抽出部204は、所定の照合率変更幅だけ照合率の閾値を下げて再度修正候補の抽出処理を行ってもよい。また、この場合、修正候補抽出部204は、所定の最低照合率まで照合率を変更しても修正候補を抽出できない場合、再抽出処理を中止してもよい。
【0056】
修正候補対象条件設定部208は、修正候補対象条件を設定する。修正候補対象条件は、例えば、前述のように、未定義語との文字列の照合率が閾値以上であることや、除外条件に合致しないことであってもよい。また、修正候補対象条件は、複数の条件の組合せであってもよい。
【0057】
また、修正候補対象条件設定部208は、修正候補対象条件を設定・変更するためのパラメータを、入力装置1005を介して取得してもよい。例えば、修正候補対象条件設定部208は、照合率の閾値、最低照合率、照合率変更幅、除外条件等のパラメータを、入力装置1005を介して取得し、取得した値を用いて修正候補対象条件を設定してもよい。この場合、修正候補対象条件設定部208は、入力がないパラメータについて、あらかじめ定められた値を用いるようにしてもよい。
【0058】
結果出力部209は、修正部105による修正結果を表す情報を、記憶装置1004または出力装置1006等に出力する。修正結果を表す情報とは、例えば、修正後のソースプログラムや、未定義語および修正語の対応を示すリスト等であってもよい。
【0059】
以上のように構成された翻訳装置2における修正装置20の動作について、図面を参照して説明する。ここでは、翻訳装置2において、翻訳部11がソースプログラムを取得して翻訳を開始し、翻訳エラーとなった各未定義語について、その未定義語に関する情報を入力として修正装置20を動作させる。ここで、修正装置20に入力される未定義語に関する情報には、未定義語の文字列、出現する記述文の種類、その記述位置、同一の記述文中に他の定義語があるか否か、ある場合は他の定義語の属性をそれぞれ表す情報が含まれるものとする。これにより、修正装置20は、以下の動作を開始する。
【0060】
なお、以下の動作において、構文規則格納部101および組合せ規則格納部206には、それぞれ構文規則および組合せ規則があらかじめ格納されているものとする。また、定義語格納部102には、翻訳部11により生成されたコンパイラ内部情報に基づいて、定義語およびその属性が既に格納されているものとする。また、任意語格納部207には、修正候補となり得る任意語およびその属性が格納されているものとする。
【0061】
まず、修正装置20の動作の概略を
図5に示す。
【0062】
図5では、まず、修正候補対象条件設定部208は、修正候補対象条件を設定する(ステップS11)。
【0063】
例えば、前述のように、修正候補対象条件設定部208は、修正候補対象条件を設定・変更するためのパラメータとして、照合率の閾値、最低照合率、照合率変更幅、または、除外条件を表す情報を入力装置1005から取得することにより、修正候補対象条件を設定してもよい。
【0064】
次に、属性候補抽出部203は、ソースプログラムにおいて翻訳エラーとなった未定義語の属性候補を、構文規則および組合せ規則に基づいて抽出する(ステップS12)。このステップの詳細については後述する。
【0065】
次に、修正候補抽出部204は、未定義語の修正候補を、修正候補対象条件を用いて、定義語格納部102および任意語格納部207から抽出する(ステップS13)。このステップの詳細については後述する。
【0066】
次に、修正部105は、未定義語を修正語に修正する(ステップS14)。このステップの詳細については後述する。
【0067】
次に、結果出力部209は、ステップS14における修正の結果を表す情報を出力する(ステップS15)。
【0068】
例えば、前述のように、結果出力部209は、修正後のソースプログラムや、修正した未定義語および修正語の対応を示すリスト等を、修正結果を表す情報として出力してもよい。
【0069】
以上で、修正装置20は、動作を終了する。
【0070】
次に、ステップS12における属性候補の抽出処理の詳細について、
図6を参照して説明する。
【0071】
図6において、まず、属性候補抽出部203は、構文規則に基づいて、未定義語の属性候補を抽出する(ステップS21)。
【0072】
具体的には、属性候補抽出部203は、構文規則格納部101に格納された各構文規則について、未定義語の出現する記述文の種類および記述位置に合致するか否かを判断する。そして、属性候補抽出部203は、合致する構文規則において、その記述位置に定められている属性を、属性候補として抽出すればよい。
【0073】
次に、属性候補抽出部203は、この未定義語について組合せ規則との照合が必要か否かを判断する(ステップS22)。
【0074】
具体的には、属性候補抽出部203は、この未定義語と同一記述文中に他の定義語が出現しているか否かに基づいて、組合せ規則との照合が必要か否かを判断すればよい。
【0075】
ここで、組合せ規則との照合が不要と判断した場合、属性候補抽出部203は、属性候補の抽出処理を終了する。
【0076】
一方、組合せ規則との照合が必要と判断した場合、属性候補抽出部203は、組合せ規則に基づいて、同一記述文中に出現する他の定義語の属性と組合せ可能な属性を抽出する(ステップS23)。
【0077】
具体的には、属性候補抽出部203は、組合せ規則格納部206に格納された各組合せ規則について、未定義語の出現する記述文の種類、および、同一記述文中に出現する他の定義語の属性が合致するか否かを判断する。そして、属性候補抽出部203は、合致する各組合せ規則において、その属性に組合せ可能なものとして定められているもう一方の属性を抽出すればよい。
【0078】
次に、属性候補抽出部203は、ステップS21で抽出した属性候補のうち、ステップS23で抽出した組合せ可能な属性に含まれるものを残し、含まれないものを除外する(ステップS24)。そして、属性候補抽出部203は、属性候補の抽出処理を終了する。
【0079】
以上で、属性候補抽出処理の説明を終了する。
【0080】
次に、ステップS13における修正候補の抽出処理の詳細について、
図7を参照して説明する。
【0081】
図7において、まず、修正候補抽出部204は、定義語格納部102または任意語格納部207に格納される各定義語および各任意語について、ステップS31〜S32の処理を実行する。
【0082】
ここでは、まず、修正候補抽出部204は、この定義語または任意語が、修正候補対象条件を満たすか否かを判断する(ステップS31)。
【0083】
例えば、修正候補対象条件として、文字列の照合率が閾値以上であり、かつ、除外条件を満たさないという条件が設定されているとする。この場合、修正候補抽出部204は、この定義語または任意語について、未定義語に対する文字列の照合率が閾値以上であり、かつ、除外条件を満たさないか否かを判断すればよい。
【0084】
ここで、修正候補対象条件を満たす場合、修正候補抽出部204は、この定義語または任意語およびその属性を、修正候補として抽出する(ステップS32)。
【0085】
一方、ステップS31において修正候補対象条件を満たさないと判断された場合、修正候補抽出部204は、この定義語または任意語の判断処理を終了する。
【0086】
各定義語および各任意語についてステップS31〜S32の処理を完了すると、次に、修正候補抽出部204は、修正候補が少なくとも1つは抽出されたか否かを判断する(ステップS33)。
【0087】
ここで、修正候補が1つも抽出されていない場合、修正候補抽出部204は、修正候補対象条件の変更が可能か否かを判断する(ステップS34)。
【0088】
例えば、前述の最低照合率および照合率変更幅が設定されている場合、修正候補抽出部204は、現在の照合率の閾値を照合率変更幅だけ下げた値が、最低照合率以上であるか否かに基づいて、修正候補対象条件の変更が可能か否かを判断してもよい。
【0089】
ここで、修正候補対象条件の変更が可能でない場合、修正候補抽出部204は、修正候補抽出処理を終了する。
【0090】
一方、修正候補対象条件の変更が可能である場合、修正候補抽出部204は、修正候補対象条件を変更する(ステップS35)。
【0091】
例えば、前述の照合率変更幅が設定されている場合、修正候補抽出部204は、現在の照合率の閾値を照合率変更幅だけ下げてもよい。
【0092】
そして、修正候補抽出部204は、定義語格納部102および任意語格納部207に含まれる各定義語および各任意語について、ステップS31〜S32の処理を再度実行する。
【0093】
一方、ステップS33において、修正候補が少なくとも1つは抽出されている場合、修正候補抽出部204は、各修正候補について、ステップS36〜S37の処理を実行する。
【0094】
ここでは、まず、修正候補抽出部204は、この修正候補の属性が、ステップS12で抽出された属性候補のいずれかに該当するか否かを判断する(ステップS36)。
【0095】
なお、属性候補が1つも抽出されていなかった場合、修正候補抽出部204は、修正候補抽出不可を表す情報を出力装置1006に出力し、動作を終了してもよい。
【0096】
ステップS36において、この修正候補の属性が、属性候補のいずれかに該当する場合、修正候補抽出部204は、この修正候補を残す。
【0097】
一方、ステップS36において、この修正候補の属性が、属性候補のいずれにも該当しない場合、修正候補抽出部204は、この修正候補を除外する(ステップS37)。
【0098】
各修正候補についてステップS36〜S37の処理を完了すると、修正候補抽出部204は、修正候補の抽出処理を終了する。
【0099】
次に、ステップS14における修正処理の詳細について、
図8を参照して説明する。
【0100】
図8では、まず、修正部105は、ステップS13において修正候補が少なくとも1つは抽出されたか否かを判断する(ステップS41)。
【0101】
ここで、1つも修正候補が抽出されていない場合、修正部105は、動作を終了する。このとき、修正部105は、修正不可を表す情報を出力装置1006に出力してもよい。
【0102】
一方、1つ以上の修正候補が抽出されている場合、修正部105は、1つの修正候補が抽出されているか複数の修正候補が抽出されているかを判断する(ステップS42)。
【0103】
ここで、1つの修正候補が抽出されている場合、修正部105は、その修正候補を修正語として選択し(ステップS43)、ステップS45の処理に進む。
【0104】
一方、複数の修正候補が抽出されている場合、修正部105は、複数の修正候補から、修正語を選択する(ステップS44)。例えば、修正部105は、未定義語との照合率に基づいて、修正語を選択してもよい。この場合、修正部105は、未定義語との照合率が最も高い修正候補を修正語として選択してもよい。なお、照合率が同率である等の理由により修正語を選択できない場合、修正部105は、修正不可として処理を終了してもよい。このとき、修正部105は、修正不可を表す情報を出力装置1006に出力してもよい。
【0105】
次に、修正部105は、選択した修正語を用いて未定義語を修正する(ステップS45)。
【0106】
例えば、前述のように、修正部105は、翻訳中に生成したトークンやディクショナリ等のコンパイラ内部情報において、未定義語を修正語に修正してもよい。
【0107】
以上で、修正部105は、修正処理を終了する。
【0108】
次に、上述した修正装置20の構成および動作を具体例で示す。
【0109】
なお、この具体例では、翻訳装置2としてCOBOLのコンパイラを適用する。すなわち、翻訳部11は、COBOLで記述されたソースプログラムを翻訳し、翻訳エラーとなる各未定義語について翻訳装置2に含まれる修正装置20を呼び出す。また、この具体例では、定義語の属性として、種類および属性を適用するものとする。ここで、定義語の種類とは、定義語がデータ名であるか、関数名であるか、プログラム名であるか等を示すものとする。また、属性とは、節、型、字類、項類、長さ、引数に関する情報等、定義語に付随する各種情報を示すものとする。なお、この具体例では、語の種類および属性を、本発明における属性として扱い、以降、「種類・属性」とも記載する。
【0110】
また、ここでは、修正装置20は、処理中のデータを一時的に格納する領域として、属性候補テーブル、修正候補テーブル、修正結果テーブルを用いるものとする。また、翻訳装置2は、翻訳中にトークンテーブルおよびディクショナリを生成するものとする。
【0111】
また、この具体例では、修正装置20には、修正候補対象条件に関するパラメータとして、照合率、最低照合率、照合率変更幅、および、除外条件が設定されているものとする。例えば、これらのパラメータは、コマンドラインオプション、環境変数、または、設定ファイル等により設定されるようになっていてもよい。
【0112】
また、この具体例では、
図9に示すように、照合率、最低照合率および照合率変更幅としては、それぞれ0より大きく100未満の数値が設定可能となっている。また、除外条件としては、文字数、開始文字、含まれる文字列等に関する条件が設定可能となっている。
【0113】
また、構文規則格納部101には、
図10に一例を示す構文規則が格納されている。これらの構文規則は、記述文の種類、記述位置、その記述位置に記載可能な定義語の種類、その定義語がとり得る属性とからなる。例えば、項番1の構文規則は、IF文の左辺に記載可能な定義語の種類はデータ名であり、そのとり得る属性は、作業場所節、字類数字、項類数字、外部10進数であることを示している。なお、
図10における項番は、説明のために付加した情報であり、構文規則として必ずしも必要な情報ではない。
【0114】
また、組合せ規則格納部206には、
図11に一例を示す組合せ規則が格納されている。これらの組合せ規則は、記述文の種類と、組合せ可能なオペランド1の種類・属性およびオペランド2の種類・属性とからなる。例えば、項番1の組合せ規則は、IF文において、オペランド1(またはオペランド2)の属性が「データ名、作業場所節、字類数字、項類数字、外部10進数、…」であれば、オペランド2(またはオペランド1)の属性が「データ名、作業場所節、字類数字、項類数字、外部10進数、…」に限定されることを表している。なお、
図11における項番は、説明のために付加した情報であり、組合せ規則として必ずしも必要な情報ではない。
【0115】
なお、
図10および
図11に示したような構文規則および組合せ規則は、翻訳装置2が翻訳のために有する各種情報に基づきあらかじめ格納可能である。
【0116】
定義語格納部102は、
図12に示すように、定義語の文字列およびその種類・属性を格納する。なお、これらの情報は、翻訳部11による翻訳時に生成されるトークンおよびディクショナリから抽出可能である。なお、
図12における項番は、説明のために付加した情報であり、定義語格納部102に必ずしも必要な情報ではない。
【0117】
任意語格納部207は、
図13に示すように、任意語の文字列およびその種類・属性を格納する。例えば、任意語としては、修正候補となりうる外部属性のデータ名や関数名等が想定される。そのような任意語は、翻訳単位内に定義が出現しない。そのため、そのような任意語は、トークンから抽出されない。このように、任意語格納部207には、修正候補となりうるが定義語格納部102には格納されない任意語およびその種類・属性について、利用者により入力された情報が格納されているものとする。なお、
図13における項番は、説明のために付加した情報であり、任意語格納部207に必ずしも必要な情報ではない。
【0118】
一時的なデータ格納領域である属性候補テーブルは、
図14(a)に示すように、各属性候補についてその種類・属性を格納可能となっている。属性候補テーブルには、属性候補抽出部203によって抽出される属性候補が格納される。なお、
図14における項番は、説明のために付加した情報であり、属性候補テーブルに必ずしも必要な情報ではない。
【0119】
一時的なデータ格納領域である修正候補テーブルは、
図15(a)に示すように、各修正候補について、任意語であるか定義語であるか、その文字列、その種類・属性、および、対象の未定義語との照合率とをそれぞれ表す情報を格納可能となっている。修正候補テーブルには、修正候補抽出部204によって抽出される修正候補が格納される。なお、
図15における項番は、説明のために付加した情報であり、修正候補テーブルに必ずしも必要な情報ではない。
【0120】
一時的なデータ格納領域である修正結果テーブルは、
図16(a)に示すように、ソースプログラムにおける記述位置、その記述位置で翻訳エラーとなった未定義語の文字列、および、それに対して決定された修正語の文字列とを格納可能となっている。修正語テーブルには、修正部105によって決定される情報が格納される。なお、
図16における項番は、説明のために付加した情報であり、修正候補テーブルに必ずしも必要な情報ではない。
【0121】
以上のように構成されたCOBOLの翻訳装置2およびその内部に実装された修正装置20の動作について説明する。
【0122】
ここでは、翻訳装置2は、
図17(a)に示す修正前のソースプログラムを対象とする。なお、翻訳装置2の翻訳部11は、任意のタイミングで修正装置20の各部を動作させてよい。例えば、翻訳部11は、初期処理(例えば、オプション解析など)において、修正装置20の修正候補対象条件設定部208を動作させ、照合率等の各種パラメータの設定を行ってもよい。また、翻訳部11は、翻訳の際の各種解析処理において語の文字列が原因で翻訳エラーが発生した場合に、修正装置20の属性候補抽出部203、修正候補抽出部204、修正部105を動作させて修正語を決定してもよい。ここで、翻訳の際の各種解析処理とは、例えば、字句解析、構文解析、意味解析などである。また、翻訳エラーとしては、例えば、定義の無いデータ名が演算や比較の処理に使用されているなどがある。また、翻訳部11は、翻訳結果の出力処理において、修正装置20の結果出力部209を動作させて修正結果を表示してもよい。
【0123】
まず、修正候補対象条件設定部208は、照合率の閾値、最低照合率、照合率変更幅、および、除外条件を、コマンドラインオプション、環境変数、または、設定ファイルに基づき設定する(ステップS11)。ここでは、照合率の閾値として80%、最低照合率として50%、照合率変更幅として5%、除外条件として5文字以下をそれぞれ表す情報が設定されたものとする。
【0124】
次に、属性候補抽出部203は、翻訳部11から、翻訳エラーとなった未定義語の記述文の種類、記述位置、同一記述文中の他の定義語の有無、他の定義語の種類・属性の情報を取得する。ここでは、
図17(a)に示した修正前のソースプログラムの110行目において、「LIMTCNT」が未定義のため翻訳エラーとなったものとする。この場合、属性候補抽出部203は、未定義語の記述位置として「IF文の右辺」を表す情報を取得する。また、属性候補抽出部203は、同一記述文中の他の定義語の有無として、「有」を表す情報を取得する。また、属性候補抽出部203は、他の定義語「WKCNT01」の種類・属性として「作業場所節のデータ名で、字類が数字、項類が数字、データの表現形式はCOMP-1で2バイト、…」を表す情報を取得する。
【0125】
次に、属性候補抽出部203は、
図10に示した構文規則格納部101のうち、未定義語の記述文の種類および記述位置「IF文の右辺」が合致する構文規則は項番10、11、12であると判断する。そして、属性候補抽出部203は、項番10、11、12の構文規則でそれぞれ定められた種類・属性を、属性候補テーブルに登録する(ステップS21)。
【0126】
これにより、属性候補テーブルには、
図14(b)に示す情報が登録された状態となる。
【0127】
次に、属性候補抽出部203は、この未定義語「LIMTCNT」と同一記述文中に他の定義語「WKCNT01」があるため(ステップS22でYes)、組合せ規則との照合を行う。具体的には、属性候補抽出部203は、
図11に示した組合せ規則格納部206のうち、記述文IFにおけるオペランド1に定義語「WKCNT01」の上述の種類・属性が定められた組合せ規則は、項番2、3であると判断する。そして、属性候補抽出部203は、項番2、3においてオペランド1の種類・属性と組合せ可能なオペランド2の種類・属性を抽出する。ここでは、「作業場所節、字類数字、項類数字、COMP-1、2バイト、…」と、「作業場所節、字類数字、項類数字、COMP-2、4バイト、…」とが、組合せ可能な種類・属性として抽出される(ステップS23)。
【0128】
そして、属性候補抽出部203は、属性候補テーブルに登録された属性候補(
図14(b))のうち、組合せ可能なオペランド2の種類・属性に含まれないものを属性候補テーブルから削除する。この場合、属性候補テーブルに登録されている項番3の属性候補「作業場所節、字類英数字、項類英数字、英数字項目、1バイト、…」は、組合せ可能なオペランド2の種類・属性に含まれない。したがって、属性候補抽出部203は、項番3の属性候補を属性候補テーブルから削除する(ステップS24)。
【0129】
これにより、属性候補テーブルには、
図14(c)に示す情報が格納された状態となる。
【0130】
次に、修正候補抽出部204は、翻訳エラーとなった未定義語の文字列を取得する。ここでは、
図17(a)の修正前のソースプログラムの180行目において翻訳エラーとなる「WKCOT01」の文字列を取得した場合について説明する。
【0131】
次に、修正候補抽出部204は、
図12に示した定義語格納部102および
図13に示した任意語格納部207から、未定義語「WKCOT01」との文字列の照合率が80%以上である語を修正候補として抽出し、その種類・属性と共に修正候補テーブルに登録する。ここでは、定義語「WKCNT01」が照合率86%で、定義語「WKCNT」が照合率70%で、定義語「WKCNT02」が照合率71%で、任意語「WKPOT01」が照合率86%で抽出されたものとする。
【0132】
これにより、修正候補テーブルは、
図15(b)に示す情報が格納された状態となる。
【0133】
次に、修正候補抽出部204は、修正候補テーブルの各修正候補について、除外条件に合致するものを修正候補テーブルから削除する。ここでは、修正候補テーブルの項番2「WKCNT」が5文字以下であり、除外条件「5文字以下」に合致する。そこで、修正候補抽出部204は、修正候補テーブルから項番2の「WKCNT」を削除する(ステップS31〜S32)。
【0134】
これにより、修正候補テーブルは、
図15(c)に示す情報が格納された状態となる。
【0135】
次に、修正候補抽出部204は、
図15(c)に示す修正候補テーブルの修正候補のうち、その種類・属性が属性候補テーブルに含まれないものを除外する。この場合、項番1の修正候補「WKCNT01」の種類・属性は、
図14(c)の属性候補テーブルの項番1の属性候補に該当する(ステップS36でYes)。また、項番3の修正候補「WKCNT02」の種類・属性は、
図14(c)の属性候補テーブルの項番2の属性候補に該当する(ステップS36でYes)。ところが、項番4の修正候補「WKPOT01」の種類・属性は、
図14(c)の属性候補テーブルに含まれない(ステップS36でNo)。そこで、修正候補抽出部204は、項番4の修正候補「WKPOT01」を、修正候補テーブルから削除する(ステップS37)。
【0136】
これにより、修正候補テーブルは、
図15(d)に示す情報が格納された状態となる。
【0137】
次に、修正部105は、項番1の修正候補「WKCNT01」および項番2の修正候補「WKCNT02」のうち(ステップS41でYes、ステップS42でYes)、照合率がより高い「WKCNT01」を修正語として決定する(ステップS44)。そして、修正部105は、トークンテーブル、ディクショナリなどのコンパイラ内部情報において、未定義語「WKCOT01」を修正語「WKCNT01」に修正する(ステップS45)。
【0138】
また、修正部105は、修正前のソースプログラムにおける未定義語(置換対象)の記述位置(行番号、桁位置など)、未定義語の文字列、修正語の文字列をそれぞれ表す情報を、修正語テーブルに登録する。ここでは、修正前のソースプログラムで翻訳エラーとなった110行目の「LIMTCNT」、120行目の「LIMITCT」、180行目の「WKCOT01」について修正処理が完了したことを想定する。この場合、修正結果テーブルには、
図16(b)に示す情報が格納された状態となる。
【0139】
次に、結果出力部209は、修正結果テーブルに格納された情報を基に、修正結果を表す情報を生成する。ここでは、結果出力部209は、修正結果を表す情報として、修正語のソースプログラムおよび変換結果リストを生成するものとする。具体的には、結果出力部209は、修正前のソースプログラムにおいて、修正結果テーブルに基づき特定される未定義語を置換箇所として、修正語に置換する。これにより、
図17(b)に示す修正後ソースプログラムが生成される。また、結果出力部209は、修正結果テーブルを基に、修正前後の語の対応関係を表す変換結果リストを生成する。これにより、
図18に示す変換結果リストが生成される。そして、結果出力部209は、生成した修正後ソースプログラムおよび変換結果リストを、出力装置1006等に出力する。
【0140】
以上で、翻訳装置2および修正装置20の具体的な動作例の説明を終了する。
【0141】
次に、本発明の第2の実施の形態の効果について述べる。
【0142】
本発明の第2の実施の形態としての翻訳装置および修正装置は、ユーザの修正作業や事前準備作業を十分に軽減しながら、過去に同様のエラーがなくても、ソースプログラムにおいて翻訳エラーとなる箇所をさらに精度よく修正することができる。
【0143】
その理由は、組合せ規則格納部に、定義語の属性の組合せに関する組合せ規則を格納しておき、属性候補抽出部は、構文規則に加えて組合せ規則に基づいて、属性候補を抽出するからである。
【0144】
これにより、本実施の形態は、構文規則において合致する属性を有していても、組合せ規則において合致しない属性を有する語を修正候補とすることがなく、より精度よく修正語を決定することができる。
【0145】
また、他の理由は、任意語格納部に、修正候補となり得る任意語およびその属性を格納しておき、修正候補抽出部は、定義語格納部に加えて任意語格納部から、翻訳エラーとなった未定義語に対する修正候補を抽出するからである。
【0146】
これにより、本実施の形態は、対象のソースプログラム内で定義されていない等の理由で定義語格納部に格納されていない任意語でも、修正候補に加えることができ、より精度よく修正語を決定することができる。
【0147】
また、さらに他の理由は、修正候補対象条件設定部が修正候補対象条件を設定し、修正候補抽出部は、修正候補を抽出できない場合は、修正候補対象条件を変更しながら修正候補を抽出するからである。
【0148】
これにより、本実施の形態は、修正候補を抽出できない場合でも、ユーザ作業を必要とせずに、修正候補を再抽出することが可能となる。
【0149】
このように、本実施の形態は、ソースプログラムにおける単純なスペルミスによる翻訳エラーを取り除くために人手によるプログラム修正および再コンパイルの作業を行う必要がない。また、本実施の形態は、文字列の類似性だけでなく、属性を考慮して修正候補を絞り込むことにより、言語仕様に合致した修正語を決定可能となる。また、本実施の形態は、修正候補対象条件を設定可能とすることにより、より柔軟に修正候補を抽出した中から修正語を決定することができる。また、本実施の形態は、任意語格納部を備えることにより、翻訳対象のソースプログラム単位内では解決できない翻訳エラーを修正可能である。また、本実施の形態は、結果出力部により修正後のソースプログラムを生成するため、ユーザの再修正作業を不要とする。また、本実施の形態は、結果出力部により修正結果の詳細を出力するため、利用者にとって修正内容の確認が容易である。また、本実施の形態は、翻訳装置の内部に実装され、修正した結果に基づいて翻訳を行うため、専用エディタや特別な機能を持つ開発支援製品を不要とする。
【0150】
例えば、上述の具体例のように、プログラミング言語COBOLでは、プログラム記述の予約語、利用者定義語などについて、記述可能箇所や記述可能な属性の組み合わせが言語仕様として定められている。このようなプログラミング言語を対象とする場合、本実施の形態は、利用者により命名・定義された多数のデータ名や関数名が類似する場合であっても、属性を考慮して修正候補を絞り込むことができ、より正確な修正語に置換することができる。
【0151】
なお、本実施の形態において、COBOLを対象とする具体例について説明したが、本発明が対象とするプログラミング言語を限定するものではない。上述した本発明の各実施の形態は、構文規則および組合せ規則に準ずる情報が言語仕様として定められているプログラミング言語に対して特に有効である。
【0152】
また、上述した本発明の各実施の形態は、特定の語および任意の語の記述順序に規則性があり、任意の語の属性について構文規則や組合せ規則に相当する規則を有する言語または文書であれば、プログラミング言語以外を対象とすることも可能である。
【0153】
また、上述した本発明の各実施の形態において、修正装置は、翻訳装置の内部に実装されるものとして説明したが、専用エディタや開発支援装置の内部への実装や、単独装置としての実装も可能である。
【0154】
また、上述した本発明の各実施の形態において、未定義語に類似する定義語または任意語を、文字列の照合率に基づいて抽出する例を中心に説明したが、未定義語に対する類似性の判断には、その他各種公知の技術を適用可能である。
【0155】
また、上述した本発明の各実施の形態において、翻訳装置および修正装置の各機能ブロックが、記憶装置またはROMに記憶されたコンピュータ・プログラムを実行するCPUによって実現される例を中心に説明した。その他、各装置における各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
【0156】
また、上述した本発明の各実施の形態において、翻訳装置および修正装置の機能ブロックは、複数の装置に分散されて実現されてもよい。
【0157】
また、上述した本発明の各実施の形態において、各フローチャートを参照して説明した修正装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータの記憶装置(記憶媒体)に格納しておいてもよい。そして、係るコンピュータ・プログラムを当該CPUが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【0158】
また、上述した各実施の形態は、適宜組み合わせて実施されることが可能である。
【0159】
また、本発明は、上述した各実施の形態に限定されず、様々な態様で実施されることが可能である。