(57)【要約】【課題】文法エラーを自動的に修正し、ソースプログラムを変更・更新して出力するコンパイラ装置等を提供する。【解決手段】ソースプログラム中の文法エラーを修正するコンパイラ装置において、変換又は補完の対象となる候補を示す情報を記憶する記憶手段と、前記ソースプログラム中に文法エラー部分があるか否かを判断する判断手段と、前記判断手段により前記文法エラー部分があると判断された場合には、前記候補に基づいて前記文法エラー部分を正しい文法に変換又は補完する修正手段と、を備える。【選択図】図１
2010176439.tif 000002
【特許請求の範囲】
【請求項１】
ソースプログラム中の文法エラーを修正するコンパイラ装置において、
変換又は補完の対象となる候補を示す情報を記憶する記憶手段と、
前記ソースプログラム中に文法エラー部分があるか否かを判断する判断手段と、
前記判断手段により前記文法エラー部分があると判断された場合には、前記候補に基づいて前記文法エラー部分を正しい文法に変換又は補完する修正手段と、
を備えることを特徴とするコンパイラ装置。
【請求項２】
請求項１に記載のコンパイラ装置において、
ユーザによって作成されたリストであって前記候補が記述されたリストを入力する入力手段を更に備え、
前記修正手段は、前記文法エラー部分があると判断された場合において、前記リストに前記候補が記述されている場合は、当該リストに記述された候補に基づいて前記変換又は補完を行うことを特徴とするコンパイラ装置。
【請求項３】
請求項２に記載のコンパイラ装置において、
前記修正手段は、前記文法エラー部分があると判断された場合において、前記リストに前記候補が記述されていない場合は、予め記憶された前記候補に基づいて前記変換又は補完を行うことを特徴とするコンパイラ装置。
【請求項４】
ソースプログラム中の文法エラーを修正するコンパイラ装置のコンパイル方法において、
変換又は補完の対象となる候補を示す情報を記憶する記憶工程と、
前記ソースプログラム中に文法エラー部分があるか否かを判断する判断工程と、
前記判断工程において前記文法エラー部分があると判断された場合には、前記候補に基づいて前記文法エラー部分を正しい文法に変換又は補完する修正工程と、
を備えることを特徴とするコンパイル方法。
【請求項５】
ソースプログラム中の文法エラーを修正するコンパイラ装置に含まれるコンピュータを、
変換又は補完の対象となる候補を示す情報を記憶する記憶手段、
前記ソースプログラム中に文法エラー部分があるか否かを判断する判断手段、及び、
前記判断手段により前記文法エラー部分があると判断された場合には、前記候補に基づいて前記文法エラー部分を正しい文法に変換又は補完する修正手段、
として機能させることを特徴とするコンパイラ装置用プログラム。
【請求項６】
請求項５に記載のコンパイラ装置用プログラムがコンピュータに読み取り可能に記録されていることを特徴とする記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースプログラム中の文法エラーを修正するコンパイラ装置等に関する。
【背景技術】
【０００２】
プログラムやデータ等の移行・変換する作業において、例えば特許文献１にはコンパイラが提供する構文解析ルール以外に利用者が定義する制限規則等を利用者定義ルールとして記述する旨が開示されている。また、特許文献２には異機種コンパイラ間コード対応表を有し、変換規則に基づいて異機種コンピュータに移植する旨が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平０２−１９０９３５号公報
【特許文献２】特開平１０−０１１２７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記した技術では、他社製のコンパイラで開発されたプログラムを自社製のコンパイラでコンパイルする場合、数百本〜数千本のソースプログラムが対象となるため、単純な文法エラーであっても修正する対象が多くなり、作業工数を要していた。また、自社製のコンパイラにおいても、異なるプラットフォーム間のコンパイラを評価するテストプログラムを移植する場合には、各コンパイラの文法に従って数千〜数万本のテストプログラムが修正の対象となり、作業工数を要していた。また、単純な置換（変換）で対応することが可能な場合は、簡単な置換（変換）用のツールを作成すれば作業工数を削減することが可能であるが、文脈依存で修正が必要な場合は、コンパイラ解析処理と同等の考慮が必要となるためツールの作成の難易度が高くなってしまい、作業工数を要していた。更にまた、移行用の変換ツール等を準備する場合は、１回の変換作業自体を効率化することが可能であるが、複数の移行対象を扱う場合には、移行対象が異なる毎に変換ツール等の修正作業が発生するため、変換ツール等のメンテナンスが必要であった。
【０００５】
また、特許文献１では、構文解析ルールに組み込むことを特徴としているのみであり、特に入力されるソースプログラムを変更・更新して出力するものではなかった。また、特許文献２では、異機種間の文法の差異について変換を行うことを特徴としており、文法エラーについても正しい文法に自動的に修正するものではなかった。
【０００６】
そこで、本発明は、上記問題点に鑑みて為されたものであり、その目的の一例は、文法エラーを正しい文法に自動的に修正し、ソースプログラムを変更・更新して出力するコンパイラ装置等を提供することである。
【課題を解決するための手段】
【０００７】
上記の課題を解決するために、本発明のコンパイラ装置は、ソースプログラム中の文法エラーを修正するコンパイラ装置において、変換又は補完の対象となる候補を示す情報を記憶する記憶手段と、前記ソースプログラム中に文法エラー部分があるか否かを判断する判断手段と、前記判断手段により前記文法エラー部分があると判断された場合には、前記候補に基づいて前記文法エラー部分を正しい文法に変換又は補完する修正手段と、を備えることを特徴とする。
【０００８】
上記の課題を解決するために、本発明のコンパイル方法は、ソースプログラム中の文法エラーを修正するコンパイラ装置のコンパイル方法において、変換又は補完の対象となる候補を示す情報を記憶する記憶工程と、前記ソースプログラム中に文法エラー部分があるか否かを判断する判断工程と、前記判断工程において前記文法エラー部分があると判断された場合には、前記候補に基づいて前記文法エラー部分を正しい文法に変換又は補完する修正工程と、を備えることを特徴とする。
【０００９】
上記の課題を解決するために、本発明のコンパイラ装置用プログラムは、ソースプログラム中の文法エラーを修正するコンパイラ装置に含まれるコンピュータを、変換又は補完の対象となる候補を示す情報を記憶する記憶手段、前記ソースプログラム中に文法エラー部分があるか否かを判断する判断手段、及び、前記判断手段により前記文法エラー部分があると判断された場合には、前記候補に基づいて前記文法エラー部分を正しい文法に変換又は補完する修正手段、として機能させることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、ソースプログラムを異なるプラットフォームへ移植するときや異なるベンダのコンパイラを用いて開発していたソースプログラムを移植するとき等に生じる文法解釈の違いによる文法エラーを修正する必要が無くなる。
【００１１】
また本発明によれば、変換後のソースプログラムが生成されるため、変換以降は正しい文法に修正されたソースプログラムを利用することができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施形態に係るコンパイラ１００の概要構成の一例を示す図である。
【図２】変換指示リストの一例を示す図である。
【図３】変換前後のソースプログラムの一例を示す図である。
【図４】変換前後の対応を示す変換対応リストの一例を示す図である。
【図５】仮解析の結果において文法エラーと判断された場合の変換処理の一例を示す図である。
【発明を実施するための形態】
【００１３】
次に、本発明に好適な実施の形態について、図面に基づいて説明する。なお、以下に説明する実施の形態は、コンパイラ１００に対して本発明を適用した場合の実施の形態である。
【００１４】
先ず、本発明の実施形態に係るコンパイラ１００の構成及び機能について、図１等を用いて説明する。なお、図１は、本発明の実施形態に係るコンパイラ１００の概要構成の一例を示す図である。
【００１５】
図１に示すように、コンパイラ１００（コンパイラ装置の一例）は、仮解析フロントエンド部１０１（記憶手段の一例、判断手段の一例、及び修正手段の一例）と、本解析フロントエンド部１０２と、バックエンド部１０３とを備えて構成されている。なお、仮解析フロントエンド部１０１には、操作部３００（入力手段の一例）と外部機器４００とが接続されている。
【００１６】
操作部３００は、例えば、キーボード及びマウス等からなり、ユーザからの操作指示を受け付け、その指示内容を指示信号として仮解析フロントエンド部１０１に出力する。
【００１７】
外部機器４００は、例えば、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ等からなり、文字や画像等の情報を表示する。
【００１８】
仮解析フロントエンド部１０１は、既存のコンパイラのフロントエンドにおける解析処理を用いてソースプログラム変換のための解析処理を行う（以下、当該処理を仮解析と称する）。具体的には、仮解析フロントエンド部１０１は、後述の変換指示リスト（リストの一例）に基づいて、仮解析処理をする。そして仮解析フロントエンド部１０１は、当該仮解析処理の出力結果として、文法エラーが修正された変換後のソースプログラムを記憶部２００に出力するとともに、変換前後の対応を示す変換対応リストを外部機器４００に出力する。
【００１９】
ここで、上記変換指示リストについて、図２を参照して説明する。なお、図２は、変換指示リストの一例を示す図である。
【００２０】
図２に示すように、当該変換指示リストは、ユーザが操作部３００により置換（変換）・補完の対応リストを作成し、コンパイラ１００に変換方法の指示を与えることができるリストである。
【００２１】
次に、上記変換前後のソースプログラムにおける各行の変換内容について、図３を参照して説明する。なお、図３は、変換前後のソースプログラムの一例を示す図である。
【００２２】
図３に示すように、２行目では、本来「ＰＲＯＧＲＡＭ‐ＩＤ」であるべき記述が、「ＰＩＤ」となっているため、文法エラーが発生する。そこで、上記変換指示リストによって、予約語「ＰＲＯＧＲＡＭ‐ＩＤ」に変換を行う。
【００２３】
次に３行目では、「ＥＮＶＩＲＯＮＭＥＮＴ」の綴りの誤りにより、文法エラーが発生する。そこで、コンパイラ固定方式によって、正しい予約語に変換する。
【００２４】
次に１０‐１１行目では、データ定義の前に、データ定義の節の宣言が抜けているため、文法エラーが発生する。そこで、コンパイラ固定方式によって、コンパイラ１００が予め準備している作業場所節「ＷＯＲＫＩＮＧ‐ＳＴＯＲＡＧＥＳＥＣＴＩＯＮ．」の宣言を補完する。
【００２５】
次に１１４行目では、ＥＶＡＬＵＡＴＥの構文で、必要語「ＡＬＳＯ」が省略されているため、文法エラーが発生する。そこで、コンパイラ固定方式によって、予約語「ＡＬＳＯ」を補完する。
【００２６】
次に２００行目では、未定義のデータ項目「ＲＥＴＵＲＮ‐ＣＯＤＥ」が記述されているため、文法エラーが発生する。そこで、上記変換指示リストによって、既定義のデータ項目「ＣＯＭＰＬＥＴＩＯＮ‐ＣＯＤＥ」に変換する。なお、ＲＥＴＵＲＮ‐ＣＯＤＥ，ＣＯＭＰＬＥＴＩＯＮ‐ＣＯＤＥは、何れもベンダ独自のコンパイラにより暗黙定義されているデータとする。
【００２７】
次に１１３行目は、７カラム目に「＊」があるため注記行となり、文法解析の対象とならないため、変換は行われない。
【００２８】
なお、１１３行目を含め、上記以外の記述においては、特に文法エラーは発生しないため、変換なしのままとなる。
【００２９】
また１１３行目が文法解析の対象行となった場合は、「ＭＯＢＥ」は文法エラーとなるため、「ＭＯＶＥ」に変換される。
【００３０】
なお、図３に示す変換前後のプログラムは、固定形式のＣＯＢＯＬプログラムを適用した場合の例であり、変換部分を太文字で示す。また、各行の先頭から６桁の記述の扱いについてはコンパイラ１００が任意に決定するものとする。
【００３１】
次に、上記変換対応リストについて、図４を参照して説明する。なお、図４は、変換前後の対応を示す変換対応リストの一例を示す図である。
【００３２】
図４に示すように、当該変換対応リストは、変換対象となったソースプログラムの物理行番号と、変換メッセージのメッセージ番号と、診断メッセージと、変換内容とから構成されている。なお、上記変換対象となったソースプログラムの物理行番号において、例えばＣＯＢＯＬ登録集のように、翻訳前に展開されるマクロのような機能によりソースプログラムの行数が変更されるような機能を利用している場合の行番号の付け方は任意とする。また、上記変換メッセージのメッセージ番号において、メッセージ番号の付け方は任意とする。また、上記診断メッセージにおいて、診断メッセージの内容は任意とする。更に、上記変換内容において、変換前後の内容を示す方法は任意とする。
【００３３】
次に、本発明の実施形態に係るコンパイラ１００の動作について、図５を参照して説明する。なお、図５は、仮解析の結果において文法エラーと判断された場合の変換処理の一例を示す図である。
【００３４】
先ずコンパイラ１００は、仮解析の結果に問題が無いか否かを判断する（ステップＳ１０１）。そして、当該仮解析の結果に問題があると判断した場合（ステップＳ１０１：ＮＯ）、既存のフロントエンド部の解析処理において文法エラーが発生すると通常翻訳異常メッセージを出力するので、当該メッセージにより文法エラーの発生の原因（異常の対象）が予約語に関連するか否かを判断する（ステップＳ１０２）。一方、ステップＳ１０１において、当該仮解析の結果に問題が無いと判断した場合（ステップＳ１０１：ＹＥＳ）、コンパイル１００はそのままの内容のソースプログラムを記憶部２００に出力する（ステップＳ１０７）。
【００３５】
ステップＳ１０２において、上記異常の対象が予約語である場合（ステップＳ１０２：ＹＥＳ）、コンパイラ１００は、上記変換指示リストの有無を判断する（ステップＳ１０３）。そして当該変換指示リストが存在する場合（ステップＳ１０３：ＹＥＳ）、次に、当該変換指示リストに変換又は補完の対象となる候補があるか否かを判断する（ステップＳ１０４）。一方、当該変換指示リストが存在しない場合（ステップＳ１０３：ＮＯ）、ステップＳ１０６に移行する。
【００３６】
ステップＳ１０４において、当該変換指示リストに変換又は補完の対象となる候補がある場合（ステップＳ１０４：ＹＥＳ）、コンパイラ１００は、当該変換指示リストの内容を元にして置換（変換）を行い、変換後のソースプログラムを記憶部２００に出力するとともに、当該変換・補完した内容を示す変換対応リストを外部機器４００に出力して（ステップＳ１０５）、当該処理を終了する。一方、上記変換指示リストに変換又は補完の対象となる候補がない場合（ステップＳ１０４：ＮＯ）、ステップＳ１０６に移行する。
【００３７】
次にステップＳ１０６において、コンパイラ１００は、予め準備している変換又は補完の対象となる候補への置換（変換）・補完（以下、コンパイラ固定方式と称する）、又は、データマイニングの手法やテキストパターンマッチの手法を用いたコンパイラ独自解析による変換（以下、コンパイラ独自解析方式と称する）の何れかを行うことによって、変換後のソースプログラムを記憶部２００に出力するとともに、当該置換（変換）・補完した内容を示す変換対応リストを外部機器４００に出力し（ステップＳ１０６）、当該処理を終了する。
【００３８】
以上説明したように、本実施形態によれば、ソースプログラムを異なるプラットフォームへ移植するときや、異なるベンダのコンパイラを用いて開発していたソースプログラムを移植するとき等における細かい文法解釈の違いによる文法エラーを修正する必要が無くなり、また変換ツールの作成も不要となり、作業工数を削減することができる。
【００３９】
また本実施形態によれば、プラットフォーム間、ベンダ間、バージョン間の細かい文法の違いによる文法エラーを自動的に正しい文法への読み替えを行うことにより、移行する際の移植性を高めることができる。
【００４０】
また本実施形態によれば、変換後のソースプログラムが生成されるため、変換以降は正しい文法に修正されたソースプログラムを利用することができる。
【００４１】
なお、本発明は、上記実施形態に限定されるものではなく、その要旨を逸脱しない範囲において変更することが可能である。例えば、本実施形態においては仮解析フロントエンド部１０１を追加することにより変換を行っているが、当該仮解析フロントエンド部１０１を追加せずに従来のコンパイラ構成のままで本変換処理を組み込むことが可能である。また仮解析フロントエンド部１０１は、コンパイラ１００の通常の処理と切り離すことが可能であるため、コンパイルオプション等によって仮解析処理を行うか否かを選択させることや、仮解析処理のみを行う実装も可能である。
【符号の説明】
【００４２】
１００  コンパイラ
１０１  仮解析フロントエンド部
１０２  本解析フロントエンド部
１０３  バックエンド部
２００  記憶部
３００  操作部
４００  表示部
５００  格納部
【図１】
2010176439.tif 000003
【図２】
2010176439.tif 000004
【図３】
2010176439.tif 000005
【図４】
2010176439.tif 000006
【図５】
2010176439.tif 000007