(57)【要約】【課題】  従来はプログラムに対して付加情報、例えばデバッグコードを挿入する場合、プログラムの構成を深く理解して挿入していた。【解決手段】  この発明のプログラム変換実行計算機１０１は、第１のプログラムの文法定義情報毎の文法定義番号に対応させて第１のプログラムに挿入する付加情報を記憶する付加情報記憶部１０７と、文法定義番号に対応する対応構文情報を記憶した構文解析情報記憶部１０４ａと、構文解析情報記憶部１０４ａが記憶した対応構文情報を用いてプログラムを解析して解析結果情報を生成して出力するとき、解析に使用した対応構文情報の文法定義番号と同じ文法定義番号の付加情報を解析結果情報に含めて出力する解析部１４と、解析結果情報から付加情報が挿入された第２のプログラムを生成する変換部１０６を備えた。【選択図】        図１
2006031331.tif 000002
【特許請求の範囲】
【請求項１】
所定のプログラムの構文規則に基づいて定義された第１のプログラムに対して所定の付加情報を挿入して第２のプログラムに変換するプログラム変換実行計算機において、
所定のプログラムの構文規則に基づく文法の種類を定義する文法定義情報と、上記文法定義情報を識別する文法定義識別情報と、上記文法定義情報に対応する構文を定義する対応構文情報とを構文解析情報として記憶する構文解析情報記憶部と、
上記付加情報と付加情報を挿入する位置情報とを対応して記憶する付加情報記憶部と、
上記第１のプログラムを入力して、入力した第１のプログラムを上記構文解析情報記憶部が記憶した構文解析情報を用いて解析して解析結果情報を生成するとともに、解析に使用した構文解析情報の文法定義識別情報に基づいて上記付加情報記憶部が記憶する位置情報を検索して、上記文法定義識別情報と適合する位置情報を検索できた場合に付加情報を取得し、取得した付加情報を上記解析結果情報に含めて出力し、上記文法定義識別情報と適合する位置情報を検索できなかった場合に、上記解析結果情報を出力する解析部と、
上記解析部が出力した解析結果情報を入力して、入力した解析結果情報から第２のプログラムを生成するプログラム変換部と
を備えたことを特徴とするプログラム変換実行計算機。
【請求項２】
上記第１のプログラムと第２のプログラムとは、異なるプログラム言語の構文規則に基づいて定義され、
上記プログラム変換実行計算機は、上記解析結果情報と上記付加情報とを上記異なるプログラミング言語間で共通の形式に変換した共通形式情報として記憶する共通形式情報記憶部を備え、
上記解析部は、上記解析結果情報を上記共通形式情報に変換して上記共通形式情報記憶部に出力し、
上記プログラム変換部は、上記共通形式情報記憶部が記憶した共通形式情報から第２のプログラムを生成することを特徴とする請求項１記載のプログラム変換実行計算機。
【請求項３】
上記付加情報記憶部は、上記位置情報に対応する上記付加情報を複数記憶し、
上記プログラム変換実行計算機は、上記付加情報記憶部が記憶した複数の付加情報から上記第１のプログラムに挿入する付加情報を選択させる選択付加情報を記憶する選択付加情報記憶部を備え、
上記解析部は、上記解析に使用した構文解析情報の文法定義識別情報に基づいて上記付加情報記憶部を検索する場合、上記選択付加情報記憶部が記憶する選択付加情報と一致する付加情報の位置情報が上記文法定義識別情報と適合するか否かを判定する
ことを特徴とする請求項１または２記載のプログラム変換実行計算機。
【請求項４】
上記選択付加情報記憶部は、上記選択付加情報に対応させて上記付加情報を所定の形式に変換させるための形式変換情報を記憶し、
上記解析部は、上記付加情報を出力する場合、上記付加情報に基づいて上記選択付加情報記憶部を検索して上記付加情報に適合する上記選択付加情報に対応する形式変換情報を取得し、取得した形式変換情報に従い上記付加情報を変換し、変換した付加情報を上記解析結果情報に含めて出力する
ことを特徴とする請求項３記載のプログラム変換実行計算機。
【請求項５】
上記プログラム変換実行計算機は、上記第１のプログラムに挿入する所定の付加情報によって参照することを定義された部品情報を記憶する部品記憶部を備え、
上記選択付加情報記憶部が記憶する形式変換情報は、上記付加情報を上記部品記憶部が記憶する部品情報を参照する形式に変換するための部品参照情報を有し、
上記解析部は、上記付加情報を上記解析結果情報に含めて出力する場合、上記付加情報を上記形式変換情報の部品参照情報に従い変換し、変換した付加情報を上記解析結果情報に含めて出力し、
上記プログラム変換部は、上記解析結果情報に上記部品情報を参照する形式に変換された付加情報が含まれている場合、上記部品記憶部が記憶した部品情報を参照する上記第２のプログラムを生成し、
上記プログラム変換実行計算機は、上記プログラム変換部が生成した第２のプログラムを実行して上記部品情報記憶部が記憶する部品情報を参照する実行部を備えた
ことを特徴とする請求項４記載のプログラム変換実行計算機。
【請求項６】
上記付加情報記憶部が記憶する付加情報は、上記第１のプログラムの条件式を挿入する条件式情報を有し、
上記解析部は、上記文法定義識別情報と適合する位置情報を検索できた場合に上記条件式情報を有する付加情報を取得し、取得した付加情報を上記解析結果情報に含めて出力し、
上記プログラム変換部は、上記解析結果情報に上記条件式情報を有する付加情報が含まれている場合、上記条件式情報から条件式を生成して、生成した条件式を有する第２のプログラムを生成する
ことを特徴とする請求項１記載のプログラム変換実行計算機。
【請求項７】
上記プログラム変換実行計算機は、上記第２のプログラムのプログラム言語を指定して選択させるプログラム言語選択情報を入力して、入力したプログラム言語選択情報を上記プログラム変換部に対して出力して、プログラム変換部に対して第２のプログラムのプログラム言語を選択させる変換選択部を備え、
上記プログラム変換部は、上記共通形式情報記憶部が記憶した共通形式情報から上記第２のプログラムを生成する場合に、上記第１のプログラムのプログラム言語と同じプログラム言語のプログラムに変換する第１のプログラム変換部と、上記第１のプログラムのプログラム言語とは異なる別のプログラム言語のプログラムに変換する第２のプログラム変換部とを備えて、上記変換選択部からプログラム言語選択情報を入力して、入力したプログラム言語選択情報に基づいて上記第１のプログラム選択部と第２のプログラム選択部とのいずれか一方を選択して動作させる
ことを特徴とする請求項２記載のプログラム変換実行計算機。
【請求項８】
上記付加情報記憶部が記憶する付加情報は、上記第２のプログラムに挿入された付加情報を削除することと削除しないことのいずれか一方を示す削除情報を有し、
上記解析部は、上記文法定義識別情報と適合する位置情報を検索できた場合に上記削除情報を有する付加情報を取得し、取得した付加情報を上記解析結果情報に含めて出力し、
上記プログラム変換部は、上記解析結果情報に上記削除情報を有する付加情報が含まれている場合、上記削除情報に基づくコメント文を生成して、生成したコメント文を上記付加情報に対応させて文第２のプログラムを生成する
ことを特徴とする請求項１記載のプログラム変換実行計算機。
【請求項９】
上記プログラム変換実行計算機は、上記プログラム変換部が生成した第２のプログラムを入力して、入力した第２のプログラムに上記付加情報に対応するコメント文から付加情報を削除することと削除しないことのいずれか一方を判定して、削除することを判定した場合にコメント文に対応する付加情報を削除する付加情報削除部を備えた
ことを特徴とする請求項８記載のプログラム変換実行計算機。
【請求項１０】
所定のプログラムの構文規則に基づいて定義された第１のプログラムに対して所定の付加情報を挿入して第２のプログラムに変換することを計算機によって実行するプログラム変換実行方法において、
所定のプログラムの構文規則に基づく文法の種類を定義する文法定義情報と、上記文法定義情報を識別する文法定義識別情報と、上記文法定義情報に対応する構文を定義する対応構文情報とを構文解析情報として記憶部に記憶する構文解析情報記憶工程と、
上記付加情報と付加情報を挿入する位置情報とを対応して記憶部に記憶する付加情報記憶工程と、
上記第１のプログラムを入力して、入力した第１のプログラムを上記構文解析情報記憶工程によって記憶部に記憶した構文解析情報を用いて解析して解析結果情報を生成するとともに、解析に使用した構文解析情報の文法定義識別情報に基づいて上記付加情報記憶工程によって記憶部に記憶した位置情報を検索して、上記文法定義識別情報と適合する位置情報を検索できた場合に付加情報を取得し、取得した付加情報を上記解析結果情報に含めて出力し、上記文法定義識別情報と適合する位置情報を検索できなかった場合に、上記解析結果情報を出力する解析工程と、
上解析工程によって出力した解析結果情報を入力して、入力した解析結果情報から第２のプログラムを生成するプログラム変換工程と
を有することを特徴とするプログラム変換実行方法。
【請求項１１】
所定のプログラムの構文規則に基づいて定義された第１のプログラムに対して所定の付加情報を挿入して第２のプログラムに変換することをコンピュータに実行させるプログラムにおいて、
所定のプログラムの構文規則に基づく文法の種類を定義する文法定義情報と、上記文法定義情報を識別する文法定義識別情報と、上記文法定義情報に対応する構文を定義する対応構文情報とを構文解析情報として記憶部に記憶する構文解析情報記憶処理と、
上記付加情報と付加情報を挿入する位置情報とを対応して記憶部に記憶する付加情報記憶処理と、
上記第１のプログラムを入力して、入力した第１のプログラムを上記構文解析情報記憶処理によって記憶部に記憶した構文解析情報を用いて解析して解析結果情報を生成するとともに、解析に使用した構文解析情報の文法定義識別情報に基づいて上記付加情報記憶処理によって記憶部に記憶した位置情報を検索して、上記文法定義識別情報と適合する位置情報を検索できた場合に付加情報を取得し、取得した付加情報を上記解析結果情報に含めて出力し、上記文法定義識別情報と適合する位置情報を検索できなかった場合に、上記解析結果情報を出力する解析処理と、
上解析処理によって出力した解析結果情報を入力して、入力した解析結果情報から第２のプログラムを生成するプログラム変換処理と
をコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プログラムを作成した場合に正しく動作するかをチェックするためのプログラムのデバッグ機能に関する。
【背景技術】
【０００２】
作成したプログラムが適切に動作するか否かを確認するためには、プログラム中にデバッグコードを挿入したり、コンパイル時にデバッグ機能を動作させるための情報を埋め込むことにより、プログラムの実行時にデバッグ用の情報を出力させたり、プログラムの動作をブレークさせてプログラムの実行状況を取得することにより行っていた。
【０００３】
例えば、特開２０００−２０７２４６（特許文献１）では、プログラムを解析してプログラムの所望の注目箇所についてログ出力命令をプログラム中に挿入することにより、実行過程が記録されてデバッグ可能となる。
【特許文献１】特開２０００−２０７２４６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
従来の技術では、プログラム中へのデバッグコードの挿入において、ユーザが手動でデバッグコードを挿入する場合、デバッグコードの挿入位置を決めるために、ユーザはプログラムの構成を深く理解する必要があった。また、さらに挿入した位置が適切かどうかは実行しないと確認できないため、プログラムのデバッグ環境を整えるための時間を必要とする作業であった。
【０００５】
さらに、特開２０００−２０７２４６（特許文献１）では、自動的にデバッグ情報としてログ出力命令をプログラム中に挿入することが可能である。ログ出力命令を挿入するための指定には、プログラムにおける変数・関数・宣言文などを対象にした識別子に対して行う。しかし、識別子の値の変化による条件指定も可能であるが、識別子以外には指定が不可能であった。したがって、プログラムの流れに従ってデバッグコードを出力するなど、デバッグコードの挿入位置を、全体を対象として細かな単位で制御することができないという問題点があった。
【０００６】
本発明は、上記のような従来技術の問題点を解決するために提案されたもので、その目的は、プログラムに対して、自動的にデバッグコードを挿入して、効率的にプログラムのデバッグを可能とするプログラム変換実行計算機を提案することである。また、プログラムに対して、自動的にデバッグコードを挿入して、効率的にプログラムのデバッグを可能とするコンピュータによって実行されるプログラムを提供することにある。
【課題を解決するための手段】
【０００７】
この発明に係るプログラム変換実行計算機は、所定のプログラムの構文規則に基づいて定義された第１のプログラムに対して所定の付加情報を挿入して第２のプログラムに変換するプログラム変換実行計算機において、所定のプログラムの構文規則に基づく文法の種類を定義する文法定義情報と、上記文法定義情報を識別する文法定義識別情報と、上記文法定義情報に対応する構文を定義する対応構文情報とを構文解析情報として記憶する構文解析情報記憶部と、上記付加情報と付加情報を挿入する位置情報とを対応して記憶する付加情報記憶部と、上記第１のプログラムを入力して、入力した第１のプログラムを上記構文解析情報記憶部が記憶した構文解析情報を用いて解析して解析結果情報を生成するとともに、解析に使用した構文解析情報の文法定義識別情報に基づいて上記付加情報記憶部が記憶する位置情報を検索して、上記文法定義識別情報と適合する位置情報を検索できた場合に付加情報を取得し、取得した付加情報を上記解析結果情報に含めて出力し、上記文法定義識別情報と適合する位置情報を検索できなかった場合に、上記解析結果情報を出力する解析部と、上記解析部が出力した解析結果情報を入力して、入力した解析結果情報から第２のプログラムを生成するプログラム変換部とを備えたことを特徴とする。
【発明の効果】
【０００８】
この発明は、プログラム構成については詳細に把握している必要もないため、変換元のプログラムの構成について知識がない場合でも、解析作業を行わずにデバッグ情報の挿入が可能である。このことは、プログラムの作成者でないものがプログラムのテストを行う際に、プログラムの処理内容を深く理解していなくても容易にプログラムのデバッグ情報を挿入して、テスト用のプログラムに変換できる。また、だれがテスト用のプログラムを作成しても変換もとのプログラムが同じであれば、同じテスト用プログラムに変換できる。このため、誰がプログラムテストを行っても一定の水準のプログラムテストを行うことができる効果がある。
【発明を実施するための最良の形態】
【０００９】
実施の形態１．
この実施の形態では、プログラム変換実行計算機がプログラムＡを入力して、プログラムＡに対して付加情報（デバッグ情報は付加情報の一例）を挿入して、プログラムＡをプログラムＡ’に変換する一例を説明する。なお、プログラムＡは第１のプログラムの一例であり、プログラムＡ’は第２のプログラムの一例である。また、プログラムＡとプログラムＡ’とはそれぞれ、同一のプログラム言語の構文規則に基づいて定義されるものとする。
【００１０】
図１は、この発明の実施の形態１におけるプログラム変換実行計算機の構成を示す機能ブロック図である。図１において、プログラム変換実行計算機１０１は、プログラムＡに対して付加情報を挿入してプログラムＡ’へと変換する。プログラムＡ１０２は、変換元の第１のプログラムの一例、プログラムＡ’１０３は、変換後の第２のプログラムの一例である。解析部１４は、プログラム解析部１０４と付加情報解析部１０８とを備える。記憶部１５は、構文解析情報記憶部１０４ａと付加情報記憶部１０７とを備える。構文解析情報記憶部１０４ａは、プログラムを解析する際に参考とする構文解析情報を記憶する。図４に構文解析情報記憶部１０４ａが記憶する構文解析情報の一例を示す。図４において構文解析情報は、プログラムの構文規則に基づく文法の種類を定義する文法定義情報２０２と、文法定義情報２０２を識別するために文法定義情報２０２に対応してつけられた文法定義番号２０１と、文法定義情報２０２に対応する構文を定義する対応構文情報２０３とを有している。図５に付加情報記憶部１０７が記憶する付加情報の一例を示す。デバッグ情報は付加情報の一例であり、図５において付加情報記憶部１０７は、変換元のプログラムに挿入する付加情報２０６と、付加情報２０６に対応させて付加情報を挿入する位置情報として、構文解析情報記憶部１０４ａが記憶する文法定義番号２０１と一致している文法定義番号２０１と文法定義番号２０１に対して例えば前に挿入する指定や後に挿入する指定を行なう出力位置２０４とを記憶する。
【００１１】
付加情報２０６は文法定義に対応して付加を行なう情報の定義である。そのうち出力位置２０４は、対応する構文に対して「前」或いは「後」というように出力位置を指定する。出力情報２０５は、デバッグコードとして出力する情報を指定する。例えば指定した変数の値を出力する場合には「Ｖａｌ（）」と定義し、変数の文字列をそのまま出力する場合には「Ｓｔｒ（）」で定義する。例えば文法定義番号２０１が「１７」の場合には、代入式の左辺となる「ｌｈｓ」に対応する値をデバッグコードとして出力するという指定内容である。この指定内容では、変換後のプログラムには「Ｌｏｇ（ｌｈｓ）；」というように、ｌｈｓの値を出力するソースコードが追加される。「ｌｈｓ」の文字列出力の場合には「Ｓｔｒ（ｌｈｓ）」と定義され、変換後のプログラムには「Ｌｏｇ（“ｌｈｓ”）；」と追加される。
プログラム解析部１０４は、例えばｙａｃｃ／ｌｅｘを使用してあらかじめ生成された構文解析プログラムを図１には図示しないプログラム変換実行計算機１０１が備えるメモリから読み出して実行させ、変換元となるプログラムＡを読み込んで解析して解析析結果情報を生成するとともに、付加情報解析部１０８からプログラムＡに追加する付加情報を受け取り、付加情報を解析結果情報に含めて出力する。なお、付加情報はない場合があり、この場合には解析結果情報のみを出力する。付加情報解析部１０８は、付加情報記憶部１０７から付加情報と位置情報とを読み込んでプログラム解析部１０４へ情報を提供する。プログラム変換部１０６は、プログラム解析部１０４が出力した解析結果情報を入力して目的となるプログラムＡ’へ変換して出力する。
【００１２】
プログラム解析部１０４を詳しく説明する。プログラム解析部１０４すなわち解析プログラムは、プログラムＡ１０２を読み込んで構文解析情報記憶部１０４ａが記憶した構文解析情報に従って構文解析を行い内部的に情報を保持する。構文解析情報は図４のように例えば「代入文」、「ｉｆ文」、「ｅｌｓｅ文」等のプログラムソースに記述するソースコードに対応するように定義する。このため、プログラム解析部１０４は、プログラムＡ１０２の有するソースコードごとに解析を行いながら解析結果情報を出力する解析手段である。
【００１３】
また、付加情報解析部１０８を詳しく説明すると、プログラム解析部１０４が解析を行っているプログラムＡのソースコードに対応する文法定義番号をプログラム解析部１０４から受け取り、付加情報記憶部１０７を検索してその文法定義番号に対応する付加情報と位置情報とを取得する。取得した付加情報と位置情報とをプログラム解析部１０４に出力する。
【００１４】
プログラム解析部１０４は、付加情報解析部１０８から位置情報と付加情報とを入力して、位置情報に従い解析結果情報に付加情報を挿入する。
【００１５】
図１のプログラム変換実行計算機１０１は、図２に示す構成をした計算機システムである。図２において、プログラム変換実行計算機１０１は、システムユニット２００、ＣＲＴ（Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅ）表示装置１４１、キーボード（Ｋ／Ｂ）１４２、マウス１４３、コンパクトディスク装置（ＣＤＤ）１８６、プリンタ装置１８７を備え、これらはケーブルで接続されている。
【００１６】
図３は、実施の形態１におけるプログラム変換実行計算機のハードウェア構成図である。図３において、プログラム変換実行計算機１０１は、プログラムを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１３７を備えている。ＣＰＵ１３７は、バス１３８を介してＲＯＭ１３９、ＲＡＭ１４０、通信ボード１４４、ＣＲＴ表示装置１４１、Ｋ／Ｂ１４２、マウス１４３、ＦＤＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）１４５、磁気ディスク装置１４６、ＣＤＤ１８６、プリンタ装置１８７と接続されている。ＲＡＭは、揮発性メモリの一例である。ＲＯＭ、ＦＤＤ、ＣＤＤ、磁気ディスク装置、光ディスク装置は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。例えば、Ｋ／Ｂ１４２、ＦＤＤ１４５などは、情報入力部の一例である。また、例えば、ＣＲＴ表示装置１４１などは、出力部の一例である。磁気ディスク装置１４６には、オペレーティングシステム（ＯＳ）１４７、ウィンドウシステム１４８、プログラム群１４９、ファイル群１５０が記憶されている。プログラム群は、ＣＰＵ１３７、ＯＳ１４７、ウィンドウシステム１４８により実行される。
【００１７】
上記プログラム群１４９には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵにより読み出され実行される。ファイル群１５０には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」、「〜の解析結果」として説明するものが、「〜ファイル」として記憶されている。また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータの入出力を示し、そのデータの入出力のためにデータは、磁気ディスク装置、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ）、光ディスク、ＣＤ（コンパクトディスク）、ＭＤ（ミニディスク）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のその他の記録媒体に記録される。あるいは、信号線やその他の伝送媒体により伝送される。
【００１８】
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、ＲＯＭ１３９に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、ハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。
【００１９】
また、以下に述べる実施の形態を実施するプログラムは、また、磁気ディスク装置、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ）、光ディスク、ＣＤ（コンパクトディスク）、ＭＤ（ミニディスク）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）等のその他の記録媒体による記録装置を用いて記憶されても構わない。
【００２０】
図６は、この実施の形態のプログラム変換実行計算機の動作を示すフローチャート図である。図６では、プログラムＡを変換する場合に付加情報を読み込んで、プログラムＡに挿入すべき付加情報を判定して、判定の結果に基づいて挿入すべき付加情報をプログラムＡに挿入してプログラムＡ’を生成する処理の流れを説明する。このフローチャートを用いてプログラムＡ１０２からプログラムＡ’１０３へ変換する流れを示す。なお、Ｓ１０１の処理を行なう前にＳ１００の前準備処理で、構文解析情報記憶部１０４ａへの構文解析情報の登録処理と、付加情報記憶部１０７への付加情報と位置情報との登録処理とを図２の入力装置を用いて行なう。或いは、他の計算機システムで作成したものをＦＤＤ１４５やＣＤＤ１８６に記憶させてこのプログラム変換実行計算機１０１で使用することも可能である。
【００２１】
プログラム解析部１０４がプログラムＡ１０２の全ステップを読み込んで、図２のメモリ（バッファでも良い）に保持する（Ｓ１０１）。そして、プログラム解析部１０４にて、プログラムＡ１０２のソースコードについて１ステップずつ、そのステップの構文について構文解析情報記憶部１０４ａに記憶した構文解析情報に従って解析して、解析結果情報を生成する（Ｓ１０２）。次にＳ１０２で解析を行った構文に対して付加情報が定義されているかをチェックする（Ｓ１０３）。このチェックは付加情報解析部１０８が行なう。付加情報解析部１０８は、Ｓ１０２でプログラム解析部１０４が解析に使用した構文解析情報の文法定義番号を受け取り、受け取った文法定義番号が付加情報記憶部１０７に記憶されているか検索する。これは、構文解析情報記憶部１０４ａと付加情報記憶部１０７とは互いに文法定義番号を記憶しているためである。付加情報解析部１０８は、同じ文法定義番号を検索できた場合には（Ｓ１０３，Ｙｅｓ）、その文法定義番号に対応する付加情報と位置情報とを取得して、プログラム解析部１０４に渡す。プログラム解析部１０４は、付加情報と位置情報とを受け取り、付加情報を付加情報の意味する内容に変換して位置情報の出力位置に従って解析結果情報に変換した付加情報を含めて出力する（Ｓ１０５）。付加情報の意味する内容に変換するとは、例えば図５の文法定義番号が「１７」の「Ｌｏｇ  Ｖａｌ（ｌｈｓ）」は、指定した変数の値を出力するという指定なので「Ｌｏｇ（ｌｈｓ）；」に変換する。そして、出力位置が「後」であるので、文法定義番号「１７」の「代入文」の解析結果情報の後にこの「Ｌｏｇ（ｌｈｓ）；」をＳ１０２で生成した解析結果情報に含めてファイル群１５０に出力する。Ｓ１０３のチェックで、付加情報がなければＳ１０２で生成した解析結果情報をファイル群１５０へ出力する（Ｓ１０４）。プログラムＡ１０２の全ステップについて解析を行ったかどうかチェックを行う（Ｓ１０６）。全ステップの解析が終了していない場合は（Ｓ１０６，Ｙｅｓ）、Ｓ１０２より処理を繰り返す。全ステップの解析を終えた場合（Ｓ１０６，Ｎｏ）、プログラム変換部１０６は、ファイル群１５０に出力した解析結果情報（この解析結果情報は付加情報を含む場合と含まない場合とがある）から解析結果情報が挿入されたプログラムＡ’を生成して（Ｓ１１０）、ファイル群１５０に出力する（Ｓ１０９）。
【００２２】
上記したＳ１００の構文解析情報記憶部への登録は、構文解析情報記憶工程に対応し、付加情報記憶部への登録は、付加情報記憶工程に対応する。また、Ｓ１０１〜Ｓ１０６は、解析工程に対応し、Ｓ１０９，Ｓ１１０はプログラム変換工程に対応する。
【００２３】
また、各工程を実行するプログラムはプログラム群１４９に記憶され、このプログラムは、構文解析情報記憶工程を実行する構文解析情報記憶処理と、付加情報記憶工程を実行する付加情報記憶処理と、解析工程を実行する解析処理と、プログラム変換工程を実行するプログラム変換処理とを有している。
【００２４】
以上の処理がプログラム変換実行計算機１０１による、プログラムＡ’の自動生成処理である。例えば、図７に示すプログラムＡをプログラム解析部１０４が解析すると、代入式２０の後に付加情報を挿入した解析結果情報を生成する。そして、この生成された解析結果情報からプログラム変換部１０６が図８に示すプログラムＡ’１０３を生成する。図８のプログラムＡ’１０３は、代入式２０の後に「Ｌｏｇ（Ｘ）」が挿入されている。このように、プログラム変換実行計算機１０１は、プログラムＡからプログラムＡ’を自動生成する。
【００２５】
次に、上記したｙａｃｃ／ｌｅｘ（「ｙａｃｃ」は「ｙｅｔ  ａｎｏｔｈｅｒ  ｃｏｍｐｉｌｅｒ−ｃｏｍｐｉｌｅｒ」の略称、「ｌｅｘ」は「ａ  ｌｅｘｉｃａｌ  ａｎａｌｙｚｅｒ  ｇｅｎｅｒａｔｏｒ」の略称）は、プログラムジェネレータの１つであり、構文解析をするプログラムを生成するものである。ここでは、ｙａｃｃ／ｌｅｘを使用してあらかじめ生成された構文解析プログラムについて、簡単にその一例を説明する。図９は、ＩＦ文に関連する文法定義の例を示す図である。図９において、文法定義は、文法定義情報２０２と対応構文情報２０３とを有する。図９の文法定義からｙａｃｃ／ｌｅｘを使用して構文解析プログラムを作成すると、図１０、図１１のような内容のプログラムが作成される。図１０の「Ｎｏｄｅｐ」で示される構造体は、解析した結果の情報を保持する処理を定義するものであり、図１１に「Ｎｏｄｅｐ」に対応する解析結果情報を保持するプログラムを示す。このプログラム変換実行計算機１０１のプログラム解析部１０４は、図１０，図１１に示したような解析プログラムを使用して、プログラムＡを解析する。図１２は、プログラムＡを解析して生成した解析結果情報の一例を示す図である。
【００２６】
以上述べてきたように本実施例によれば、プログラム変換を行う際に、変換対象となるプログラムを解析する際に使用する構文解析情報に対応して、プログラムに挿入する情報の定義を行う。また、プログラムの解析時に挿入する位置を取得し、変換時に挿入する処理のソースコードを同時に組み込むことによって、デバッグ機能をプログラムに追加することを容易に実現する。また、プログラム構成については詳細に把握している必要もないため、変換元のプログラムの構成について知識がない場合でも、解析作業を行わずにデバッグ情報の挿入が可能である。このことは、プログラムの作成者でないものがプログラムのテストを行う際に、プログラムの処理内容を深く理解していなくても容易にプログラムのデバッグ情報を挿入して、テスト用のプログラムに変換できる。また、だれがテスト用のプログラムを作成しても変換もとのプログラムが同じであれば、同じテスト用プログラムに変換できる。このため、誰がプログラムテストを行っても一定の水準のプログラムテストを行うことができる効果がある。
【００２７】
実施の形態２．
この実施の形態では、第１のプログラムと第２のプログラムとがそれぞれ異なるプログラム言語である場合について、プログラム変換実行計算機の構成、動作を説明する。
【００２８】
図１３は、実施の形態２のプログラム変換実行計算機の構成を示すブロック図である。図１３のプログラム変換実行計算機１０１は、変換元のプログラムＡのプログラム言語と、変換後のプログラムＢのプログラム言語とが異なるために、中間言語記憶部１０５を備える点で、図１のプログラム変換実行計算機と異なる。中間言語記憶部１０５は、異なるプログラム言語に共通の形式に変換された共通形式情報を記憶する共通形式情報記憶部の一例である。プログラム解析部１０４は、解析結果情報をそのまま出力するのではなく、プログラムＡのプログラム言語とプログラムＢのプログラム言語との間で共通の形式に変換して、変換後の共通形式情報を中間言語記憶部１０５に出力する点が実施の形態１と異なる。また、プログラム変換部１０６は、中間言語記憶部１０５から共通形式情報を入力して、共通形式情報をプログラムＢ１０３ａのプログラム言語で構文が定義されたソースコードに変換する。
【００２９】
実施の形態１との動作の違いを図１４のフローチャートに従い説明する。図１４では、Ｓ１００〜Ｓ１０５、Ｓ１０９は図６のＳ１００〜Ｓ１０５、Ｓ１０９と同じ処理を行い、Ｓ１０６の後、プログラム解析部１０４は、ファイル群１５０に出力した解析結果情報を読み出して共通の形式に変換して、中間言語記憶部１０５に共通形式情報を出力する（Ｓ１０７）。図１５に中間言語記憶部１０５に出力した共通形式情報に変換した付加情報を含む解析結果情報の一例を示す。そして、プログラム変換部１０６は、中間言語記憶部１０５から共通形式情報を入力して、共通形式情報をプログラムＢ１０３ａのプログラム言語に変換する（Ｓ１０８）。図１６に共通形式情報からプログラムＢ１０３ａのプログラム言語に変換した一例を示す。
【００３０】
以上のように、プログラム変換実行計算機は、異なるプログラム言語間でデバッグ情報を挿入することが可能である。このため、処理内容は同じであるが、異なるプログラム言語に変換する場合、自動でプログラム言語を変更できるとともに、変換後のプログラムに対してデバッグ情報が自動で挿入されるので、動作確認が容易に行える効果がある。
【００３１】
実施の形態３．
この実施の形態では、付加情報記憶部が記憶した付加情報のうちプログラムに挿入する付加情報の選択を行うプログラム変換実行計算機について説明する。
【００３２】
図１７は、この実施の形態のプログラム変換実行計算機の構成を示すブロック図である。図１７のプログラム変換実行計算機１０１は、付加情報記憶部１０７が記憶する付加情報のうち、プログラムＡ１０２に挿入する付加情報を選択する選択付加情報を記憶する選択付加情報記憶部４０１を備える点で、図１のプログラム変換実行計算機と異なる。
【００３３】
選択付加情報記憶部４０１について説明する。図１８は、実施の形態３の選択付加情報記憶部４０１が記憶する選択付加情報の一例を示す。図１８において、選択付加情報記憶部４０１は、選択付加情報５０２と、形式変換情報５０３と、出力情報５０４と、説明５０５とを有する。図１９は、図１８の選択付加情報に対応する付加情報記憶部１０７が記憶する付加情報の一例である。付加情報記憶部１０７は、図１９のように１つの文法定義番号に対応して複数の付加情報（付加情報２０６と付加情報６０２）とを記憶する。また、出力位置は付加情報毎に対応させるため、図１９の記載上は付加情報の一部となっているが、文法定義番号２０１と出力位置２０４の組と、文法定義番号２０１と出力位置６０３の組とのそれぞれを、位置情報と考える。選択付加情報記憶部４０１の選択付加情報５０２は、付加情報記憶部１０７の複数の付加情報、ここでは付加情報２０６（Ｌｏｇ）と付加情報６０２（Ｃｏｍｍｅｎｔ）とのうち少なくともいずれか一方をプログラムＡ１０２に挿入する付加情報として選択するものを指定する。図１８の例では、選択付加情報５０２には「Ｌｏｇ」と「Ｃｏｍｍｅｎｔ」とが指定されている。すなわち、プログラムＡ１０２には「Ｌｏｇ」と「Ｃｏｍｍｅｎｔ」とを挿入することを示している。
【００３４】
また、選択付加情報記憶部４０１の形式変換情報５０３は、プログラムＡ１０２に挿入する付加情報の構文を定義する。また、出力情報５０４は、付加情報記憶部１０７の出力情報２０５と出力情報６０４に対応するものであり、出力情報２０５や出力情報６０４に指定した情報を形式変換情報５０３で指定した構文で出力する際に置き換えの対応を定義する。例えば、形式変換情報５０３の「／／ｃｏｍｍｅｎｔ」の「ｃｏｍｍｅｎｔ」部分は、出力情報５０４の「ｃｏｍｍｅｎｔ」によって出力情報６０４の「Ｃｏｍｍｅｎｔ」に指定した内容と関係付けられて「／／Ｓｔｒ（ｌｏｇｉｃａｌ＿ｅｘｐｒ）＋“チェック”」と出力される。なお、「Ｓｔｒ（ｌｏｇｉｃａｌ＿ｅｘｐｒ）＋“チェック”」は、プログラム解析部１０４によってプログラムＡ１０２の中で使用している「Ｓｔｒ（ｌｏｇｉｃａｌ＿ｅｘｐｒ）に対応する情報と置き換えられる。
【００３５】
図２０は、プログラム変換実行計算機の動作を示すフローチャート図である。図２０のＳ１００〜Ｓ１１０は、図６のＳ１００〜Ｓ１１０と同様の処理である。図２０では、Ｓ１０１の後に、付加情報解析部１０８が選択付加情報記憶部４０１が記憶する選択付加情報５０２と一致する付加情報を付加情報記憶部１０７から検索して（Ｓ２０２）、一致する付加情報の出力情報２０５や出力情報６０４と、文法定義番号２０１と、出力位置２０４や出力位置６０３と、形式変換情報５０３と、出力情報５０４を取得してファイル群１５０に保持する（Ｓ２０３）。また、Ｓ１０３で構文解析情報の文法定義番号２０１と同じ文法定義番号の付加情報があるかどうかを確認する際には、付加情報解析部１０８は、付加情報記憶部１０７を検索するのではなく、Ｓ２０３でファイル群１５０に保持した情報を検索する。また、Ｓ１０３が「Ｙｅｓ」の時、プログラム解析部１０４は、付加情報２０６や付加情報６０２を形式変換情報５０３に基づいて変換して、変換したものを付加情報として解析結果情報に含めて出力する。
【００３６】
例えば、付加情報６０２の「Ｃｏｍｍｅｎｔ」に対するプログラム解析部１０４の処理を説明する。付加情報６０２の「Ｃｏｍｍｅｎｔ」は出力情報５０４の「Ｃｏｍｍｅｎｔ」と一致するため、この出力情報５０４の「Ｃｏｍｍｅｎｔ」に対する形式変換情報５０３の「／／ｃｏｍｍｅｎｔ」に従い付加情報６０２の「Ｃｏｍｍｅｎｔ」に指定された文字列をｃｏｍｍｅｎｔとして「／／ｃｏｍｍｅｎｔ」で解析結果情報に含めて出力する。プログラムＡ１０２が図７であり、構文解析情報が図４であるとすると、出力情報６０４の「ｌｏｇｉｃａｌ＿ｅｘｐｒ＋“チェック”」は、文法定義番号２０１「１８」から図４の構文解析情報を見るとｉｆ文の条件式であることがわかる。この結果、「ｌｏｇｉｃａｌ＿ｅｘｐｒ」の部分の文字列に“チェック”の文字列を追加した文字列をＣｏｍｍｅｎｔとしてｉｆ文の「前」に出力する。例えば図７のプログラムＡ１０２は「ＩＦ  Ａ  ＝  １  ＴＨＥＮ」であり対応構文情報２０３は「ＩＦ  ｌｏｇｉｃａｌ＿ｅｘｐｒ  ＴＨＥＮ」あるので、「ｌｏｇｉｃａｌ＿ｅｘｐｒ」の部分には「Ａ  ＝  １」が対応していることがわかる。この結果、プログラム解析部１０４は、プログラムＡ１０２の「ＩＦ  Ａ  ＝  １  ＴＨＥＮ」の前に「／／Ａ  ＝  １  チェック」を出力する。
【００３７】
以上、述べてきたように本実施例によれば、変換元のプログラムに挿入する付加情報を選択付加情報によって選択可能にした。このため、構文定義に対して複数の付加情報を定義しても、デバッグする内容やデバッグの条件によって、適宜付加情報を変更や追加の選択ができる。このため、デバッグする内容やデバッグの条件に対応して付加情報を用意する手間を省くことができる効果がある。また、プログラムＡに付加情報を挿入してプログラムＡ’を作成して、プログラムＡ’を実行し、その後、実行した結果によって付加情報の内容を変更、追加して、別の新たなプログラムＡ’を容易に作成できる効果がある。
【００３８】
実施の形態４．
この実施の形態では、部品情報記憶部が記憶する部品情報を参照することを定義した付加情報を変換元のプログラムに挿入するプログラム変換実行計算機の一例を説明する。
【００３９】
図２１は、この実施の形態のプログラム変換実行計算機の構成を示すブロック図である。図１９において、プログラム変換実行計算機１０１が、実行部７００と、部品情報記憶部７０１とを備えた点が図１３のプログラム変換実行計算機１０１と異なる点である。実行部７００は、プログラムＢ１０３ａを実行する。また、部品情報記憶部７０１は、プログラムＢを実行することによって参照される部品情報（部品群）を記憶する。すなわち、プログラムＢには、部品情報記憶部７０１が記憶した部品情報を参照する付加情報が挿入されている。このプログラムＢに挿入された部品情報を参照するための付加情報は、付加情報記憶部１０７及び選択付加情報記憶部４０１とにそれぞれ定義されている。
【００４０】
例えば、部品情報は、プログラム関数であり、部品情報を参照するための付加情報は、プログラム関数を呼び出すための構文を定義するものである。図２２に、この実施の形態の付加情報記憶部１０７が記憶した付加情報の一例を示す。また、図２３に、この実施の形態の選択付加情報記憶部４０１が記憶した選択付加情報の一例を示す。図２２において、付加情報記憶部１０７は、付加情報９０２として「Ｔｉｍｅ」を有する。「Ｔｉｍｅ」は、部品情報記憶部７０１が記憶する時間測定部品７０２と関連しており、付加情報として時間測定部品７０２を呼び出すソースコードをプログラムＡに挿入することを示している。挿入する位置は、文法定義番号２０１と出力位置とにより決定される。
【００４１】
また、図２３において、選択付加情報記憶部４０１は、上記図１８と同様に付加情報記憶部１０７が記憶する複数の付加情報からプログラムＡに挿入する付加情報を選択する選択付加情報５０２を記憶する。選択付加情報５０２には、「Ｔｉｍｅ」が定義されているので、付加情報９０２は付加情報解析部１０８によって選択される。また、出力情報５０４と出力情報９０４とは関連しており、出力情報８０４の「，」で区切られた値が出力情報９０４の「，」で区切れた変数に対応する。形式変換情報８０３の「ｇｅｔＴｉｍｅｌｏｇ」は、部品情報記憶部７０１が記憶する時間測定部品７０２を呼び出す関数名であり、プログラム解析部１０４によって、「ｇｅｔＴｉｍｅｌｏｇ」の後に記述された引数は、出力情報８０４と出力情報９０４との関連によって出力情報９０４の値に置き換えられてプログラムＡに挿入される。以下に、時間測定部品７０２について詳細に説明する。
【００４２】
時間測定部品７０２は、説明８０５で定義されているように時間を測定するための部品である。時間測定部品７０２は部品情報記憶部７０１に記憶されており、プログラムＢから呼び出されて実行される。この時間測定部品７０２は、「ｇｅｔＴｉｍｅｌｏｇ（Ｎｏ，Ｉｎｆｏ，ｒｅｃｏｒｄ）」という引数（インタフェース）を持つ部品で「Ｎｏ＝１、Ｉｎｆｏ＝ｓｔａｒｔ」「Ｎｏ＝２、Ｉｎｆｏ＝ｅｎｄ」で、設定されたプログラムが実行された時刻を測定し、「Ｎｏ＝３、Ｉｎｆｏ＝Ｔｏｔａｌ」で、設定されたｓｔａｒｔからｅｎｄまでにかかった時間を計算する。３つめの引数ｒｅｃｏｒｄには、時間測定のためのファイルに対して、取得した時間の出力を行うか否かを「Ｔｒｕｅ（出力する）」と「Ｆａｌｓｅ（出力しない）」とのいずれかを指定する。この部品情報を用いたソースコードをプログラムＡへ付加する方法は、選択付加情報記憶部４０１に定義している。図２３によると、選択付加情報５０２に「Ｔｉｍｅ」と設定し、形式変換情報５０３に、時間測定部品７０２の関数名と引数（インタフェース）とを「ｇｅｔＴｉｍｅｌｏｇ（Ｎｏ，Ｉｎｆｏ，ｒｅｃｏｒｄ）」と定義している。また、出力情報５０４にこの関数の引数は「Ｎｏ，Ｉｎｆｏ，ｒｅｃｏｒｄ」の３つであることを設定する。
【００４３】
「Ｔｉｍｅ」の選択付加情報５０２に対応する付加情報を図２２に定義した。図２２の付加情報９０２には「Ｔｉｍｅ」が定義されており、この項目は文法定義番号２０１が「３０」の項目に対して出力情報９０５、出力情報９０６、出力情報９０７の３つを設定している。文法定義番号２０１が「３０」に対する文法定義情報２０２は図４より関数に対する処理であることがわかる。また、対応構文情報２０３は図４から「ｆｎａｍｅ（ｅｘｐｒ＿ｌｉｓｔ）」である。プログラム解析部１０４が、図４に示した内容を記憶した構文解析情報記憶部１０４ａと、図２２に示した内容を記憶した付加情報記憶部１０７と、図２３に示した内容を記憶した選択付加情報記憶部４０１とを使用して、図２４のプログラムＡ１００１を解析して付加情報を挿入し、図２４のプログラムＢ１００２を生成する処理を説明する。
【００４４】
プログラム解析部１０４は、解析した結果、プログラムＡのソースコードに関数が定義されていることを判定すると、付加情報記憶部１０７が記憶する位置情報に従い付加情報を解析結果除情報に含める。プログラム解析部１０４は、プログラムＡ１００１の構文情報１００１ａの「ＦｕｎｃＡ（ｐａｒ１，ｐａｒ２）」は関数の呼び出しを行う構文情報であるので、図２２の付加情報９０２より構文情報１００１ａの「前」に「ｇｅｔＴｉｍｅｌｏｇ（１，“ｓｔａｒｔ”，Ｔｒｕｅ）；」を追加する。そして、構文情報１００１ａの「後」に「ｇｅｔＴｉｍｅｌｏｇ（２，“ｅｎｄ”，Ｔｒｕｅ）；」を追加し、続けて「後」に「ｇｅｔＴｉｍｅｌｏｇ（３，“Ｔｏｔａｌ”，Ｔｒｕｅ）；」を追加する。プログラム変換部１０６は、上記した３つの付加情報が含まれた解析結果情報から、図２４のプログラムＢ１００２を生成する。
【００４５】
図２４のプログラムＢ１００２は、プログラム変換部１０６が生成して出力した。プログラムＢ１００２では、「ＦｕｎｃＡ（ｐａｒ１，  ｐａｒ２）」という関数の前には付加情報１００２ａの「ｇｅｔＴｉｍｅｌｏｇ（１，“ｓｔａｒｔ”，Ｔｒｕｅ）；」、関数の後には付加情報１００２ｂの「ｇｅｔＴｉｍｅｌｏｇ（２，“ｅｎｄ”，Ｔｒｕｅ）；」と、付加情報１００２ｃの「ｇｅｔＴｉｍｅｌｏｇ（３，“Ｔｏｔａｌ”，Ｔｒｕｅ）；」が挿入されている。そしてプログラムＢ１００２を実行部７００が実行すると、時間測定ファイル１００３がファイル群１５０に出力される。プログラムＢには「ｓｔａｒｔ」「ｅｎｄ」「Ｔｏｔａｌ」の３つの値を出力することが定義されているため、それぞれに対応してスタート出力１００３ａ、エンド出力１００３ｂ、合計出力１００３ｃの３つの値が出力される。
【００４６】
以上述べてきたように本実施例によれば、部品情報記憶部に部品情報を予め用意し、その部品情報を参照するための付加情報を付加情報記憶部に定義することにより、ユーザが用意した部品情報、例えば所定の処理を行わせる関数を、既存のプログラムの構成を解析する必要なく追加できる効果がある。また、任意の部品情報を付加情報として挿入することが可能なため、デバッグコード出力や性能検証のための時間測定などの目的だけでなく、プログラムＡに対して新たに追加したい機能を部品情報として部品情報記憶部に記憶しておくとともに、付加情報記憶部にその部品情報を参照する付加情報を定義しておけば、新たな機能の追加を付加情報の挿入という形で容易に実現できる効果がある。また、実行部を備えることによって、生成したプログラムＢ（第２のプログラムの例）をすぐに実行できるので、新たに生成したプログラムＢを検証できる効果がある。
【００４７】
実施の形態５．
この実施の形態では、付加情報の挿入を行うかどうかを判断する条件式を付加情報に対応して設定して、条件式を判断して付加情報を挿入するプログラム変換実行計算機の一例を説明する。
【００４８】
図２５は、この実施の形態の付加情報記憶部１０７が記憶した付加情報の一例を示す図である。図２６は、この実施の形態のプログラムＡとプログラムＢの一例を示す図である。なお、この実施の形態のプログラム変換実行計算機の構成は、図１３であるものとする。図２５において、付加情報記憶部１０７は、条件式情報１１０２を有する付加情報２０６を記憶する点が、図５，図１９，図２２と異なる点である。図２５では、例えば、文法定義番号２０１が「１８」に対応する付加情報が条件式情報を有している。条件式情報１１０２には「ｉｆ（Ｓｔｒ（ｌｏｇｉｃａｌ＿ｅｘｐｒ）．Ｍｉｄ（“Ｓｕｍ”）＞０）」と定義され、出力情報２０５には「Ｓｔｒ（ｌｏｇｉｃａｌ＿ｅｘｐｒ）＋“：ＴＲＵＥ”」と定義してある。プログラム解析部１０４は、条件式情報「ｉｆ（Ｓｔｒ（ｌｏｇｉｃａｌ＿ｅｘｐｒ）．Ｍｉｄ（“Ｓｕｍ”）＞０）」を以下のように解釈する。
【００４９】
図４によると、構文解析情報記憶部１０４ａが記憶する文法定義番号「１８」に対応する対応構文情報２０３は「ＩＦ  ｌｏｇｉｃａｌ＿ｅｘｐｒ  ＴＨＥＮ」である。このため、プログラム解析部１０４は、プログラムＡ１２０１の「ｉｆ」文の「ｌｏｇｉｃａｌ＿ｅｘｐｒ」に該当する部分の構文情報が文字列「“Ｓｕｎ”」と一致する文字列が含まれているか確認して、含まれていた場合に、このＩＦ文の後にデバッグコードとして「Ｌｏｇ」を使用して「ｌｏｇｉｃａｌ＿ｅｘｐｒ」に対応する部分の構文情報を文字列で出力するとともに文字列「“ＴＲＵＥ”」を続けて出力する付加情報をＩＦ文の解析結果情報に含める。
【００５０】
図２６のプログラムＡ１２０１には、２つのＩＦ文がある。１つめは「ＩＦ  Ａ＝０  ＴＨＥＮ」であり、もうひとつは「ＩＦ  Ｓｕｍ  ＞  １０００  ＴＨＥＮ」である。上記したようにはプログラム解析部１０４は、「ｉｆ（Ｓｔｒ（ｌｏｇｉｃａｌ＿ｅｘｐｒ）．Ｍｉｄ（“Ｓｕｍ”）＞０）」と「Ｓｔｒ（ｌｏｇｉｃａｌ＿ｅｘｐｒ）＋“：ＴＲＵＥ”」とについて、「ｉｆ」文の「ｌｏｇｉｃａｌ＿ｅｘｐｒ」に該当する部分の構文情報が文字列「“Ｓｕｎ”」と一致する文字列が含まれているか確認する。含まれていた場合に、このＩＦ文の後にデバッグコードとして「Ｌｏｇ」を使用して「ｌｏｇｉｃａｌ＿ｅｘｐｒ」に対応する部分の構文情報を文字列で出力するとともに文字列「“ＴＲＵＥ”」を続けて出力する付加情報をＩＦ文の解析結果情報に含める、と解釈する。このため、１つ目の「ＩＦ  Ａ＝０  ＴＨＥＮ」には文字列「“Ｓｕｍ”」が含まれていないので、付加情報の挿入は行わない。２つ目の「ＩＦ  Ｓｕｍ  ＞  １０００  ＴＨＥＮ」には、文字列「“Ｓｕｍ”」が含まれているので、付加情報としてデバッグコード「条件式の文字列＋“：ＴＲＵＥ”」を解析結果情報に含めて出力する。この結果、プログラム変換部１０６は、変換後のプログラムＢ１２０２に示すように「ｉｆ  （Ｓｕｍ  ＞  １０００）の後に、付加情報１２０２ａの「Ｌｏｇ（“Ｓｕｍ＞１０００”＋“：ＴＲＵＥ”）」を出力する。
【００５１】
なお、図２６のプログラムＡとプログラムＢとは異なるプログラム言語を使用して構文情報が定義されているが、同じプログラム言語であってもかまわない。
【００５２】
以上述べてきたように本実施例によれば、付加情報を挿入する場合に、付加情報を挿入するか否かを判定させる条件式情報を付加情報が有することによって、変換元の第１のプログラムの所定の種類の構文情報に対して付加情報を挿入するわけでなく、所定の種類の構文情報が条件式情報と適合する場合にだけ付加情報を挿入できる効果がある。これにより、さらに変換元の第１のプログラムに対して詳細な付加情報の挿入判定を容易に行うことができる効果がある。この結果、ユーザはプログラムの内容を把握することなく、プログラム変換実行計算機が付加情報の挿入の有無を自動的に判定して、無駄な付加情報の挿入を行わず、必要とする箇所に対してのみ挿入ができる効果がある。
【００５３】
実施の形態６．
この実施の形態では、第２のプログラムを異なるプログラム言語で複数生成するプログラム変換実行計算機について説明する。
【００５４】
図２７は、この実施の形態のプログラム変換実行計算機のブロック図を示す図である。図２７のプログラム変換実行計算機１０１は、プログラムＡ１０２からプログラム言語がそれぞれ異なるプログラムＡ’１０３とプログラムＢ１０３ａとを生成する。このため、変換後のプログラムのプログラム言語を指定する変換後のプログラム言語の指定情報１３０４を入力する変換選択部１３０１を備える。また、プログラム変換部１０６は、プログラム言語毎に対応する変換部を第１の変換部１３０２、第２の変換部１３０３と複数有する。プログラム解析部１０４は、変換後のプログラム言語を意識することなく解析結果情報を共通の形式に変換して中間言語記憶部１０５に出力する。プログラム変換実行計算機１０１の備えるほかの要素は、図１３と同様であるものとする。
【００５５】
以下に、変換後のプログラム言語の指定情報を入力する例について説明する。上記したように図２７のプログラム変換部１０６は、プログラム言語毎の変換部を備えている。このため、変換選択部１３０１は、プログラム変換部１０６が備える変換部が変換できるプログラム言語をリスト形式でＣＲＴ表示装置１４１に表示し、リストの中から所定のプログラム言語をユーザに選択させる。また、選択は複数できるものとする。第１の変換部１３０２に対応するプログラム言語を選択されると、変換選択部１３０１はそのことをプログラム変換部１０６に通知する。プログラム変換部１０６は、この通知を受けて第１の変換部１３０２を起動する。起動された第１の変換部１３０２は、中間言語記憶部１０５から共通の形式に変換された解析結果情報を入力して、解析結果情報から自己の対応しているプログラム言語（プログラムＢのプログラム言語）の構文規則に従いプログラムＢ１０３ａを生成する。さらに、第２の変換部１３０３に対応するプログラム言語も同時に選択されていると、変換選択部１３０１はそのことをプログラム変換部１０６に通知する。プログラム変換部１０６は、この通知を受けて第２の変換部１３０３を起動する。起動された第２の変換部１３０３は、中間言語記憶部１０５から共通の形式に変換された解析結果情報を入力して、解析結果情報から自己の対応しているプログラム言語（プログラムＡ’のプログラム言語）の構文規則に従いプログラムＡ’を生成する。
【００５６】
プログラムＡ’とプログラムＢとを生成する処理は、同時に並行処理で行っても、１つの生成処理が終了してから次の生成処理を開始しても、いずれでもかまわない。また、変換後のプログラム言語の指定情報は、１つであっても複数であってもかまわない。
【００５７】
図２８に、この実施の形態のプログラムＡ，プログラムＡ’，プログラムＢの一例を示す。図２８からわかるように、プログラムＡ’，プログラムＢとは、構文の定義の仕方が異なるだけで、処理の内容は同じである。プログラムＡ１１０１がプログラムＡ’へ変換された場合は、プログラムＡ’の文法やロジックなどは入力したプログラムＡと同じである。プログラムＡと同じプログラム言語のプログラムＡ’を生成する目的は、例えば付加情報を挿入することによってプログラムＡに対して新たな処理機能を追加することである。これは、変換元のプログラムがもともと有していた処理機能の検証をデバッグコードなどの追加によって行うだけでなく、新たな機能の追加を行うことを可能にしている。また、デバッグコードや性能測定などを行う付加情報を挿入することによって同じプログラムについて変換前、変換後のプログラムをそれぞれ実行して実行結果を比較して、プログラムの検証を変換前と変換後とで容易に比較することが可能である。
【００５８】
また、プログラムＡ１１０１がプログラムＢに変換する目的は、例えば、プログラムＡ１１０１を、プログラム変換実行計算機１０１とは異なる別の計算機で実行する場合に、別の計算機がプログラムＢのプログラム言語で定義されたものでなければ実行することが出来ない場合、プログラムＡ１１０１をプログラムＢ１４０１に変換する。また、付加情報としてデバッグコードが挿入されるので、プログラム言語を変更しただけであっても変換後のプログラムについて実行結果を容易に検証できる。
【００５９】
また、プログラムＡ’１４０２とプログラムＢ１４０１とには、同じ内容の付加情報が同じ位置に挿入されている。このため、プログラムＡ’１４０２とプログラムＢ１４０１とをそれぞれ実行することによってプログラム言語の違いによる処理性能を比較することが容易に行える。
【００６０】
以上述べてきたように本実施例によれば、変換後のプログラムのプログラム言語を選択できるようにしたことによって、変換の目的、例えば、新たな処理機能を追加した変換後のプログラムを生成したり、プログラムの実行結果を検証するためにデバッグコードを挿入したプログラムに変換したり、異なる実行環境でプログラムを実行するためにプログラムを変換したり、プログラム言語の違いによってプログラムの処理性能を検証したり、等の目的に応じて変換後のプログラムを容易に生成できる効果がある。
【００６１】
実施の形態７．
この実施の形態では、挿入した付加情報が削除可能か否かを指定する削除情報を有する付加情報を記憶する付加情報記憶部を備えるプログラム変換実行計算機を説明する。
【００６２】
図２９は、付加情報記憶部１０７が記憶する付加情報が削除情報を有する例を示した図である。また、この実施の形態のプログラム変換実行計算機は、図１３，図２７とのいずれの構成でもよい。図２９において、付加情報２０６の「ｃｌｅａｒ」は、削除情報１５０２であり、「○」が指定されている場合には付加情報が削除可能であることを示している。
【００６３】
図３０は、削除情報を有する付加情報をプログラムＡに挿入したプログラムＢの一例を示した図である。プログラム解析部１０４は、プログラムＡ１２０１を解析した解析結果情報に付加情報を含める際に、削除情報１５０２に削除可能が設定されているか、或いは、削除不可能が設定されているか確認する。削除可能が設定されていることを確認できた場合には、削除可能であることを示すコメント情報を付加情報に含める。例えば、図２９では、文法定義番号２０１が「１７」と「１８」にそれぞれ「○」が設定されている。文法定義番号２０１が「１７」の文法定義情報は図４より代入式であることがわかり、文法定義番号２０１が「１８」の文法定義情報は図４よりｉｆ文であることがわかる。このため、プログラム解析部１０４は、代入式の後に挿入する付加情報に削除可能なことを示すコメント情報を含めるとともに、ｉｆ文の後に挿入する付加情報に削除可能なことを示すコメント情報を含める。すなわち、図３０のプログラムＢ１６０１のように、代入式「Ａ＝Ａ＋１；」の後の「Ｌｏｇ（“Ａ：”＋Ａ）；」に続けてコメント情報「／／＊＊  Ａｄｄ  Ｎｏ．１７−１  ｃｌ」を挿入する。また、ｉｆ文「ｉｆ（Ｓｕｍ＞１０００）」の後の「Ｌｏｇ（“Ｓｕｍ＞１０００”＋“：ＴＲＵＥ”）；」に続けてコメント情報「／／＊＊  Ａｄｄ  Ｎｏ．１８−１  ｃｌ」を挿入する。コメント情報としてどのような形式にするか予め決めたフォームを記憶部１５に記憶させておき、プログラム解析部１０４からアクセス可能にしておく。プログラム解析部１０４は、記憶部１５に記憶されたフォームに基づいて削除可能なことを示すコメント情報を生成して付加情報に含める。
【００６４】
以上述べてきたように本実施例によれば、プログラムに挿入する付加情報が削除可能であるか否かを示す削除情報を付加情報に記憶するようにした。このため、付加情報をプログラムに挿入する際に、削除可能か否かを示すコメント情報を付加情報に含めることが可能になった。削除可能か否かを示すコメント情報を確認することよって、例えば、プログラムデバッグを目的に挿入された付加情報は、デバッグ作業が終了した後に、削除可能か否かを示すコメント情報を確認して、容易に削除を行うことができる効果がある。
【００６５】
実施の形態８．
この実施の形態では、プログラムに挿入された付加情報が削除可能であるか否かを自動的に判定して、削除可能である場合に、対応する付加情報をプログラムから削除するプログラム変換実行計算機の一例を説明する。
【００６６】
図３１は、この実施の形態のプログラム変換実行計算機の構成を示すブロック図である。図３１のプログラム変換実行計算機１０１は、付加情報削除部１６を備える点が、図１３，図２７と異なる。他の要素は、図１３，図２７と同様である。付加情報削除部１６は、プログラム中のコメント文を検索して、検索できたコメント文が付加情報を削除できることを示しているか否かを確認する。確認の結果、削除できることを示している場合には、そのコメント文がつけられている付加情報を削除する。すなわち、挿入した全ての付加情報に対して付加情報を削除できることを示すコメント情報が付けられていると、付加情報削除部１６は全ての付加情報を削除することになり、変換後のプログラムを自動で変換前のプログラムにもどすことができる。
【００６７】
図３１において、プログラム変換実行計算機１０１は、付加情報削除部１６によって、自己が作成した付加情報を挿入したプログラムＢを入力する。例えば、プログラムＢは図３２のプログラムＢ１６０１である。付加情報削除部１６は、プログラムＢ１６０１から例えば「／／＊＊」で始まるコメント文を検索する。コメント文が「／／＊＊」で始まることは、構文規則で決まっていることであり、「／／＊＊」以外の文字や記号によってコメント文を表す場合には、付加情報削除部１６は、「／／＊＊」以外の文字や記号を検索する。
【００６８】
「／／＊＊」で始まるコメント文を検索できたら、付加情報削除部１６は、その検索できたコメント文の内容をさらに検索して、コメント文の中に削除可能であることを示す例えば「“ｃｌ”」という文字があるか否かを判定する。「“ｃｌ”」の文字を発見できた場合には、そのコメント文を含む１つのステップを削除する。付加情報削除部１６は、プログラムＢ１６０１の全てのステップについてコメント文の検索と、「“ｃｌ”」の検索とを行う。例えば、図３２のプログラムＢ１６０１では、付加情報削除部１６は、はじめにコメント文１６０１ａを検索する。コメント文１６０１ａには図３２に示すように「“ｃｌ”」が含まれている。このため、付加情報削除部１６は、コメント文１６０１ａとともにそのコメント文の前にある「Ｌｏｇ（“Ａ：”＋Ａ）；」を削除する。続いて、付加情報削除部１６は、コメント文１６０１ｂを検索する。コメント文１６０１ｂには図３２に示すように「“ｃｌ”」が含まれている。このため、付加情報削除部１６は、コメント文１６０１ｂとともにそのコメント文の前にある「Ｌｏｇ（“Ｓｕｍ＞１０００”＋“ＴＲＵＥ”）；」を削除する。削除は、そのステップを実質的に消すことを指すが、「Ｌｏｇ〜」の前に「／／＊＊」をつけてコメント文にして、そのステップを機能的に無効にしてもかまわない。
【００６９】
以上述べてきたように本実施例によれば、付加情報の挿入を伴ったプログラム変換の処理において、付加情報の挿入がプログラムの検証後にも必要であるか必要でないかを、検証用プログラムに変換する前に挿入する付加情報毎に決めておき、必要・不必要を示すコメント情報をその付加情報とともに一緒に検証用のプログラムに出力しておく。このことにより、検証を行って、挿入された付加情報が不必要になった時に、付加情報を一括して削除することが可能である。したがって、検証用プログラムから本番用プログラムへと移行する処理を、自動で実行することができ、本番用のシステム環境の準備を効率を良く行うことが出きる効果がある。
【００７０】
また、付加情報毎に削除可能、削除不可を示すので、例えば付加情報を挿入した目的がプログラムの検証目的の場合の付加情報と、新機能の追加が目的である付加情報とが１つのプログラム中に混在していても、前者の目的の付加情報には削除可能を示すコメント情報をつけて、後者の目的の付加情報には削除不可を示すコメント情報をつければ、検証終了時に前者の目的の付加情報だけを自動的に削除できる。このため、付加情報を挿入した目的に合わせて付加情報の削除を行える効果がある。
【００７１】
実施の形態９．
上記した実施の形態３〜８で説明した実施例では、変換元のプログラムと変換後のプログラムとのプログラム言語は、同じである場合と異なる場合とのいずれの場合にも実施可能である。例えば、実施の形態３，４では、変換元のプログラムと変換後のプログラムとのプログラム言語は、同じである場合を説明したが、異なる場合には、プログラム変換実行計算機１０１は中間言語記憶部１０５を備え、プログラム解析部１０４は、解析結果情報を中間言語記憶部１０５に出力し、プログラム変換部１０６は、中間言語記憶部１０５から解析結果情報を入力してプログラムＢを生成する。また、例えば、実施の形態６，８では、変換元のプログラムと変換後のプログラムとのプログラム言語は、異なる場合を説明したが、同じ場合には、プログラム変換実行計算機１０１は、解析結果情報をプログラム変換部１０６に対して出力し、プログラム変換部１０６は、入力した解析結果情報からプログラムＡ’を生成する。
【図面の簡単な説明】
【００７２】
【図１】実施の形態１におけるプログラム変換実行計算機の構成を示すブロック図である。
【図２】図１のプログラム変換実行計算機１０１の計算機システムの構成を示す図である。
【図３】実施の形態１におけるプログラム変換実行計算機のハードウェア構成図である。
【図４】実施の形態１の構文解析情報記憶部１０４ａが記憶する構文解析情報の一例を示す図である。
【図５】実施の形態１の付加情報記憶部１０７が記憶する付加情報の一例を示す図である。
【図６】実施の形態１のプログラム変換実行計算機の動作を示すフローチャート図である。
【図７】実施の形態１のプログラムＡの一例を示す図である。
【図８】実施の形態１のプログラムＡ’の一例を示す図である。
【図９】ＩＦ文に関連する文法定義の例を示す図である。
【図１０】図９に対応する構文解析プログラムの一例を示す図である。
【図１１】図１０に対応する解析結果情報を保持するプログラムの一例を示す図である。
【図１２】プログラムＡを解析して生成した解析結果情報の一例を示す図である。
【図１３】実施の形態２のプログラム変換実行計算機の構成を示すブロック図である。
【図１４】実施の形態２のプログラム変換実行計算機の動作を示すフローチャート図である。
【図１５】実施の形態２の中間言語記憶部１０５に記憶した共通形式情報の一例を示す図である。
【図１６】実施の形態２のプログラムＢの一例を示す図である。
【図１７】実施の形態３のプログラム変換実行計算機の構成を示すブロック図である。
【図１８】実施の形態３の選択付加情報記憶部４０１が記憶する選択付加情報の一例を示す図である。
【図１９】実施の形態３の付加情報記憶部１０７が記憶する付加情報の一例を示す。
【図２０】実施の形態３のプログラム変換実行計算機の動作を示すフローチャート図である。
【図２１】実施の形態４のプログラム変換実行計算機の構成を示すブロック図である。
【図２２】実施の形態４の付加情報記憶部１０７が記憶する付加情報の一例を示す図である。
【図２３】実施の形態４の選択付加情報記憶部４０１が記憶する選択付加情報の一例を示す。
【図２４】実施の形態４のプログラムＡ，プログラムＢの一例を示す図である。
【図２５】実施の形態５の付加情報記憶部１０７が記憶する付加情報の一例を示す図である。
【図２６】実施の形態５のプログラムＡ，プログラムＢの一例を示す図である。
【図２７】実施の形態６のプログラム変換実行計算機の構成を示すブロック図である。
【図２８】実施の形態６のプログラムＡ，プログラムＡ’，プログラムＢの一例を示す図である。
【図２９】実施の形態７の付加情報記憶部が記憶する付加情報が削除情報を有する例を示した図である。
【図３０】実施の形態７のプログラムＡ，プログラムＢの一例を示す図である。
【図３１】実施の形態８のプログラム変換実行計算機の構成を示すブロック図である。
【図３２】実施の形態８のプログラムＡ，プログラムＢの一例を示す図である。
【符号の説明】
【００７３】
１４  解析部、１５  記憶部、１６  付加情報削除部、２０  代入式、１０１  プログラム変換実行計算機、１０２，１００１，１１０１，１２０１，２００１  プログラムＡ、１０３，１４０２  プログラムＡ’、１０３ａ，１００２，１２０２，１４０１，１６０１  プログラムＢ、１０４  プログラム解析部、１０４ａ  構文解析情報記憶部、１０５  中間言語記憶部、１０６  プログラム変換部、１０７  付加情報記憶部、１０８  付加情報解析部、１３７  ＣＰＵ、１３８  バス、１３９  ＲＯＭ、１４０  ＲＡＭ、１４１  ＣＲＴ表示装置、１４２  Ｋ／Ｂ、１４３  マウス、１４４  通信ボード、１４５  ＦＤＤ、１４６  磁気ディスク装置、１４７  ＯＳ、１４８  ウィンドウシステム、１４９  プログラム群、１５０  ファイル群、１８６  ＣＤＤ、１８７  プリンタ装置、１８８  スキャナ装置、１００  シュミレーションシステム、２００  システムユニット、２０１  文法定義番号、２０２  文法定義情報、２０３  対応構文情報、２０４，６０３，９０３  出力位置、２０５，６０４，９０４  出力情報、２０６，６０２，９０２  付加情報、３１０  ＦＡＸ機、３２０  電話器、４０１  選択付加情報記憶部、５００  ウェブサーバ、５０１  インターネット、５０２  選択付加情報、５０３  形式変換情報、５０４，８０４  出力情報、５０５，８０５  説明、７００  実行部、７０１  部品情報記憶部、７０２  時間測定部品、９０２，１２０２ａ  付加情報、９０５〜９０７  出力情報、１００１ａ  構文情報、１００３  時間測定ファイル、１００３ａ  スタート出力、１００３ｂ  エンド出力、１００３ｃ  合計出力、１１０２  条件式情報、１３０１  変換選択部、１３０２  第１の変換部、１３０３  第２の変換部、１３０４  変換後のプログラム言語の指定情報、１５０２  削除情報、１６０１ａ，１６０１ｂ  コメント文、２００２  構文解析結果情報。
【図１】
2006031331.tif 000003
【図２】
2006031331.tif 000004
【図３】
2006031331.tif 000005
【図４】
2006031331.tif 000006
【図５】
2006031331.tif 000007
【図６】
2006031331.tif 000008
【図７】
2006031331.tif 000009
【図８】
2006031331.tif 000010
【図９】
2006031331.tif 000011
【図１０】
2006031331.tif 000012
【図１１】
2006031331.tif 000013
【図１２】
2006031331.tif 000014
【図１３】
2006031331.tif 000015
【図１４】
2006031331.tif 000016
【図１５】
2006031331.tif 000017
【図１６】
2006031331.tif 000018
【図１７】
2006031331.tif 000019
【図１８】
2006031331.tif 000020
【図１９】
2006031331.tif 000021
【図２０】
2006031331.tif 000022
【図２１】
2006031331.tif 000023
【図２２】
2006031331.tif 000024
【図２３】
2006031331.tif 000025
【図２４】
2006031331.tif 000026
【図２５】
2006031331.tif 000027
【図２６】
2006031331.tif 000028
【図２７】
2006031331.tif 000029
【図２８】
2006031331.tif 000030
【図２９】
2006031331.tif 000031
【図３０】
2006031331.tif 000032
【図３１】
2006031331.tif 000033
【図３２】
2006031331.tif 000034