(57)【要約】【課題】表に登録されたデータを組み込み特定の処理を施すアプリケーションプログラムを生成可能にする。【解決手段】あらかじめ定められた複数の変数の変数名を記憶した複数のセルを有する変数名定義表部分４５と、変数名定義表部分４５内に変数名が記憶された複数の変数のそれぞれの変数値を、変数名定義表部分４５内の当該変数名を記憶するセルに対応するセルに記憶した変数値定義表部分４６と、前記変数名定義表部分に記憶された複数の変数のうちの処理すべき複数の変数と当該複数の変数に対して施すべき処理を指定する、表データ処理指定用のプログラム言語で記述された表データ処理指定用プログラム４７又は４８とに基づいて、前記処理を実行する汎用プログラム言語で記述されたアプリケーションプログラム１００又は１０１を自動的に生成する。【選択図】　　　図１
2004094763.tif 000002
【特許請求の範囲】
【請求項１】
複数のセルを有し、あらかじめ定められた複数の変数の変数名を記憶した変数名定義表部分と、前記変数名定義表部分内の前記複数のセルに対応する複数のセルを有し、前記変数名定義表部分内に変数名が記憶された複数の変数のそれぞれの変数値を、前記変数名定義表部分内の当該変数名を記憶するセルに対応するセルに記憶した変数値定義表部分と、前記変数名定義表部分に記憶された複数の変数のうち、処理されるべき複数の変数と当該複数の変数に対して実行すべき特定の処理を、あらかじめ定められた表データ処理指定用のプログラム言語で記述された複数の表データ処理指定用プログラム文を用いて指定する表データ処理指定用プログラムとに基づいて、前記特定の処理を実行する、汎用プログラム言語で記述されたアプリケーションプログラムを生成するプログラム生成プログラムであって、以下のステップをコンピュータに実行させるようにプログラムされていることを特徴とするプログラム生成プログラム。
前記表データ処理指定用プログラムにより指定された前記処理されるべき複数の変数のそれぞれの変数名が記憶されている前記変数名定義表部分内の複数のセルを判別し、
前記判別された複数のセルにそれぞれ対応する前記変数値定義表部分内の複数のセルを判別し、
前記変数値定義表部分内の判別された複数のセルから前記処理されるべき複数の変数のそれぞれの変数値を読み出し、
前記読み出された複数の変数値が組み込まれ、当該組み込まれた複数の変数値に対して前記表データ処理指定用プログラムにより指定された前記特定の処理を実行する、汎用プログラム言語で記述されたアプリケーションプログラムを生成する。
【請求項２】
前記変数名定義表部分内に登録された複数の変数は、上下関係を有する複数の階層のいずれかに属するように階層化され、
いずれかの上位側の変数が複数の変数値を採ることができ、更に当該上位側の変数の下位側に位置する変数が前記上位側の変数が採り得る当該複数の変数値の各々に対応して一つ又は複数の変数値を採ることができ、
前記変数名定義表部分と前記変数値定義表部分の少なくとも一方は、前記複数の変数間の階層を識別可能に構成されている、
ことを特徴とする請求項１に記載のプログラム生成プログラム。
【請求項３】
前記変数値定義表部分内の上位側の変数の変数値を記憶するセルと当該上位側の変数の下位側の変数の変数値を記憶するセルとが識別可能なように、前記変数値定義表部分が構成されている、
ことを特徴とする請求項２に記載のプログラム生成プログラム。
【請求項４】
前記変数値定義表部分内のいずれかの上位側の変数の変数値は、列又は行のうちの一方の座標が同一である互いに隣接し相互に特定の関係にある一群のセルに関連付けて記憶され、
前記変数値定義表部分内の前記上位側の変数の下位側の変数のそれぞれの変数値は、前記一群のセルに対して特定の位置関係にあるセルに記憶されている、
ことを特徴とする請求項３に記載のプログラム生成プログラム。
【請求項５】
前記特定の位置関係にある複数のセルは、列又は行のうちの前記一方の座標に関しては、前記同一の座標より大きな座標を有する少なくとも一つの列又は行のうちの前記一方に属し、列又は行のうちの他方に関しては、前記特定の関係にある一群のセルが属する複数の行又は列のうちの前記他方に属している、
ことを特徴とする請求項４に記載のプログラム生成プログラム。
【請求項６】
前記変数名定義表部分内の上位側の変数の変数名を記憶するセルと当該上記上位側の変数の下位側の変数の変数名を記憶するセルとが識別可能とするように、前記変数名定義表部分が構成されている、
ことを特徴とする請求項２から５のいずれか一つに記載のプログラム生成プログラム。
【請求項７】
前記変数名定義表部分内のいずれかの上位側の階層に属するいずれかの変数の変数名は、列又は行のうちの一方の座標が同一である互いに隣接し相互に特定の関係にある一群のセルに関連付けて記憶され、
前記変数名定義表部分内の前記上位側の変数の下位側の変数のそれぞれの変数名は、前記一群のセルに対して特定の位置関係にあるセルに記憶されている、
ことを特徴とする請求項６に記載のプログラム生成プログラム。
【請求項８】
前記特定の位置関係にある複数のセルは、列又は行のうちの前記一方の座標に関しては、前記同一の座標より大きな座標を有する少なくとも一つの列又は行のうちの前記一方に属し、列又は行のうちの他方に関しては、前記特定の関係にある一群のセルが属する複数の行又は列のうちの前記他方に属している、
ことを特徴とする請求項７に記載のプログラム生成プログラム。
【請求項９】
前記特定の関係にある一群のセルは、相互に結合された一群のセルである、
ことを特徴とする請求項４、５、７、８のいずれか一つに記載のプログラム生成プログラム。
【請求項１０】
前記変数名定義表部分は、同じ変数名の変数に対して複数の変数値がある場合には、当該変数名を少なくとも前記変数値の数だけの複数のセルに記憶し、
前記変数値定義表部分内の前記複数の変数値を記憶する複数のセルは、前記変数名定義表部分内の前記同じ変数名を記憶する前記複数のセルに１対１に対応している、
ことを特徴とする請求項１から１１のいずれか一つに記載のプログラム生成プログラム。
【請求項１１】
前記表データ処理指定用プログラムはループ処理部分を指定可能であり、当該ループ処理部分は、当該ループ処理部分の繰り返しを制御する変数として複数の変数値を採りうる変数を指定し、更に、当該変数が採りうる複数の変数値のそれぞれに対して繰り返し実行されるべき処理とを指定可能であり、
前記プログラム生成プログラムは、
前記表データ処理指定用プログラムにより前記ループ処理部分が指定された場合、当該ループ処理部分により指定された当該ループ処理部分の繰り返しを制御する前記変数の変数名が記憶されている前記変数名定義表部分内のセルに対応する、前記変数値定義表部分内の前記変数の複数の変数値を記憶する複数のセルの一つをループ繰り返し毎にあらかじめ定められたセルの順番に従い選択し、
当該選択されたセル内の変数値を読み出し、
前記選択と読み出しのステップを、当該ループ処理部分の繰り返しを制御する前記変数の複数の変数値を記憶する複数のセルの総数だけ繰り返し、
前記繰り返しにより得られた複数の読み出された変数値のそれぞれが埋め込まれ、当該埋め込まれた複数の変数値のそれぞれに対して前記ループ処理部分により指定された前記繰り返し実行されるべき処理を実行する、前記汎用プログラム言語で記述されたプログラム部分を、前記ループ処理部分に対する前記アプリケーションプログラムの一部として生成する、
ステップを更にコンピュータに実行させるようにプログラムされている、
ことを特徴とする請求項１から１０のいずれか一つに記載のプログラム生成プログラム。
【請求項１２】
前記表データ処理指定用プログラムは多重ループ処理部分を指定可能であり、当該多重ループ処理部分は、最内側ループ処理部分と、少なくとも一つの外側ループ処理部分とを含み、
前記外側ループ処理部分は、当該外側ループ処理部分の繰り返しを制御する変数として複数の変数値を採り得るいずれかの上位側の第１の変数を指定可能であり、
前記最内側ループ処理部分は、当該内側ループ処理部分の繰り返しを制御する変数と、少なくとも当該変数が採りうる複数の変数値のそれぞれに対して繰り返し実行されるべき処理とを指定可能であり、
前記最内側ループ処理部分は、当該最内側ループ処理部分の繰り返しを制御する前記変数として、前記外側ループに割り当てられたループ識別情報が付加された前記第１の変数の変数名と、前記第１の変数に関して下位側に位置する第２の変数の変数名との第１の組合せを指定可能であり、
前記最内側ループ処理部分は、当該最内側ループ処理部分で繰り返し実行されるべき処理を受けるべき変数として、前記外側ループに割り当てられたループ識別情報が付加された前記第１の変数の変数名と、前記内側ループに割り当てられたループ識別情報が付加された前記第２の変数の変数名との第２の組合せを指定可能であり、
前記プログラム生成プログラムは、
前記表データ処理指定用プログラムにより前記多重ループ処理部分が指定された場合、前記外側ループ処理部分により指定された前記第１の変数の変数名が記憶されている前記変数名定義表部分内のセルに対応する、前記変数値定義表部分内の前記第１の変数の複数の変数値を記憶する複数のセルの一つを前記外側ループの繰り返し毎にあらかじめ定めたセルの順番に従い選択し、
当該選択されたセルに記憶された前記第１の変数のいずれかの変数値の下位側に位置する前記第２の変数の複数の変数値を記憶する、前記変数値定義表部分内の複数のセルの一つを前記最内側ループの繰り返し毎にあらかじめ定めたセルの順番に従い選択し、
前記最内側ループの繰り返し毎に選択された前記変数値定義表部分内の当該セル内の変数値を読み出し、
当該前記最内側ループの繰り返し毎のセルの選択と選択されたセル内の変数値の読み出しを、前記外側ループの繰り返し毎に選択されたセルに記憶された前記第１の変数の変数値の下位側に位置する前記第２の変数の複数の変数値を記憶するセルの数だけ繰り返し、更に、前記外側ループの繰り返しを制御する前記第１の変数の複数の変数値を記憶する複数のセルの数だけ当該繰り返しを繰り返し、
当該繰り返しステップで読み出された複数の変数値が埋め込まれ、当該埋め込まれた複数の変数値に対して前記最内側ループ処理部分により指定された前記処理を実行する前記汎用プログラム言語で記述されたプログラム部分を、前記多重ループ処理部分に対するアプリケーションプログラムの部分として生成する、
ステップを更にコンピュータに実行させるようにプログラムされている、
ことを特徴とする請求項２から１０のいずれか一つに記載のプログラム生成プログラム。
【請求項１３】
使用可能な変数値定義表部分の名称と、対応する変数名定義表部分の名称と、当該名称の変数値定義表部分と当該名称の変数名定義表部分に対して使用可能な少なくとも一つの表データ処理指定用プログラムの名称とがあらかじめ記憶され、
前記プログラム生成プログラムは、
使用されるべき変数値定義表部分の名称を利用者に指定させ、
利用者が指定した変数値定義表部分の名称に対応して、変数名定義表部分の名称と、当該名称の変数値定義表部分と当該名称の変数名定義表部分に対して使用可能な少なくとも一つの表データ処理指定用プログラムの名称があらかじめ記憶されているか否かを判定し、
前記判定ステップにより、利用者が指定した変数値定義表部分の名称に対して、対応する変数名定義表部分の名称と、当該名称の変数値定義表部分と当該名称の変数名定義表部分に対して使用可能な少なくとも一つの表データ処理指定用プログラムの名称があらかじめ記憶されていると判定されたときには、利用者が指定した名称の変数値定義表部分と、あらかじめ記憶された名称の対応する変数名定義表部分と、当該名称の変数値定義表部分と当該名称の変数名定義表部分に対してあらかじめ記憶されている少なくとも一つの名称の表データ処理指定用プログラムを、前記表アプリケーションプログラムの生成に使用させる、
ステップを更にコンピュータに実行させるようにプログラムされている、
ことを特徴とする請求項１から１２のいずれか一つに記載のプログラム生成プログラム。
【請求項１４】
前記プログラム生成プログラムは、
前記判定ステップにより、利用者が指定した変数値定義表部分の名称に対して、対応する変数名定義表部分の名称と、当該名称の変数値定義表部分と当該名称の変数名定義表部分に対して使用可能な複数の表データ処理指定用プログラムの複数の名称があらかじめ記憶されていると判定されたときには、利用者が指定した名称の変数値定義表部分と、あらかじめ記憶された名称の対応する変数名定義表部分と、当該名称の変数値定義表部分と当該名称の変数名定義表部分に対してあらかじめ記憶されている複数の名称の複数の表データ処理指定用プログラムのそれぞれを前記表データ処理指定用プログラムの生成に使用させ、もって前記複数の表データ処理指定用プログラムのそれぞれに対応する複数の処理プログラムを生成させる、
ステップを更にコンピュータに実行させるようにプログラムされていることを特徴とする請求項１３に記載のプログラム生成プログラム。
【請求項１５】
前記プログラム生成プログラムは、
前記変数値定義表部分に対して利用者によりセル行又はセル列の追加若しくは削除あるいはセル群の結合の変更がなされたときに、前記変数名定義表部分に対して、対応するセル行又はセル列の追加若しくは削除あるいはセル群の結合の変更を実行する、
ステップを更にコンピュータに実行させるようにプログラムされていることを特徴とする請求項１から１４のいずれか一つに記載のプログラム生成プログラム。
【請求項１６】
複数の変数の変数名を記憶する複数のセルを有する第１の部分と各変数の複数の変数値を表す複数のセルを有する第２の部分からなる表内の前記第１の部分から前記変数名定義表部分を生成し、
前記表の前記第２の部分を前記変数値定義表部分として使用する、
ステップを更にコンピュータに実行させるようにプログラムされ、
前記第１の部分に含まれた複数の変数名を記憶するセルは、列又は行の一方に関しては、前記第２の部分を構成する複数の列又は複数の行と同じ列又は行に属し、列又は行の他方に関しては、前記第２の部分を構成する複数の列又は複数の行より少ない数の列又は行に属し、
前記第１の部分から前記変数名定義表部分を生成するときに、前記第２の部分に含まれた複数のセルにそれぞれ１対１に対応する複数のセルが前記変数名定義表部分に含められる、
ことを特徴とする請求項１から１５のいずれか一つに記載のプログラム生成プログラム。
【請求項１７】
前記第２の部分内に含まれた、前記複数の変数のいずれかの上位側の変数に対する複数の変数値を記憶する複数のセルは、前記第１の部分内にある当該上位側の変数の変数名を記憶するセルに対して列又は行の前記一方の座標が同一である互いに隣接し相互に前記特定の関係にある一群のセルに関連してそれぞれの上位側の変数値を記憶し、
前記第１の部分から前記変数名定義表部分を生成するときに、前記第１の部分に含まれた複数のセルに対応する前記第２の部分に含まれた複数のセルの間に前記特定の関係にある複数のセルが含まれている場合には、当該複数のセルに対応する前記変数名定義表部分内の複数のセルが当該特定の関係を有するように、前記変数名定義表部分が生成される、
ことを特徴とする請求項１６に記載にプログラム生成プログラム。
【請求項１８】
複数の変数の変数名を記憶する複数のセルを有する第１の部分と各変数の複数の変数値を記憶する複数のセルを有する第２の部分からなる表内の前記第１、第２の部分がそれぞれ前記変数名定義表部分と前記変数値定義表部分として使用され、
前記第１の部分に含まれた前記複数のセルは、列又は行の一方に関しては、前記第２の部分を構成する複数の列又は複数の行と同じ列又は行に属し、列又は行の他方に関しては、前記第２の部分を構成する複数の列又は複数の行より少ない数の列又は行に属する、
ことを特徴とする請求項１から９、１１から１５のいずれか一つに記載にプログラム生成プログラム。
【請求項１９】
前記第２の部分は、いずれかの上位側の変数の変数値を互いに隣接し相互に前記特定の関係にある複数のセルに記憶し、
前記上位側の変数の下位側の変数の複数の変数値を記憶する複数のセルは、それぞれ前記上位側の変数の上記変数値を記憶する上記複数のセルに対してあらかじめ定められた特定の位置関係にある、
ことを特徴とする請求項１８に記載にプログラム生成プログラム。
【請求項２０】
前記特定の位置関係にある複数のセルは、列又は行のうちの前記一方の座標に関しては、前記同一の座標より大きな座標を有する少なくとも一つの列又は行のうちの前記一方に属し、列又は行のうちの他方に関しては、前記特定の関係にある一群のセルが属する複数の行又は列のうちの前記他方に属している、
ことを特徴とする請求項１９に記載のプログラム生成プログラム。
【請求項２１】
前記特定の関係にある一群のセルは、相互に結合された一群のセルである、
ことを特徴とする請求項１９又は２０記載のプログラム生成プログラム。
【請求項２２】
複数のセルを有し、あらかじめ定められた複数の変数の変数名を記憶した変数名定義表部分と、前記変数名定義表部分内の前記複数のセルに対応する複数のセルを有し、前記変数名定義表部分内に変数名が記憶された複数の変数のそれぞれの変数値を前記変数名定義表部分内の当該変数名を記憶するセルに対応するセルに記憶した変数値定義表部分と、前記変数名定義表部分に記憶された複数の変数のうち、処理されるべき複数の変数と当該複数の変数に対して実行すべき特定の処理をあらかじめ定められた表データ処理指定用のプログラム言語で記述された複数の表データ処理指定用プログラム文を用いて指定する表データ処理指定用プログラムとに基づいて、前記特定の処理を実行する、汎用プログラム言語で記述されたアプリケーションプログラムを生成するプログラム生成方法であって、
前記表データ処理指定用プログラムにより指定された前記処理されるべき複数の変数のそれぞれの変数名が記憶されている前記変数名定義表部分内の複数のセルを判別し、
前記判別された複数のセルにそれぞれ対応する前記変数値定義表部分内の複数のセルを判別し、
前記変数値定義表部分内の判別された複数のセルから前記処理されるべき複数の変数のそれぞれの変数値を読み出し、
前記読み出された複数の変数値が組み込まれ、当該組み込まれた複数の変数値に対して前記表データ処理指定用プログラムにより指定された前記特定の処理を実行する、汎用プログラム言語で記述されたアプリケーションプログラムを生成する、
ステップを含むことを特徴とするプログラム生成方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、表に記憶された複数のデータが埋め込まれ、当該埋め込まれた複数のデータに対して特定の処理を実行するアプリケーションプログラムを生成するプログラム生成プログラム及びプログラム生成方法に関する。
【０００２】
【従来の技術】
業務上使用されるデータを処理するアプリケーションプログラム（業務プログラム）を開発するためには、通常当該データをデータベースに登録し、当該データベースを利用して当該アプリケーションプログラムを生成する方法が採られている。より具体的には、処理すべき特定の複数のデータを決定し、それぞれのデータの相互の関係を確定し、当該複数のデータを登録すべきデータベースの構造を決定し、その構造を有するデータベースに上記複数のデータを登録し、当該登録された複数のデータを使用して、当該複数のデータを処理するアプリケーションプログラムを生成する。
【０００３】
このような従来の業務プログラムの生成方法では任意の条件を満たす業務プログラムを生成できるが、実用上問題点も多くあり、いろいろな改善案が提案されている。例えば、特開２０００−６６８８５号公報では、要求仕様の決定時に定義漏れや定義誤りが発生する恐れがあるので、それらの発生を防止する案が提案されている。また、特開２００２−４９４９３号公報では、既成の業務プログラムの再利用時に必要となる既存のプログラムの作り直し等の再利用時に必要となる作業量を減らす案が提案されている。
【０００４】
しかし、日常の業務では、多くのデータが表計算プログラムを使用して表内に登録され使用されている。表計算プログラム上では、表の構造を定義することも変更することも簡便に行うことができる。更に、表内の複数のデータに対して実行すべき処理を指定する表マクロプログラムも作成が容易であり、広く利用されている。表マクロプログラムは、表の構造が同じであれば、異なるデータを記憶する複数の表に対して使用することができ、多くの同種の表に対して同一の表マクロプログラムを実行してそれぞれの表に対する処理結果を得ることができ、便利である。
【０００５】
【発明が解決しようとする課題】
本願発明者は、以上のようにデータを管理する簡便なツールとして表計算プログラムが管理する表が利用されている実情を考え、アプリケーションプログラムを開発するときにも、処理すべき特定の複数のデータを表に登録し、その表を使用してアプリケーションプログラムを開発するという方法を採ることができるならば、アプリケーションプログラムの開発が、従来のデータベースを使用したアプリケーションプログラムの開発よりも簡便となり、また開発後の修正もより容易になるであろうと考えるに至った。
【０００６】
なお、上記表マクロプログラムは、表に登録されたデータに対して表計算プログラム上で実行されるプログラムであり、コンピュータのアプリケーションプログラムとしてあるいはその一部としては使用するとはできない。
【０００７】
したがって、本発明の目的は、表内に登録された処理すべき複数のデータに対して特定の処理を施すアプリケーションプログラムを生成するプログラム生成プログラム及びプログラム生成方法を提供することである。
【０００８】
【課題を解決するための手段】
上記目的を達成するために、請求項１に記載の本発明に係るプログラム生成プログラムは、複数のセルを有し、あらかじめ定められた複数の変数の変数名を記憶した変数名定義表部分と、前記変数名定義表部分内の前記複数のセルに対応する複数のセルを有し、前記変数名定義表部分内に変数名が記憶された複数の変数のそれぞれの変数値を前記変数名定義表部分内の当該変数名を記憶するセルに対応するセルに記憶した変数値定義表部分と、前記変数名定義表部分に記憶された複数の変数のうち、処理されるべき複数の変数と当該複数の変数に対して実行すべき特定の処理を、あらかじめ定められた表データ処理指定用のプログラム言語で記述された複数の表データ処理指定用プログラム文を用いて指定する表データ処理指定用プログラムとに基づいて、前記特定の処理を実行する、汎用プログラム言語で記述されたアプリケーションプログラムを生成するプログラム生成プログラムである。
本発明に係る上記プログラム生成プログラムは、以下のステップをコンピュータに実行させるようにプログラムされている。すなわち、前記表データ処理指定用プログラムにより指定された前記処理されるべき複数の変数のそれぞれの変数名が記憶されている前記変数名定義表部分内の複数のセルを判別し、前記判別された複数のセルにそれぞれ対応する前記変数値定義表部分内の複数のセルを判別し、前記変数値定義表部分内の判別された複数のセルから前記処理されるべき複数の変数のそれぞれの変数値を読み出し、前記読み出された複数の変数値が組み込まれ、当該組み込まれた複数の変数値に対して前記表データ処理指定用プログラムにより指定された前記特定の処理を実行する、汎用プログラム言語で記述されたアプリケーションプログラムを生成する。
【０００９】
これにより、変数名定義表部分と、変数値定義表部分と、表データ処理指定用プログラムとに基づいて、変数値定義表部分に記憶された複数の変数の変数値のうち、当該表データ処理指定用プログラムが指定する複数の変数値が埋め込まれ、当該埋め込まれた複数の変数値を用いて当該表データ処理指定用プログラムが指定する特定の処理を実行できる、表データを定義する表計算プログラムから独立して使用可能なアプリケーションプログラムを生成することができる。したがって、処理すべきデータをデータベースではなく表に登録してそのデータを処理するアプリケーションプログラムを生成することができる。
【００１０】
請求項２に記載の本発明のより具体的な態様では、前記変数名定義表部分内に登録された複数の変数は、上下関係を有する複数の階層のいずれかに属するように階層化され、いずれかの上位側の変数が複数の変数値を採ることができ、更に当該上位側の変数の下位側に位置する変数が前記上位側の変数が採り得る当該複数の変数値の各々に対応して一つ又は複数の変数値を採ることができ、前記変数名定義表部分と前記変数値定義表部分の少なくとも一方は前記複数の変数間の階層を識別可能に構成されている。これにより、上位側の変数とその下位側の変数とを組み合わせて変数を指定できるようになり、多重ループ処理を指定するうえで好都合である。
【００１１】
請求項３に記載の本発明のより具体的な態様では、前記変数値定義表部分内の上位側の変数の変数値を記憶するセルと当該上位側の変数の下位側の変数の変数値を記憶するセルとが識別可能なように、前記変数値定義表部分が構成されている。請求項４に記載の本発明のより具体的な態様では、前記変数値定義表部分内のいずれかの上位側の変数の変数値は、列又は行のうちの一方の座標が同一である互いに隣接し相互に特定の関係にある一群のセルに関連付けて記憶され、前記変数値定義表部分内の前記上位側の変数の下位側の変数のそれぞれの変数値は、前記一群のセルに対して特定の位置関係にあるセルに記憶される。
【００１２】
更に、請求項５に記載の本発明のより具体的な態様では、前記特定の位置関係にある複数のセルは、列又は行のうちの前記一方の座標に関しては、前記同一の座標より大きな座標を有する少なくとも一つの列又は行のうちの前記一方に属し、列又は行のうちの他方に関しては、前記特定の関係にある一群のセルが属する複数の行又は列のうちの前記他方に属している。請求項９に記載の更に具体的な態様では、前記特定の関係にある一群のセルは、相互に結合された一群のセルである。
【００１３】
これらの各々により、変数値定義表部分は、変数の階層関係を反映するように構成されているので、利用者は、変数値定義表部分の構造を見て変数間の階層関係を知ることができ、プログラム生成プログラムも、変数値定義表部分の構造から、そこに記憶されている複数の変数値に対応する複数の変数の間の階層関係に依存したアプリケーションプログラムを生成することができる。
【００１４】
請求項６に記載の本発明の他の具体的な態様では、前記変数名定義表部分内の上位側の変数の変数名を記憶するセルと当該上記上位側の変数の下位側の変数の変数名を記憶するセルとが識別可能とするように、前記変数名定義表部分が構成されている。請求項７に記載の更に具体的な態様では、前記変数名定義表部分内のいずれかの上位側の階層に属するいずれかの変数の変数名は、列又は行のうちの一方の座標が同一である互いに隣接し相互に特定の関係にある一群のセルに関連付けて記憶され、前記変数名定義表部分内の前記上位側の変数の下位側の変数のそれぞれの変数名は、前記一群のセルに対して特定の位置関係にあるセルに記憶されている。
【００１５】
更に請求項８においては、前記特定の位置関係にある複数のセルは、列又は行のうちの前記一方の座標に関しては、前記同一の座標より大きな座標を有する少なくとも一つの列又は行のうちの前記一方に属し、列又は行のうちの他方に関しては、前記特定の関係にある一群のセルが属する複数の行又は列のうちの前記他方に属している。請求項９に記載の更に具体的な態様では、前記特定の関係にある一群のセルは、相互に結合された一群のセルである。
【００１６】
これらの各々により、変数名定義表部分は、変数の階層関係を反映するように構成されているので、利用者は、変数名定義表部分の構造を見て変数間の階層関係を知ることができ、プログラム生成プログラムも、変数値定義表部分の構造から、そこに記憶されている複数の変数値に対応する複数の変数の間の階層関係に依存したアプリケーションプログラムを生成することができる。
【００１７】
請求項１０に記載の本発明の具体的な態様では、上記変数名定義表部分と、上記変数値定義表部分は、それぞれ内のセルが１対１に対応するように構成される。すなわち、前記変数名定義表部分は、同じ変数名の変数に対して複数の変数値がある場合には、当該変数名を少なくとも前記変数値の数だけの複数のセルに記憶し、前記変数値定義表部分内の前記複数の変数値を記憶する複数のセルは、前記変数名定義表部分内の前記同じ変数名を記憶する前記複数のセルに１対１に対応している。これにより、利用者は、変数値定義表部分に変数値を記憶させるときに、どのセルがどの変数に対する変数値を記憶すべきセルであるかを容易に知ることができる。また、プログラム生成プログラムも、変数名定義表部分内の特定の変数名を記憶するセルに対応する、変数値定義表部分内の当該変数の変数値を記憶するセルを検出することが容易になる。
【００１８】
請求項１１に記載の本発明のより望ましい態様では、前記表データ処理指定用プログラムは、ループ処理部分を指定可能であり、当該ループ処理部分は、当該ループ処理部分の繰り返しを制御する変数として複数の変数値を採りうる変数を指定し、更に、当該変数が採りうる複数の変数値のそれぞれに対して繰り返し実行されるべき処理とを指定可能である。
更に、前記プログラム生成プログラムは、前記表データ処理指定用プログラムにより前記ループ処理部分が指定された場合、当該ループ処理部分により指定された当該ループ処理部分の繰り返しを制御する前記変数の変数名が記憶されている前記変数名定義表部分内のセルに対応する、前記変数値定義表部分内の前記変数の複数の変数値を記憶する複数のセルの一つをループ繰り返し毎にあらかじめ定められたセルの順番に従い選択し、該選択されたセル内の変数値を読み出し、前記選択と読み出しのステップを、当該ループ処理部分の繰り返しを制御する前記変数の複数の変数値を記憶する複数のセルの総数だけ繰り返し、前記繰り返しにより得られた複数の読み出された変数値のそれぞれが埋め込まれ、当該埋め込まれた複数の変数値のそれぞれに対して前記ループ処理部分により指定された前記繰り返し実行されるべき処理を実行する、前記汎用プログラム言語で記述されたプログラム部分を、前記ループ処理部分に対する前記アプリケーションプログラムの一部として生成する、ステップを更にコンピュータに実行させるようにプログラムされている。
【００１９】
これにより同じ変数が採りうる複数の変数値に対して同じ処理を繰り返し実行させるループ処理を実行可能なようにアプリケーションプログラムを生成することも可能である。
【００２０】
請求項１２に記載の本発明のより望ましい態様では、前記表データ処理指定用プログラムは多重ループ処理部分を指定可能であり、当該多重ループ処理部分は、最内側ループ処理部分と少なくとも一つの外側ループ処理部分とを含み、前記外側ループ処理部分は、当該外側ループ処理部分の繰り返しを制御する変数として複数の変数値を採り得るいずれかの上位側の第１の変数を指定可能であり、前記最内側ループ処理部分は、当該内側ループ処理部分の繰り返しを制御する変数と少なくとも当該変数が採りうる複数の変数値のそれぞれに対して繰り返し実行されるべき処理とを指定可能であり、前記最内側ループ処理部分は、当該最内側ループ処理部分の繰り返しを制御する前記変数として前記外側ループに割り当てられたループ識別情報が付加された前記第１の変数の変数名と前記第１の変数に関して下位側に位置する第２の変数の変数名との第１の組合せを指定可能であり、前記最内側ループ処理部分は、当該最内側ループ処理部分で繰り返し実行されるべき処理を受けるべき変数として前記外側ループに割り当てられたループ識別情報が付加された前記第１の変数の変数名と前記内側ループに割り当てられたループ識別情報が付加された前記第２の変数の変数名との第２の組合せを指定可能である。
更に、前記プログラム生成プログラムは、前記表データ処理指定用プログラムにより前記多重ループ処理部分が指定された場合、前記外側ループ処理部分により指定された前記第１の変数の変数名が記憶されている前記変数名定義表部分内のセルに対応する、前記変数値定義表部分内の前記第１の変数の複数の変数値を記憶する複数のセルの一つを前記外側ループの繰り返し毎にあらかじめ定めたセルの順番に従い選択し、当該選択されたセルに記憶された前記第１の変数のいずれかの変数値の下位側に位置する前記第２の変数の複数の変数値を記憶する、前記変数値定義表部分内の複数のセルの一つを前記最内側ループの繰り返し毎にあらかじめ定めたセルの順番に従い選択する。
更に、前記最内側ループの繰り返し毎に選択された前記変数値定義表部分内の当該セル内の変数値を読み出し、当該前記最内側ループの繰り返し毎のセルの選択と選択されたセル内の変数値の読み出しを、前記外側ループの繰り返し毎に選択されたセルに記憶された前記第１の変数の変数値の下位側に位置する前記第２の変数の複数の変数値を記憶するセルの数だけ繰り返し、更に、前記外側ループの繰り返しを制御する前記第１の変数の複数の変数値を記憶する複数のセルの数だけ当該繰り返しを繰り返す。
更に、当該繰り返しステップで読み出された複数の変数値が埋め込まれ、当該埋め込まれた複数の変数値に対して前記最内側ループ処理部分により指定された前記処理を実行する前記汎用プログラム言語で記述されたプログラム部分を、前記多重ループ処理部分に対するアプリケーションプログラムの部分として生成する、ステップを更にコンピュータに実行させるようにプログラムされている。
【００２１】
これにより上位側の変数を外側ループのループ制御変数として使用し、下位側の変数を内側ループのループ制御変数として使用する多重ループ処理を実行するようにアプリケーションプログラムを生成することが可能となる。
【００２２】
請求項１６に記載の本発明の他の望ましい態様では、上記プログラム生成プログラムは、複数の変数の変数名を記憶する複数のセルを有する第１の部分と各変数の複数の変数値を表す複数のセルを有する第２の部分からなる表内の前記第１の部分から前記変数名定義表部分を生成し、前記表の前記第２の部分を前記変数値定義表部分として使用する、ステップを更にコンピュータに実行させるようにプログラムされ、前記第１の部分に含まれた複数の変数名を記憶するセルは、列又は行の一方に関しては、前記第２の部分を構成する複数の列又は複数の行と同じ列又は行に属し、列又は行の他方に関しては、前記第２の部分を構成する複数の列又は複数の行より少ない数の列又は行に属し、前記第１の部分から前記変数名定義表部分を生成するときに、前記第２の部分に含まれた複数のセルにそれぞれ１対１に対応する複数のセルが前記変数名定義表部分に含められる。
【００２３】
これにより、変数名と変数値を対比可能なセルに記憶する通常使用される表から変数名定義表部分と変数値定義表部分を生成しアプリケーションプログラムを生成することが可能になる。
【００２４】
更に請求項１７に記載のより望ましい態様では、上記請求項１６において、前記第２の部分内に含まれた、前記複数の変数のいずれかの上位側の変数に対する複数の変数値を記憶する複数のセルは、前記第１の部分内にある当該上位側の変数の変数名を記憶するセルに対して列又は行の前記一方の座標が同一である互いに隣接し相互に前記特定の関係にある一群のセルに関連してそれぞれの上位側の変数値を記憶し、前記第１の部分から前記変数名定義表部分を生成するときに、前記第１の部分に含まれた複数のセルに対応する前記第２の部分に含まれた複数のセルの間に前記特定の関係にある複数のセルが含まれている場合には、当該複数のセルに対応する前記変数名定義表部分内の複数のセルが当該特定の関係を有するように、前記変数名定義表部分が生成される。これにより、単一の表から複数の変数間の階層関係を反映するように、変数名定義表部分と変数値定義表部分を生成しアプリケーションプログラムを生成することが可能になる。
【００２５】
請求項１８に記載の本発明の他の望ましい態様では、複数の変数の変数名を記憶する複数のセルを有する第１の部分と各変数の複数の変数値を記憶する複数のセルを有する第２の部分からなる表内の前記第１、第２の部分がそれぞれ前記変数名定義表部分と前記変数値定義表部分として使用される。前記第１の部分に含まれた前記複数のセルは、列又は行の一方に関しては、前記第２の部分を構成する複数の列又は複数の行と同じ列又は行に属し、列又は行の他方に関しては、前記第２の部分を構成する複数の列又は複数の行より少ない数の列又は行に属するものである。これにより、変数名と変数値を対比可能なセルに記憶する通常使用される表をそのまま使用してアプリケーションプログラムを生成することが可能になる。
【００２６】
請求項１９に記載の更に具体的な態様では、請求項１８において、前記第２の部分は、いずれかの上位側の変数の変数値を互いに隣接し相互に前記特定の関係にある複数のセルに記憶し、前記上位側の変数の下位側の変数の複数の変数値を記憶する複数のセルは、それぞれ前記上位側の変数の上記変数値を記憶する上記複数のセルに対してあらかじめ定められた特定の位置関係にある。更に請求項２０に記載のより具体的な態様では、前記特定の位置関係にある複数のセルは、列又は行のうちの前記一方の座標に関しては、前記同一の座標より大きな座標を有する少なくとも一つの列又は行のうちの前記一方に属し、列又は行のうちの他方に関しては、前記特定の関係にある一群のセルが属する複数の行又は列のうちの前記他方に属している。請求項２１に記載の更に具体的な態様では、前記特定の関係にある一群のセルは、相互に結合された一群のセルである。
【００２７】
これらの各々により、表の第２の部分は複数の変数間の階層関係を反映するように構成されているので、利用者は表の第２の部分の構造を見て変数間の階層関係を知ることができ、プログラム生成プログラムは表の第２の部分の構造から、第２の部分に記憶されている複数の変数値に対応する複数の変数の間の階層関係に依存したアプリケーションプログラムを生成することができる。
【００２８】
【発明の実施の形態】
以下、本発明に係るプログラム生成プログラム及びプログラム生成方法のいくつかの実施の形態を図面を参照して説明する。なお、発明の第２の実施の形態以降については、発明の第１の実施の形態との相違点を主に説明するに止める。
【００２９】
＜発明の第１の実施の形態＞
図１は、本発明に係るプログラム生成プログラムの一つの実施の形態を使用する情報処理装置の概略ブロック図である。図において、情報処理装置１は、処理装置１０と、キーボード及びマウス等のポインティングデバイスを含む入力装置１５と、ＣＲＴ表示装置等の表示装置２０と、磁気ディスク記憶装置等の補助記憶装置２５と、メモリ３０とを備え、例えばパソコンあるいはワークステーションにより実現される。メモリ３０には、プログラム生成プログラム４０が組み込まれ実行される。プログラム生成プログラム４０が、本発明に係るプログラム生成プログラムの一つの実施の形態を実現し、処理装置１０、入力装置１５、表示装置２０、補助記憶装置２５によりプログラム生成プログラム４０が実行されるときに、本発明に係るプログラム生成方法の一つの実施の形態が使用される。
【００３０】
４５は、複数のセルを有し、あらかじめ定められた複数の変数の変数名を記憶する変数名定義表部分であり、４６は、変数名定義表部分４５内の複数のセルのそれぞれに対応する複数のセルを有する変数値定義表部分である。変数値定義表部分４６は、変数名定義表部分４５内に変数名が記憶されている複数の変数のそれぞれの変数値を、変数名定義表部分４５内の当該変数名が記憶されているセルに対応するセルに記憶する。４７、４８、…は、それぞれ表データ処理指定用プログラムであり、各表データ処理指定用プログラムは、変数名定義表部分４５に記憶された複数の変数のうち、処理されるべき複数の変数と当該複数の変数に対して実行すべき特定の処理を、あらかじめ定められた表データ処理指定用のプログラム言語で記述された複数の表データ処理指定用プログラム文を用いて指定する。以下では、表データ処理指定用プログラム４７、４８等を特定の処理を指定したプログラムという意味で、テンプレートプログラムと呼ぶことがある。
【００３１】
１００、１０１、…は、プログラム生成プログラム４０により複数のテンプレートプログラム４７、４８のそれぞれから生成される複数のアプリケーションプログラムである。各アプリケーションプログラムは、対応するテンプレートプログラムが指定する複数の変数の変数値が組み込まれ、当該組み込まれた複数の変数値に対して当該テンプレートプログラムが指定する特定の処理を実行する、汎用プログラム言語で記述されたアプリケーションプログラムである。
【００３２】
すなわち、プログラム生成プログラム４０は、テンプレートプログラム４７又は４８により指定された処理されるべき複数の変数のそれぞれの変数名が記憶されている変数名定義表部分４５内の複数のセルを判別し、判別された複数のセルにそれぞれ対応する変数値定義表部分４６内の複数のセルを判別し、変数値定義表部分４６内の判別された複数のセルから処理されるべき複数の変数のそれぞれの変数値を読み出し、読み出された複数の変数値が組み込まれ、当該組み込まれた複数の変数値に対してテンプレートプログラム４７又は４８により指定された特定の処理を実行するように、汎用プログラム言語で記述されたアプリケーションプログラム１００又は１０１を生成する。
【００３３】
プログラム生成プログラム４０は、同じ変数名定義表部分４５と変数値定義表部分４６の組に対して複数のテンプレートプログラム４７、４８、…が利用可能なときには、それぞれのテンプレートプログラム４７、４８に対応して複数のアプリケーションプログラム１００、１０１、…を生成する。テンプレートプログラム４７等は、プログラム生成プログラム４０の利用者あるいはアプリケーションプログラムを使用するシステムの開発者によりあらかじめ生成される。４９は、プログラム生成プログラム４０により使用される定義対応情報である。その内容は後に図１２を参照して説明する。
【００３４】
プログラム生成プログラム４０は、テンプレートプログラム選択部５０と、テンプレートプログラム解析部６０と、アプリケーションプログラム出力部７０と、情報編集部８０とを備える。９０、９１は、プログラム生成プログラム４０により途中結果として生成される複数の中間コードプログラムである。なお、情報編集部８０は、プログラム生成プログラム４０とは別のプログラムとして設けることもできる。あるいは、情報編集部８０を設けないで、一般の表計算プログラムを代わりに使用するようにしてもよい。
【００３５】
変数名定義表部分４５は、アプリケーションプログラムの生成に使用されるべき複数のデータに対する変数名を定義する表部分であり、それぞれの変数名を記憶する複数のセルを有し、例えば後に説明する情報編集部８０あるいは他の一般に使用される表計算プログラムを用いて生成される。
【００３６】
プログラム生成プログラム４０の利用者あるいはアプリケーションプログラムを使用するシステムの開発者により、当該データを処理するためのテンプレートプログラム４７等が生成されるときに、当該テンプレートプログラム４７等で処理されるべき変数として指定される複数の変数を少なくとも含む複数の変数の変数名が記憶されるように、変数名定義表部分４５に記憶させるべき複数の変数名が、テンプレートプログラム４７又は４８を生成する者により決定される。
【００３７】
以下では、アプリケーションプログラムで処理されるデータの例として、あるビルの各階にある店の店名と位置等を管理するためのビル内店舗データを用いる。ビル内店舗管理データは、ビル名、１階あるいは２階等の階名、各階にある店舗の名称と場所等の変数の変数値を含むと仮定する。
【００３８】
図２は、ビル内店舗データを管理するために本実施の形態で使用可能な変数名定義表部分４５の一例を示す図である。変数名定義表部分４５は、“変数名定義表名”というラベルが記憶されたセル４５１Ａと、変数名定義表部分４５の実際の名称を記憶するセル４５１Ｂと、複数の変数名を記憶する他の複数のセルからなる。図示された例では、セル４５１Ｂには、例えば“栃木ビル変数名表”という変数名定義表部分の名称が記憶されている。他の複数のセルには上記ビル内の各店舗の情報が記憶される。
【００３９】
変数名定義表部分４５は、例えば、情報編集部８０又は他の一般に使用されている表計算プログラムにより、表データ処理指定用プログラム４７又は４８を生成しようとする者（例えば、プログラム生成プログラム４０の利用者、あるいは生成したアプリケーションプログラムを使用するシステムの管理者等）により生成される。なお、ビル内の店舗に関する変数名を定義する変数名定義表部分４５の名称として、ここでは栃木ビルに関する変数名定義表部分という特定のビルの名称を使用している。他の商業ビルに対しては別の変数名定義表部分４５を生成して使用する必要がある。各商業ビル内の階数、各階の店数も異なり、各商業ビル毎に変数名定義表部分４５が異なると考えられるためである。
【００４０】
図３は、図２に示された変数名定義表部分４５に対応する変数値定義表部分４６の例を示す図である。変数値定義表部分４６は、変数値定義表部分名というラベルが記載されたセル４６１Ａと、変数値定義表部分４６の実際の名称を登録するセル４６１Ｂと、複数の変数値を記憶する他の複数のセルからなり、例えば、情報編集部８０又は他の一般に使用されている表計算プログラムにより、プログラム生成プログラム４０の利用者が生成する。今の場合、セル４６１Ｂには、例えば“栃木ビル変数値表”という変数名定義表部分の名称が記憶されている。他の複数のセルには上記ビル内の各店舗のデータが記憶される。
【００４１】
変数値定義表部分４６は、変数名定義表部分４５に記憶された複数の変数名のそれぞれに関する複数の変数値を記憶するものであり、変数値定義表部分４６から任意の変数の変数値を取り出すときに、当該変数の変数名に基づいて、取り出すべき変数値に対する変数名が記憶されている変数名定義表部分４５内のセルを判別し、当該判別されたセルに対応する変数値定義表部分４６内のセルに記憶された変数値を取り出すように、変数値定義表部分４６が使用される。
【００４２】
図４は、変数名定義表部分４５と変数値定義表部分４６が採りうるいろいろなセルの配置例を示す図である。変数名定義表部分４５と変数値定義表部分４６は、同図（ａ）にあるように、別々のシート４５０、４６０上に構成された互いに独立な表であってもよい。この場合、説明の簡単化のために、変数名定義表部分４５内のセルと変数値定義表部分４６内の対応するセルは、同じ座標（行座標、列座標）からなると仮定することが可能である。しかし、これらのセルの座標は異なっていてもよい。
【００４３】
あるいは、同図（ｂ）にあるように、変数名定義表部分４５と変数値定義表部分４６は、同じシート４５０の異なる部分に配置された独立した表でもよい。この場合には、変数名定義表部分４５内のセルと変数値定義表部分４６内の対応するセルの座標は、行座標が同じであるが、列座標は一定値だけ差があると仮定することができる。あるいは、図示していないが、変数名定義表部分４５と変数値定義表部分４６が同じシート上の上方位置をその下方位置に配置されてもよい。その場合には、変数名定義表部分４５内のセルと変数値定義表部分４６内の対応するセルの座標は、列座標が同じであるが、行座標は一定値だけ差があることになる。更には、同図（ｃ）にあるように、同じシート４５０上に構成された一つの表の異なる部分により変数名定義表部分４５と変数値定義表部分４６が構成されてもよい。
【００４４】
図２に戻り、変数名定義表部分４５の構造は以下の点も考慮して決定される。一般に、変数値定義表部分４６は、変数名定義表部分４５内のいずれかのセルに対応する複数のセルを有するように定められ、変数値定義表部分４６内の各セルには、変数名定義表部分４５内の対応するセルに記憶された変数の変数値が記憶される。本実施の形態では、変数値定義表部分４６内のセルは、変数名定義表部分４５内のセルと１対１に対応するように、変数名定義表部分４５と変数値定義表部分４６のそれぞれのセルが定められる。このために、変数名定義表部分４５内の各セルには、そのセルに１対１に対応する変数値定義表部分４６内のいずれかのセルに記憶された変数値に対する変数名が記憶される。
【００４５】
したがって、いずれかの変数について複数の変数値がある場合、変数名定義表部分４５内の上記変数名の数と同じ数のセルにそれらの複数の変数値に共通の変数名が記憶される。例えば、図２では変数名定義表部分４５は、店が合計１０店舗あると仮定して、変数名“店名”をそれぞれ１０個のセル４５５Ａ、…、４５６Ａ、…、４５７Ａ、４５８Ａ、…に記憶している。同様に、階には１階と２階があると仮定して、変数名“階”も２個のセルに記憶している。
【００４６】
しかし、上記変数値定義表部分４６内の上記複数個のセルが変数名定義表部分４５内の上記１つのセルに対応していればよく、変数名定義表部分４５には、上記変数名が少なくとも一つ記憶されておればよい。したがって、変数名定義表部分４５内の一つのセルに上記変数の変数名が記憶され、上記変数値定義表部分４６には、上記変数値の数と同数のセルに上記複数個の変数値が記憶されるようにしてもよい。
【００４７】
例えば、図２において、変数名“階”を２番目に記憶するセル４５４には、変数名“階”を記憶しないで他の記号又特定の文字列を記憶するようにし、このセル４５４の変数名は、その上側のセル４５３内の変数名“階”と同じであると、プログラム生成プログラム４０に判断させるようにしてもよい。例えば、上向きの矢印“↑”をセル４５４に記憶させてもよい。
【００４８】
同様に、変数名“階”を記憶する一番上のセル４５３の右側にある変数名“店名”を記憶するセルのうち、最も上の行のセル４５５Ａと４５６Ａ以外のセルと、変数名“階”を記憶する２番目のセル４５４の右側にある変数名“店名”を記憶するセルのうち、最も上の行のセル４５７Ａと４５８Ａ以外のセルには、変数名“店名”に代えて上記矢印“↑”を記憶させてもよい。変数名“場所”を記憶するセルについても同じである。更に、上記矢印“↑”を記憶するセルを省略することも可能であり、そのような場合の実施の形態は後に別の実施の形態として説明する。
【００４９】
更に、変数名定義表部分４５と上記変数値定義表部分４６は、複数の変数の間の階層関係を識別可能なように構成されている。変数名定義表部分４５に記憶された変数名の変数の間には階層関係を持たせることがデータ処理あるいはデータ管理のうえで望ましい場合がある。例えば、処理するべきデータが、ビル内店舗データの場合には、ビル内の各店に関する処理、すなわち、変数“店名”あるいは“場所”を処理するアプリケーションプログラムを生成する場合、その店が１階にある店か２階にある店かに依らないで、変数名定義表部分４５に登録された全ての店の店名と場所を処理するように、アプリケーションプログラムを生成することもできる。しかし、１階にある店のみに関してある処理を施し、２階にある店のみに関してある処理を施したり、あるいは、まず１階にある店に関してある処理を施した後に２階にある店に関して同様の処理又は他の処理を施すというように、階毎に処理を指定するようにアプリケーションプログラムを生成することが望ましい場合も多い。
【００５０】
そのため、各階毎にその階に属する店の店名と場所を区別して処理可能なように、各階の階名と対応させてその階にある店の店名と場所とを変数値定義表部分４６に登録することが望ましい。このような場合、同じ階に属する店は複数個あるので、変数“階”は、変数“店名”、“場所”よりも上位側の変数として管理することが簡便で分かりやすい。本実施の形態では、前記変数名定義表部分内のいずれかの上位側の階層に属するいずれかの変数の変数名は、列又は行のうちの一方の座標が同一である互いに隣接し相互に特定の関係にある一群のセルに関連付けて記憶される。例えば、図２の場合には、上位側の変数“階”は、まず第２列に属する３つのセルに関連付けて記憶され、同じ変数“階”は、第２列に属する下方の２つのセルにも関連付けて記憶されている。
【００５１】
更に、変数名定義表部分４５内の上位側の変数に対して下位側にある変数の変数名は、前記一群のセルに対して特定の位置関係にあるセルに記憶される。例えば、前記特定の位置関係にある複数のセルは、列又は行のうちの前記一方の座標に関しては、前記同一の座標より大きな座標を有する少なくとも一つの列又は行のうちの前記一方に属し、列又は行のうちの他方に関しては、前記特定の関係にある一群のセルが属する複数の行又は列のうちの前記他方に属しているものである。具体的には、図２のように、上位側の変数“階”が同じ列に属する複数のセルに関連付けて記憶されているときには、下位側の複数の変数名は、当該上位側の変数名を記憶する一群のセルより右側にある（列座標が大きい）複数の列に属し、かつ上記上位側の変数値が記憶されている上記一群のセルが属する複数の行の一部の行に属する複数のセルに記憶される。
【００５２】
図２において、変数名“ビル名”は、変数値が一つしかないので、他の変数に関する処理を指定するときに、変数“ビル名”を指定する必要はないが、ビル名は、店内の全ての変数に共通に使用できる変数値を指定できるので、ここでは、簡単化のために、最上位に位置する変数としている。
【００５３】
以上の結果、図２では、変数名“ビル名”は第１の列内の５つのセルからなるセル群４５２に関連付けて記憶され、変数名“階”は、変数名“ビル名”が記憶されているセル群４５２より右側の列に属し“ビル名”が記憶されているセル群４５２が属する５つの行の一部に属している３つのセルからなるセル群４５３と２つのセルからなるセル群４５４のそれぞれに関連付けて記憶されている。
【００５４】
１階の複数の店に関する複数の変数名“店名”と複数の変数名“場所”は、変数名“階”が最初に記憶されている３つのセルからなるセル群４５３が属する第２列より右側に位置する第３と第４の列又は第５と第６の列に属し当該３つのセル４５３が属する３つの行のいずれかに属しているセル４５５Ａ、４５５Ｂ、…、４５６Ａ、４５６Ｂ…に記憶されている。同様に、２階の複数の店に関する複数の変数名“店名”と複数の変数名“場所”は、変数名“階”が次に記憶されているセル群４５４が属する第２列より右側に位置する第３と第４の列又は第５と第６の列に属し当該セル群４５４が属する２つの行のいずれかに属しているセル４５７Ａ、４５７Ｂ、…、４５８Ａ、４５８Ｂ…に記憶されている。
【００５５】
図５は、上位側の変数を記憶する特定関係にある複数のセルが、同一の行に属する場合における、変数名定義表部分４５の例を示す図である。同図（ａ）と（ｂ）では、変数名“ビル名”も“階”もそれぞれ同じ行に属する一群のセルに保持されている。同図（ｃ）では、ビル名のみがそれぞれ同じ行に属する一群のセルに保持されている。図５の場合には、下位側の複数の変数名は、上位側の変数名を記憶する複数のセルより下側の（行座標がより大きい）複数の行に属し、かつ上記上位側の変数の変数名が記憶されている上記複数のセルが属する複数の列の一部の列に属する複数のセルに記憶される。ただし、図５（ｃ）の場合には、変数名“階”と“店名”、“場所”との関係は、図２の場合と同じである。
【００５６】
本実施の形態では、上位側の変数値が関連付けて記憶されている複数のセルの間の特定の関係の例として、それらの複数のセルが相互に結合されている一群のセルであるということを使用する。各セルには、座標（行座標，列座標）とセル値と、当該セルが他のセルに結合されているか否かに応じて値“１”又は“０”を採る結合セルフラグと、当該セルと他のセルとが結合されている場合、当該セルから結合先のセルに向かう方向が、“上向き”、“下向き”、“右向き”、“左向き”のいずれであるかを示す結合方向とが属性として記憶されている。以下では、“上向き”又は“下向き”の結合方向を持つ結合された一群のセルは、同一の列に属するので、それらのセルの結合方向を列方向と呼び、“右向き”又は“左向き”の結合方向を持つ結合された一群のセルは、同一の行に属するので、それらのセルの結合方向を行方向と呼ぶことがある。
【００５７】
図６は、変数名定義表部分４５内の変数名を記憶するセルの属性のうち、結合セルフラグの数値例と結合方向の例を示す図である。図では結合方向は矢印で示されている。同図（ａ）から分かるように、変数名“ビル名”を記憶するセル群４５２を構成するセル４５２Ａから４５２Ｅと、変数名“階”を記憶するセル群４５３を構成するセル４５３Ａから４５３Ｃと、同じ変数名“階”を記憶するセル群４５４を構成するセル４５４Ａと４５４Ｂには、結合フラグとして値“１”が記憶され、他のセルに記憶された結合フラグは“０”である。変数名“ビル名”を記憶するセル群４５２内の最後のセル４５２Ｅ以外のセル４５２Ａから４５２Ｄに記憶された結合方向は、“下向き”であり、最後のセル４５２Ｅに記憶された結合方向はこれとは逆の“上向き”である。
【００５８】
変数名“階”を記憶するセル群４５３の最後のセル４５３Ｃ以外のセル４５３Ａから４５３Ｂに記憶された結合方向は、“下向き”であり、最後のセル４５３Ｃに記憶された結合方向は、これとは逆の“上向き”である。同じ変数名“階”を記憶するセル群４５４についても同様である。このように結合方向を決めると、先頭のセルの結合方向と逆向きの結合方向のセルまでが、同一の結合セル群に属すると判断してもよいことになる。
【００５９】
しかし、結合されたセル群のうち先頭のセルと最後のセル以外のセルの結合方向を上記図６（ａ）の場合と逆向きにすることもできる。例えば、図６（ｂ）に示した例では、結合された複数のセルの先頭のセルの結合方向と最後のセルの結合方向が図６（ａ）の場合と同じであるが、途中のセルの結合方向は図６（ａ）の場合と異なり、“上向き”となっている。
【００６０】
このようにして結合方向を割り当てる場合には、先頭のセルの結合方向に沿って位置する複数のセルの結合方向を順次チェックする。先頭のセルの結合方向と逆向きの結合方向のセルが出現した後、再度先頭のセルが示す結合方向を示すセルが出現したときには当該セルの手前のセルまでが、同一の結合セル群に属すると判断することができる。あるいは先頭のセルの結合方向と逆向きの結合方向のセルが出現した後、再度先頭のセルが示す結合方向を示すセルが出現しないまま表部分が終了したときには、先頭のセルから最後に検出されたセルまでが、同一の結合セル群に属すと判断することができる。
【００６１】
図７は、２階の店が２個のみであるときに使用可能な変数名定義表部分４５の例を示す図である。図８は、図７の変数名定義表部分４５に対応する変数値定義表部分４６の例を示す図である。図８に示すように、２階の店の数は２つであり、２つの店の店名と場所は単一の行内に記憶させることができる。図２の場合には変数名“階”を記憶する２つのセル群４５３、４５４はいずれも複数のセルからなっていた。しかし、図７の場合には、変数名“階”は最初に３つのセルからなるセル群４５３に記憶されているが、次に同じ変数名“階”を記憶するのに使用されているセルは一つのセルのみである。このように同じ変数名“階”が複数個、変数名定義表部分４５に記憶され、複数の同じ変数の変数名の一部が複数のセルに関連付けて記憶されていれば、同じ変数名の一部が一つのセルのみに記憶されていても、当該変数“階”は、変数名“店名”、“場所”に対して上位側の変数であると扱わせることができる。
【００６２】
図９は、各階の店が２個のみであるときに使用可能な変数名定義表部分４５の例を示す図である。この例では、２個の同じ変数名“階”の最初のものを複数、例えば２個のセルからなるセル群４５３に関連付けて記憶させるために、変数名“店名”と“場所”を記憶しない空のセルを含む空行部分をセル群４５３の右側に設けている。このような変数名定義表部分４５の場合も、変数名“階”は、変数名“店名”と“場所”より上位側の変数として扱われる。
【００６３】
なお、この例では、同一の空行内の複数のセルのいずれにも、変数名が記憶されていないが、本発明は、同一行内の複数のセルの全てに変数名が記憶されているか、あるいはそれらのセルのいずれにも変数名が記憶されていない場合に限定はされない。同一行内の複数のセルの一部に変数名が記憶されていて、他のセルに変数名が記憶されていない場合にも、本発明は適用できる。
【００６４】
本実施の形態では、他のいろいろな構造の変数名定義表部分４５と変数値定義表部分４６を使用することもできる。例えば、図２においては、“店名”と“場所”は、それぞれ２列に記憶されたが、“店名”と“場所”を１列に記憶するようにしてもよい。更に、各“店名”と“場所”を記憶するセルの配置をいろいろ変更してもよい。
【００６５】
例えば、図１０は、本実施の形態で使用可能な変数名定義表部分４５の更に他のいくつかの例を示す図である。同図（ａ）は、“店名”と“場所”が、同一の店に関しては列方向に隣接する一対のセルに記憶される例を示す。同図（ｂ）は、他の階層関係の例を示す図であり、ここでは、“店名”は“階”の下位の変数であるが、“店名”の下位に“業種”と“場所”が記憶されるようになっている。なお、同図（ａ）、（ｂ）では簡単化のために、それぞれに対応する変数値定義表部分４６の例を示していないが、そこに示された変数名定義表部分４５と同じ構造を有するものであることは、図２の変数名定義表部分４５と図３の変数値定義表部分４６の場合と同じである。
【００６６】
変数値定義表部分４６に関しては、本発明では、変数名定義表部分４５の場合と同じく、上位側の変数の変数値は、変数値定義表部分４６内の特定の関係にある複数のセルに関連付けて記憶され、当該変数より下位の変数の変数値は、上記上位側の変数のいずれかの変数値を記憶するセルに対して特定の位置関係にある複数のセルに記憶される。本実施の形態では、変数名定義表部分４５内に記憶された変数名の変数が上位側の変数であるか否かが判断されるので、変数名定義表部分４５が、変数の階層関係を判別可能の構成されていることが望ましい。
【００６７】
しかし、変数名定義表部分４５が、変数の階層関係を識別可能なように構成されていれば、変数値定義表部分４６は、そのように構成されている必要はなく、単に変数名定義表部分４５に対応するセルを有するだけでもよい。例えば、変数値定義表部分４６は、変数名定義表部分４５内の結合セルに対応する一群のセルは結合されていなくてもよい。例えば、それらの複数のセルの一つ（例えば、行座標又は列座標が最小のもの）に変数値を記憶し他のセルには変数値を記憶しないでもよい。あるいはそれらの複数のセルの各々に同じ変数値を記憶してもよい。あるいは、残りのセルに、当該セルの変数値は矢印が示す方向のセルを参照すべきことを示すの矢印（例えば上向きの矢印“↑”）を記憶させておき、この矢印をたどって所望の変数値が記憶されているセルを探すようにしてもよい。
【００６８】
本実施の形態では、変数値定義表部分４６は、変数名定義表部分４５と同一の構造を持ち、変数値定義表部分４６内の各セルは、変数名定義表部分４５内の一つのセルに１対１に対応し、変数値定義表部分４６内の各セルは、変数名定義表部分４５内の対応するセルの属性と同じ属性を持つ。その結果、変数名定義表部分４５内の複数のセルが互いに結合された結合セルであるときには、当該複数のセルに対応する変数値定義表部分４６内の複数のセルも互いに結合された結合セルとなる。したがって、変数値定義表部分４６内の上位側の変数の変数値を記憶する上記特定の関係にある複数のセルは、変数名定義表部分４５と同じく、結合されたセルであることになる。同様に上記上位側の変数より下位の変数の変数値を記憶する複数のセルと、上記上位側の変数のいずれかの変数値を記憶するセルとの間の上記特定の位置関係も変数名定義表部分４５の場合と同じである。
【００６９】
より具体的には、図３に示すように、変数値“栃木ビル”は、第１の列内の５つのセルからなるセル群４６２に関連付けて記憶され、変数値“１階”と“２階”は、“栃木ビル”が記憶されているセル群４６２より右側の列に属し当該セル群４６２が属する５つの行の一部に属している３つのセルからなるセル群４６３と２つのセルからなるセル群４６４にそれぞれ関連付けて記憶されている。変数値定義表部分４６には、１階と２階という２つの階が記憶されるので、図２に示したように、変数名定義表部分４５でも変数名“階”は２個記憶されていた。
【００７０】
１階の店に関する店名の変数値と場所の変数値は、変数値“１階”が記憶されているセル群４６３が属する第２の列より右側に位置する第３と第４の列又は第５と第６の列に属し当該セル群４６３が属する３つの行のいずれかに属しているセル４６５Ａ、４６５Ｂ、…、４６６Ａ、４６６Ｂ…に記憶されている。２階の店に関する店名の変数値と場所の変数値についても、同様に、変数値“２階”を記憶する第２列内のセル群４６４の右側のセル４６７Ａ、４６７Ｂ、…、４６８Ａ、４６８Ｂ、…に記憶されている。
【００７１】
図１１はテンプレートプログラム４７、４８の例を示す図である。テンプレートプログラム４７、４８、…は、変数名定義表部分４５に保持された複数の変数のうち処理すべき変数を指定し、当該複数の変数に対して実行すべき特定の処理を指定するものである。テンプレートプログラム４７、４８等は、複数の表データ処理指定用プログラム文を使用するプログラムであり、アプリケーションプログラムを記述するのに通常使用される汎用プログラムより簡単に表データに対する処理を記述できる表データ処理指定用のプログラム言語で記述され、表データ処理指定用プログラムと呼ぶことができる。テンプレートプログラム４７又は４８は、特定の変数名定義表部分４５に含まれた複数の変数に対して実行すべき処理を指定する。したがって、テンプレートプログラム４７又は４８は、特定の変数名定義表部分４５に対応して生成される。しかし、変数名定義表部分４５内に登録された変数の数が異なっても、同じテンプレートプログラム４７を使用できる。例えば、図２において、変数名“階”、“店名”、“場所”の数が変更されても、同じテンプレートプログラム４７又は４８お使用することができる。
【００７２】
なお、後に説明するように、テンプレートプログラム４７又は４８、…を用いて、当該テンプレートプログラム４７又は４８が指定する処理を実行する、汎用のプログラム言語で記述されたアプリケーションプログラムが生成される。上記テンプレートプログラム４７又は４８が当該他の汎用プログラム言語で記述されている他のプログラム部分を含んでいてもよい。そのようなプログラム部分はそのまま処理されずに、生成されるアプリケーションプログラムに含められるようになっている。
【００７３】
テンプレートプログラム４７等には、表データ処理用の、＠＠、＃＃で囲まれた文字列が埋め込まれたプログラム文（表データ処理指定用プログラム文）が含まれている。この埋め込み部分は、最終的には、変数値定義表部分４６内の該当する変数値に置換される。埋め込みのキーワードは、＠＠変数＿ｓ＠＠、＠＠ＬＯＯＰ＿ｓ（変数）＠＠、＠＠ＥＮＤ＠＠、＃＃変数＃＃等からなる。ここで、添え字“＿ｓ”は、ループ処理を区別するためのループ番号である。変数は、変数名定義表部分４５に変数名が記憶されている変数、若しくは、ある変数の上位側の変数とピリオド“．”を用いて当該変数を修飾したものである。＃＃変数＃＃は、一つの変数値しか採らない変数の変数値を指定するときに使用される。例えば、図２では、変数名“ビル名”がこれに該当する。＠＠変数＿ｓ＠＠は、＠＠ＬＯＯＰ＿ｓ（変数）＠＠と＠＠ＥＮＤ＠＠とで囲まれるブロック内に記述され、同じ変数名の変数値が複数個あるときにループ切り替え毎に順次異なる変数値を使用することを指示する。
【００７４】
＠＠ＬＯＯＰ＿ｓ（変数）＠＠と＠＠ＥＮＤ＠＠とで囲まれるブロックは、変数名定義表部分４５で当該変数と同じ変数名が記憶されているセルの数だけ繰り返される。繰り返しは、あらかじめ定められた順番にしたがって行われる。例えば、列座標の昇順、行座標の昇順という優先順位に従い順次行う。すなわち、まず、上記指定された変数と同じ変数名を記憶する複数のセルのうち、最も左側の列（最も列座標が小さい列）に属する複数のセルについて上のほうのセル（行座標が最も小さいセル）から順次選択し、セルが選択される毎に、選択されたセルに対応する変数値定義表部分４６内の変数値について上記ブロック内の処理を行う。その後上記列の右側に位置する最も近い列に属する複数のセルについて同じようにして上記ブロック内の処理を繰り返す。
【００７５】
この繰り返しの際に、上記ブロック内に記述されている＠＠変数＿ｓ＠＠は、変数名定義表部分４５内の処理中の変数に対する変数名が記憶されているセルの座標に対応する、変数値定義表部分４６内の座標にあるセルに記憶されている変数値に置換される。
【００７６】
＠＠ＬＯＯＰ＿ｓ（変数）＠＠内の“変数”はループ繰り返しを制御する変数であり、以下ではループ変数あるいはループ制御変数と呼ぶ。＠＠ＬＯＯＰ＿ｓ（変数）＠＠はネスト可能であり、添え字“ｓ”でループ変数を区別する。多重ループ内の下位（すなわち、より内側）のループのループ変数は、下位のループのブロック内では必ず上位（すなわち、より外側の）ループのループ変数で修飾される。＠＠変数＿ｓ＠＠内の“変数＿ｓ”が、“変数１．変数２．変数＿ｓ”のように、ピリオド“．”を介して上位側の他の変数により修飾されている変数の場合には、修飾している上位側の変数の変数名を保持する変数名定義表部分４５内のセルの結合方向により、修飾されている下位側の変数の変数名を保持する変数名定義表部分４５内のセル及び当該セルに対応する変数値定義表部分４６内のセルが変化する。
【００７７】
すなわち、修飾している上位側の変数を保持するセルの結合方向が列方向である場合には、修飾している上位側の変数名を記憶するセルより、列座標の大きなセルであって、修飾されている下位側の変数名を記憶している変数名定義表部分４５内のセルに対応する、変数値定義表部分４６内の変数値が、上記＠＠変数＿ｓ＠＠で指定された変数値として使用される。一方、修飾している上位側の変数を保持するセルの結合方向が行方向である場合には、修飾している上位側の変数名を記憶するセルより、行座標の大きなセルであって、修飾されている下位側の変数名を記憶している変数名定義表部分４５内のセルに対応する、変数値定義表部分４６内の変数値が上記＠＠変数＿ｓ＠＠で指定された変数値として使用される。なお、変数が“変数１．変数２．・・・変数ｎ”のように、（ｎ−１）個の変数を用いて変数ｎが修飾されている場合において、以下で変数ｎの修飾部とは、“変数１．変数２．・・・変数（ｎ−１）”という、変数ｎを修飾する部分を指す。
【００７８】
図１１図（ａ）は、テンプレートプログラム４７の例として、テンプレートプログラム“Ｐｌａｃｅ”を示している。このテンプレートプログラム“Ｐｌａｃｅ”は、あるビルの特定の階と特定の店の場所が指定されたとき、変数値定義表部分４６内の該当する店の店名を呼び出し元に戻すという処理を行うことを指示する。図において、プログラム文４７０は、このテンプレートプログラム４７から生成される処理プログラムの名称が“Ｐｌａｃｅ”であり、このプログラム“Ｐｌａｃｅ”の型は文字列であり、このプログラムの呼び出しに使用する引数が文字列型の引数“ｓ”であることを宣言するプログラム文である。
【００７９】
プログラム文４７１は、変数名“階”の変数の異なる値について、同じ処理の繰り返しを指示するループ処理指定文である。文字列ＬＯＯＰの添え字“＿１”は、このループ処理のループに割り当てられた番号が１番であることを示す。このように、ループ処理指定文は、“＠＠ＬＯＯＰ＿１（変数名）＠＠”という構造であり、変数名とループ番号を指定するだけでよく、非常に簡単にループ処理を指定することができる。ループの繰り返し回数を指定するインデックスも、その初期値も、その刻みも、その最終値も指定する必要はない。ループの繰り返しは、ループ処理指定文４７１により指定される変数が採りうる変数値の数だけ実行される。したがって、この変数を、ループ処理を制御する変数あるいはループ制御変数と呼ぶことができる。
【００８０】
プログラム文４７２は、第２のループ処理指定文であり、ループ処理指定文４７１が外側のループ処理を指定するのに対して、ループ処理指定文４７２は最内側のループ処理を指定する。ここでは、ループ制御変数として“階＿１．場所”が指定されている。このうち“階＿１”は、ループ番号１のループ処理により現在指定されている変数“階”の変数値（具体的には、“１階”又は“２階”）を意味し、変数“階＿１．場所”は、その“階”の変数値の下位にある変数“場所”の変数値に対して第２のループ処理を繰り返すことを指定している。この結果、第１のループで変数“階”の複数の変数値（具体的には“１階”、“２階”）が順次選択され、各選択された階の変数値の下位にある、変数“場所”の異なる変数値について内側のループ内の処理が繰り返されることになる。
【００８１】
このように、外側のループ番号を付加された、当該外側のループを制御する上位側の変数の変数名でもって、内側のループを制御する下位側の変数の変数名を修飾して当該内側のループに対するループ制御変数を指定することにより、内側のループ処理を繰り返す下位側の変数の変数値の範囲を、上位側の変数の複数の変数値のそれぞれに対して下位側の変数が取りうる複数の変数値となるように指定することができる。
【００８２】
プログラム文４７３は、条件判定するｉｆ文であり、ここでは、プログラム“Ｐｌａｃｅ”の呼び出しに使用された引数“ｓ”が変数値“＠＠階＿１．場所＿２＠＠”に等しいか否かが判定されている。ここで、ｉｆ文内の変数のうち、“場所＿２”は、第２の内側のループで選択されている変数“場所”の変数値を意味し、変数値“＠＠階＿１．場所＿２＠＠”は、第１の外側のループで選択されている変数“階”の変数値の下位側にある、変数“場所”の複数の変数値のうち、当該内側のループで現に選択されているいずれかの変数値を意味する。
【００８３】
プログラム文４７４は、ｉｆ文４７３により条件が成立したと判定された場合には、変数値“＠＠階＿１．店名＿２＠＠”を戻り値として呼び出し元に戻してプログラムを終了することを指示するリターン文である。ここで、変数値“＠＠階＿１．店名＿２＠＠”は、第１の外側のループで選択されている変数“階”の変数値の下位側にある、変数“場所”の複数の変数値のうち、当該内側のループで現に選択されているいずれかの変数値に対応する、当該変数“場所”と同じ階層にある変数“店名”の変数値を意味する。こうして、プログラム“Ｐｌａｃｅ”の呼び出し元が呼び出し時に指定した引数“ｓ”と一致する場所にある店の店名が戻り値として呼び出し元に戻されることになる。
【００８４】
実際には、後に説明するように、テンプレートプログラム４７に埋め込まれた＠＠マークを使用する変数の値が埋め込まれた中間コードプログラム９０又は９１が最初に生成され、中間コードプログラム９０又は９１からアプリケーションプログラム１００が生成される。中間コードプログラム９０等は、一時ファイルである。そのアプリケーションプログラム１００に残るｉｆ文がプログラムとしての意味を持つことになる。なお、４７５はｉｆ文４７３の終了を示す記号であり、プログラム文４７６と４７７は、それぞれ内側ループと外側ループの終わりを示すループ終了指定文であり、４７８は、プログラム“Ｐｌａｃｅ”の末尾を示す記号である。
【００８５】
図１１（ｂ）は、他のテンプレートプログラム４８の例として、、テンプレートプログラム“ＳｈｏｐＬｉｓｔ”を示している。テンプレートプログラム“ＳｈｏｐＬｉｓｔ”は、呼び出されたときにいずれかの変数値定義表部分４６に保持されたビル名とそのビル内に存在するすべての店の店名との配列を、呼び出し元に戻すという処理を行うことを指示する。
【００８６】
同図において、プログラム文４８０は、このテンプレートプログラム４８から生成される処理プログラムの名称が“ＳｈｏｐＬｉｓｔ”であり、このプログラム“ＳｈｏｐＬｉｓｔ”の型は文字列の配列であり、このプログラムの呼出しに使用する引数はないことを宣言するプログラム文である。プログラム文４８１は変数ｉの型が整数型であることを宣言するプログラム文であり、プログラム文４８２は変数ｓの型が文字列の配列であることを宣言するプログラム文である。
【００８７】
プログラム文４８３は、配列ｓの第０要素として、変数値“＃＃ビル名＃＃”を代入することを指示するプログラム文である。ここで、変数値“＃＃（変数）＃＃”は、変数名“ビル名”のように、変数値が一つしかない変数の当該変数値を指定するのに使用される。プログラム文４８４は、変数ｉの初期値として１を設定するプログラム文である。プログラム文４８５は、ループ制御変数として“店名”を指定する第１のループ処理指定文である。プログラム文４８６は、配列ｓの第ｉ要素として、変数値“＠＠店名＿１＠＠”を代入することを指示するプログラム文である。ここで、変数値“＠＠店名＿１＠＠”は、第１のループで選択されている変数“店名”の変数値である。
【００８８】
プログラム文４８７は、変数ｉを１だけインクリメントするプログラム文である。プログラム文４８８は、ループの終了を指示するプログラム文である。プログラム文４８９は、変数ｓを呼び出し元に戻り値として戻すことを指示するプログラム文である。こうして、ビル名と各店舗名とを含む配列ｓが呼び出し元に戻される。なお、プログラム文４９０は、プログラム“ＳｈｏｐＬｉｓｔ”の末尾を示す記号である。
【００８９】
図１２は、定義対応情報４９の例を示す図である。定義対応情報４９は、変数名定義表部分名４９１、変数値定義表部分名４９２、テンプレートプログラム名４９３という３つのフィールドを含む。定義対応情報４９は、特定の名称の変数名定義表部分４５と特定の名称の変数値定義表部分４６との組に対して使用可能なテンプレートプログラムの名称を登録したものである。図の例では、“栃木ビル変数値表”という名称の変数名定義表部分４５と“栃木ビル変数名表”という名称の変数値定義表部分４６の組に対して、使用可能なテンプレートプログラムとして、図１１に例示した“Ｐｌａｃｅ”と“ＳｈｏｐＬｉｓｔ”が示されている。
【００９０】
図１３は、プログラム生成プログラム４０により生成されるアプリケーションプログラムの例を示す図である。図には、テンプレートプログラム４７と図２の変数名定義表部分４５と、図３の変数値定義表部分４６とから生成されるアプリケーションプログラム“Ｐｌａｃｅ”（１００）の例を示している。アプリケーションプログラム１００のプログラム名が“Ｐｌａｃｅ”であり、そのデータ型は文字型であり、いずれかの店の場所を示す文字型の引数ｓを受け取り、対応する店名を戻り値として呼び出し元に戻すプログラムである。
【００９１】
図１４は、プログラム生成プログラム４０により生成される他のアプリケーションプログラムの例を示す図である。図には、テンプレートプログラム４８と図２の変数名定義表部分４５と、図３の変数値定義表部分４６とから生成されるアプリケーションプログラム“ＳｈｏｐＬｉｓｔ”（１０１）の例を示す。アプリケーションプログラム１０１のプログラム名は“ＳｈｏｐＬｉｓｔ”であり、そのデータ型は文字型であり、呼び出し時には引数を要求せず、戻り値としてビル名と全ての店の店名を含む配列ｓを戻すプログラムであり、このプログラム１０１もＣ言語で記述されていることが分かる。
【００９２】
プログラム生成プログラム４０を使用してアプリケーションプログラムを生成しようとする利用者は、プログラム生成プログラム４０内の情報編集部８０又は一般の表計算プログラムを使用して変数名定義表部分４５に対応する変数値定義表部分４６を生成しで、定義対応情報４９内に使用する変数名定義表部分４５の名称と変数値定義表部分４６の名称と、それらの情報からアプリケーションプログラムを生成するための少なくとも一つのテンプレートプログラム４７又は４８を登録したうえで、使用する変数名定義表部分４５の名称を指定してプログラム生成プログラム４０のプログラム生成機能を呼び出す。
【００９３】
プログラム生成プログラム４０は、指定された名称を有する変数値定義表部分４６に対応して使用可能な変数名定義表部分４５の名称とテンプレートプログラム４７又は４８の名称が定義対応情報４９に記憶されているときには、利用者により指定された名称の変数値定義表部分４６に対応して定義対応情報４９にそれぞれ記憶された名称の変数名定義表部分４５とテンプレートプログラム４７又は４８を使用して対応するアプリケーションプログラム１００又は１０１を生成する。利用者により指定された名称の変数値定義表部分４６とそれに対応する変数名定義表部分４５の名称の組に対して複数のテンプレートプログラム４７、４８、…が定義対応情報４９に記憶されているときには、プログラム生成プログラム４０は、それぞれのテンプレートプログラム４７、４８、…を使用してそれぞれに対応する複数のアプリケーションプログラム１００、１０１、…を自動的に続けて生成する。
【００９４】
図１５は、テンプレートプログラム選択部５０の概略フローチャートである。図１に示したように、プログラム生成プログラム４０は、テンプレートプログラム選択部５０、テンプレートプログラム解析部６０、アプリケーションプログラム出力部７０よりなる。テンプレートプログラム選択部５０は、プログラム生成プログラム４０によるプログラム生成機能が利用者により呼び出されたときに最初に呼び出される。テンプレートプログラム選択部５０は、呼び出されると、利用者が指定した変数値定義表部分４６の名称に基づいて、当該変数値定義表部分４６の名称に対応して記憶された変数名定義表部分４５の名称とテンプレートプログラム４７又は４８の名称を定義対応情報４９から検索する（ステップＳ５０１）。
【００９５】
以下では、利用者が指定する変数名定義表部分は、図３に例示された変数値定義表部分４６の名称“栃木ビル変数値表名”であると仮定し、当該変数値定義表部分４６に対応する変数名定義表部分は、図２に示した変数名定義表部分４５であり、変数名定義表部分４５と変数値定義表部分４６の組に対して使用可能なテンプレートプログラムとして図１１に示したテンプレートプログラム４７と４８が使用可能であると仮定して説明する。
【００９６】
ステップＳ５０１で両方の名称の検索が成功したとき（ステップＳ５０２でＹｅｓ）、テンプレートプログラム解析部６０を呼び出し、利用者が指定した変数値定義表部分４６の名称と定義対応情報４９に記憶されている対応する変数名定義表部分４５の名称と対応するテンプレートプログラム、例えば４７の名称を引き渡し、当該名称のテンプレートプログラム４７を解析させる。
【００９７】
テンプレートプログラム解析部６０による処理が終了したときに、再度ステップＳ５０１とＳ５０２を繰り返す。この場合、ステップＳ５０１の繰り返し時には、利用者が指定した変数値定義表部分４６の名称と先にステップＳ５０１を行ったときに既に定義対応情報４９から検索された、対応する変数名定義表部分４５の名称との組に対して登録されている他の未使用のテンプレートプログラムの名称を定義対応情報４９から検索する。未使用のテンプレートプログラム、例えば４８の名称が登録されているときには、当該他のテンプレートプログラム４８に関してもアプリケーションプログラムを生成するようにテンプレートプログラム解析部６０を再度呼び出す。
【００９８】
こうして、変数名定義表と変数値定義表の同じ組に対して複数のテンプレートプログラムが登録されている場合には、利用者が変数値定義表を一度指摘するだけで、当該変数値定義表に対応付けられた複数のテンプレートプログラムに対して複数のアプリケーションプログラムが続けて生成され、利用者にとって便利である。更に、後に説明するように、変数値定義表あるいは変数名定義表を変更した等の理由にによりアプリケーションプログラムを再生成する場合、新規のアプリケーションプログラムを生成する場合と同じ手順に従えばよく、その場合には修正後の複数のアプリケーションプログラムをまとめて生成することができる。
【００９９】
なお、ステップＳ５０１が最初に実行されたときあるいは後に繰り返されたときに、未使用の利用可能な変数値定義表部分の名称あるいはテンプレートプログラムの名称が定義対応情報４９に登録されていないと判明したときには、テンプレートプログラム選択部５０は処理を終える。
【０１００】
図１６は、テンプレートプログラム解析部６０の概略プログラムブロック図である。テンプレートプログラム解析部６０は、テンプレートプログラム選択部５０から引き渡された名称のテンプレートプログラム４７、４８、…の解析を制御する解析制御部６１と、＃＃変数置換部６２と、構文解析部６３と、構文分解部６４と、ループ解析部６５とを含み、最終的に中間コードプログラム９０又は９１を生成し、アプリケーションプログラム出力部７０を呼び出し、当該中間コードプログラム９０又は９１を引き渡す。
【０１０１】
図１７は、解析制御部６１の概略フローチャートである。まず、テンプレートプログラム選択部５０から引き渡された名称のテンプレートプログラム、例えば４７を読み出し、図示していない作業領域に記憶し（ステップＳ６１１）、当該テンプレートプログラム４７の名称を指定して＃＃変数置換部６２を呼び出す。
【０１０２】
図１８は、＃＃変数置換部６２の概略フローチャートである。まず、上記作業領域内にあるテンプレートプログラムを一行ずつ読み込む（ステップＳ６２１）。読み込まれた一行内に＃＃変数＃＃が埋め込まれているか否かを判断する（ステップＳ６２２）。図１１（ａ）のテンプレートプログラム４７にはこのような変数は含まれていないが、同図（ｂ）のテンプレートプログラム４８には、＃＃ビル名＃＃が含まれている。
【０１０３】
作業領域から読み込まれたテンプレートプログラムの一行内にそのような変数が埋め込まれているときには（ステップＳ６２２でｙｅｓ）、当該変数の変数名が登録されている変数名定義表部分４５内のセル（テンプレートプログラム４８の場合には図２のセル４５２）の座標を検出し、当該セル４５２に対応する変数値定義表部分４６（図３）内のセル４６２に保持された変数値“栃木ビル”でもって、テンプレートプログラム４７内の上記＃＃変数＃＃の部分を置換する（ステップＳ６２３）。上記変数が引き渡されたテンプレートプログラムにないときには、ステップＳ６２３はスキップされる。読み出された一行がテンプレートプログラムの最終行か否かを判断し（ステップＳ６２４）、そうでないときには、以上の処理を繰り返し、最終行の処理が終了したときに＃＃変数置換部６２は終了し、処理は解析制御部６１（図１７）に戻る。
【０１０４】
図１７では、解析制御部６１は、その後、構文解析部６３を呼び出す。呼び出し時には、作業領域に記憶された上記テンプレートプログラムを解析ブロックとして指定する入力パラメータを引き渡す。
【０１０５】
図１９は、構文解析部６３の概略フローチャートである。構文解析部６３は、まず、呼び出し元から渡された解析ブロック（今の場合には、作業領域内のテンプレートプログラム）を読み込み（ステップＳ６３１）、構文分解部６４を呼び出し、読み込んだ解析ブロックを引き渡して分解させる。構文分解部６４は、引き渡された解析ブロックを構文解析して、ループ前情報、ループ部情報、ループ後情報とに分解する。
【０１０６】
図２０は、構文分解部６４の概略フローチャートである。構文分解部６４は、呼び出し元（今の場合には構文解析部６３）から引き渡された解析ブロックを取得し（ステップＳ６４０）、その解析ブロックを文頭から順次１行ずつ読み込む（ステップＳ６４１）。読み込まれた一行に＠＠ＬＯＯＰ＿ｓ（変数）＠＠型の埋め込みがあるか否かを判定する（ステップＳ６４２）。そのような埋め込みが含まれていない場合には、読み込んだ一行をループ前情報に追加する（ステップＳ６４３）。文末まで読み込んだか否かが判別され（ステップＳ６４４）、そうでない場合には、処理をステップＳ６４１に戻す。その後ステップＳ６４１、Ｓ６４２が繰り返される。
【０１０７】
ステップＳ６４２において、読み込んだ一行に上記の型の変数が含まれていると判断された場合には、ステップＳ６４０において取得した解析ブロックを今度は文末から一行ずつ読み込む（ステップＳ６４５）。読み込まれた一行が＠＠ＥＮＤ＠＠という埋め込みを含むか否かを判定し（ステップＳ６４６）、上記埋め込みが含まれていない場合には、読み込んだ一行をループ後情報に追加し（ステップＳ６４７）、処理をステップＳ６４５に戻す。
【０１０８】
ステップＳ６４６で、＠＠ＥＮＤ＠＠が含まれていると判定された場合には、上記＠＠ＬＯＯＰ＿ｓ（変数）＠＠型の埋め込みを含む行から上記＠＠ＥＮＤ＠＠という埋め込みを含む行までをループ部情報に格納する（ステップＳ６４８）。その後、既に生成されたループ前情報、ループ部情報、ループ後情報とを含む出力パラメータを呼び出し元（今の場合には構文解析部６３）に出力し（ステップＳ６４９）、構文分解部６４の処理が終了する。なお、ステップＳ６４４において、文末まで読み込まれたと判断された場合も、ステップＳ６４９の処理が実行されて、その後、構文分解部６４の処理が終了する。
【０１０９】
図２１は、呼び出し元の構文解析部６３から呼び出された結果として構文分解部６４が出力する出力パラメータの例をいくつか示す図である。同図（ａ）と（ｂ）は、解析制御部６１が構文解析部６３を呼び出し、その結果、構文解析部６３が構文分解部６４を呼び出した場合において、構文解析部６３が構文分解部６４に引き渡した解析ブロックに含まれたテンプレートプログラムが、図１１（ａ）、（ｂ）に示すテンプレートプログラム“Ｐｌａｃｅ”と“ＳｈｏｐＬｉｓｔ”の場合について構文分解部６４が出力する出力パラメータの内容の例を示す。図２１（ｃ）から（ｅ）は、後に説明する。
【０１１０】
テンプレートプログラムが、テンプレートプログラム“Ｐｌａｃｅ”のように２重ループを含んでいるときには、構文分解部６４は、図２１（ａ）から分かるようにループ部情報としてこの２重ループ部分を出力する。一方、テンプレートプログラムが、テンプレートプログラム“ＳｈｏｐＬｉｓｔ”のように１重ループしか含まないときには、構文分解部６４は、図２１（ｂ）から分かるようにループ部情報としてこの１重ループ部分を出力する。
【０１１１】
図１９に戻り、構文分解部６４の処理が終了すると、構文解析部６３は、構文分解部６４から出力された出力パラメータに含まれるループ前情報、ループ部情報、ループ後情報を処理する。まず、構文分解部６４から出力された出力パラメータにループ前情報が含まれているか否かを判定し（ステップＳ６３２）、当該ステップＳ６３２においてループ前情報が含まれていると判定されたときには、ループ前情報を一行ずつ順次読み込み、読み込んだ各行を“ｐｒｉｎｔ”の引数にして中間コードプログラム９０又は９１に出力する（ステップＳ６３３）。
【０１１２】
その際、いずれかの行に、変数として＠＠マークを用いて埋め込まれた変数（例えば単独の変数（例えば＠＠変数＿ｓ＠＠）あるいは他の一つ又は複数の変数で修飾された変数（例えば＠＠変数１＿ｓ．変数２＿ｔ．・・・．変数ｎ＿ｕ＠＠））があれば、その＠＠マークを用いて埋め込まれた変数を、その変数の複数の変数値のうちのｉ番目の変数値でもって置換することを指示する中間コード“＾＾ＧＥＴ（変数［ｉ＿ｓ］）＾＾”又は“＾＾ＧＥＴ（変数１［ｉ＿ｓ］．変数２［ｉ＿ｔ］．・・・．変数ｎ［ｉ＿ｕ］）＾＾”により置換する。ここで、“ｉ”は、ループ繰り返し番号（ループ繰り返しインデックス）を表し、当該記号“ｉ”が付された変数［ｉ＿ｊ］は、当該変数がループ番号“ｊ”のループ繰り返し処理において、当該変数の第ｉ番目の変数値が処理されることを示す。また、“＾＾ＧＥＴ（変数［ｉ＿ｓ］）＾＾”関数あるいは“＾＾ＧＥＴ（変数１［ｉ＿ｓ］．変数２［ｉ＿ｔ］．・・・．変数ｎ［ｉ＿ｕ］）＾＾”関数は、当該関数内の変数の変数値を取得して、当該関数を置換することを指示する。
【０１１３】
図２２は、テンプレートプログラムから生成される中間コードプログラムの例を示す図である。同図（ａ）、（ｂ）は、それぞれテンプレートプログラムとして図１１に示されたテンプレートプログラム“Ｐｌａｃｅ”（４７）、“ＳｈｏｐＬｉｓｔ”（４８）を使用して、変数名定義表部分４５として図２に示す変数名定義表部分を使用したときに出力される中間コードプログラム９０、９１の例である。
【０１１４】
図１９の上記ステップＳ６３３では、使用中のテンプレートプログラムが図１１（ａ）に示されたテンプレートプログラム（Ｐｌａｃｅ）４７であるときには、当該テンプレートプログラム４７に対する構文分解の結果得られた図２１（ａ）に示されたループ前情報から図２２（ａ）に示す中間コード９０１が生成される。使用中のテンプレートプログラムが図１１（ｂ）に示されたテンプレートプログラム（ＳｈｏｐＬｉｓｔ）４８であるときには、当該テンプレートプログラム４８に対する図２１（ｂ）に示された構文分解の結果得られたループ前情報から図２２（ｂ）に示す中間コード９１１から９１５が生成される。
【０１１５】
図１９に戻り、構文解析部６３は、構文分解部６４から出力された出力パラメータにループ部情報があるか否かを判定し（ステップＳ６３４）、ステップＳ６３４においてループ部情報が含まれていると判断された場合には、ループ解析部６５を呼び出す、このとき、上記ループ部情報を解析ブロックに指定する入力パラメータを引き渡してループ解析を実行させる。
【０１１６】
図２３は、ループ解析部６５の概略フローチャートである。ループ解析部６５は、まず、入力パラメータであるループ部情報を取得する（ステップＳ６５１）。読み込んだループ部情報の先頭の一行を読み込み、その行内の＠＠マーク付きＬＯＯＰ文である“＠＠ＬＯＯＰ＿ｓ（変数）＠＠”を、中間コードの“ｆｏｒ”ループ制御命令である“ｆｏｒ　（ｉ＿ｓ，　＾＾ＣＯＵＮＴ（変数）＾＾）”で置換し、中間コードプログラム９０又は９１に追加する（ステップＳ６５２）。以下では“ｆｏｒ”ループ制御命令を簡単化のために単にｆｏｒ文と呼ぶ場合がある。ここで、“ｆｏｒ”ループ制御命令の第１の引数ｉ＿ｓはループ繰り返しインデックスであり、第２の引数“＾＾ＣＯＵＮＴ（変数）＾＾”は、ループ処理を繰り返すべき変数の名称と、変数値定義表部分４６に記憶されている当該変数の異なる変数値の数（要素数）である。このとき、上記変数が、“変数１＿ｓ．変数”のように他の変数で修飾された変数であるときには、上記“＾＾ＣＯＵＮＴ（変数）＾＾”関数内の変数として上記修飾された変数をそのまま用いる。
【０１１７】
“ｆｏｒ”ループ制御命令は、第１の引数ｉ＿ｓの値１から順次１ずつ増大し“ｆｏｒ”ループ制御命令から対応する末尾記号“｝”までのｆｏｒブロック内の処理を繰り返すことを指示する命令である。繰り返し回数は、第２の引数“＾＾ＣＯＵＮＴ（変数）＾＾”関数により与えられる。この関数は、当該変数の変数名と同じ変数名を記憶した変数名定義表部分４５内のセルの総数（要素数）を表す。
【０１１８】
上記ステップＳ６５２では、使用中のテンプレートプログラムが図１１（ａ）に示されたテンプレートプログラム（Ｐｌａｃｅ）４７であるときには、当該テンプレートプログラム４７に対する構文分解の結果得られた図２１（ａ）に示されたループ部情報から図２２（ａ）に示す“ｆｏｒ”ループ制御命令“ｆｏｒ（ｉ＿１，＾＾ＣＯＵＮＴ（階）＾＾）”（９０２）が生成される。使用中のテンプレートプログラムが図１１（ｂ）に示されたテンプレートプログラム（ＳｈｏｐＬｉｓｔ）４８であるときには、当該テンプレートプログラム４８に対する図２１（ｂ）に示された構文分解の結果得られたループ部情報から図２２に示す“ｆｏｒ”ループ制御命令“ｆｏｒ（ｉ＿ｓ，＾＾ＣＯＵＮＴ（変数）＾＾）”（９１６）が生成される。
【０１１９】
図２３に戻り、ループ解析部６５は、構文解析部６３を呼び出す。呼び出しにあたっては、解析ブロックとして、処理中の上記ループ部情報の残りの部分のうち末行にある＠＠ＥＮＤ＠＠を取り除いたブロックを解析ブロックとして含む入力パラメータを構文解析部６３に引き渡す。
【０１２０】
ループ解析部６５が構文解析部６３を呼び出したときの構文解析部６３の処理は後に述べる。ループ解析部６５は、構文解析部６３を呼び出し、そこでの処理が終ったときに、先に呼び出し元（今の場合は構文解析部６３）から取得したループ部情報内の最後の行にある＠＠ＥＮＤ＠＠を読み込み、“｝”により置換し、中間コードプログラム９０又は９１に追加し（ステップＳ６５３）、終了する。処理中のテンプレートプログラムが、それぞれ図１１（ａ）、（ｂ）に示されたテンプレートプログラム（Ｐｌａｃｅ）４７あるいはテンプレートプログラム（ＳｈｏｐＬｉｓｔ）４８であるときには、ステップＳ６５３により、図２２（ａ）又は（ｂ）に示した中間コードプログラム９０、９１にそれぞれ中間コード９０７、９１９を追加する。
【０１２１】
ループ解析部６５が構文解析部６３を呼び出したときの処理を以下に述べる。既に説明したように、構文分解部６４は、構文解析部６３から先に呼び出されたときに、図２１に示されたループ前情報、ループ部情報、ループ後情報を含む出力パラメータを既に出力していた。したがって、ループ解析部６５が構文解析部６３を呼び出すときに引き渡す解析ブロックは、処理中のテンプレートプログラムが、それぞれ図１１（ａ）、（ｂ）に示されたテンプレートプログラム（Ｐｌａｃｅ）４７あるいはテンプレートプログラム（ＳｈｏｐＬｉｓｔ）４８であるときには、図２１（ａ）又は（ｂ）に示されたループ部情報のうちの先頭と末行を除いた部分である。
【０１２２】
構文解析部６３は、図１９に示すように、ループ解析部６５から呼び出されると、既に述べた解析制御部６１から呼び出された場合と同じく、呼び出し元（今の場合にはループ解析部６５）から渡された解析ブロックを読み込み（ステップＳ６３１）、構文分解部６４を呼び出し、読み込んだ解析ブロックを構文分解部６４に引き渡し、そこで分解させる。構文分解部６４は、更に既に説明したように、図２０に示されたフローチャートに従って、呼び出し元の構文解析部６３から引き渡された解析ブロックを分解してループ前情報、ループ部情報、ループ後情報を得て、呼び出し元の構文解析部６３にこれらの情報を含む出力パラメータを戻す。
【０１２３】
図２１（ｃ）、（ｄ）は、構文解析部６３がループ解析部６５から呼び出され、その結果、構文分解部６４が構文解析部６３から呼び出されたときに、構文分解部６４が呼び出し元の構文解析部６３に出力する出力パラメータ内のループ前情報、ループ部情報、ループ後情報の例を示す。同図（ｃ）、（ｄ）は、処理中のテンプレートプログラムがそれぞれ図１１（ａ）、（ｂ）に示されたテンプレートプログラム（Ｐｌａｃｅ）４７あるいはテンプレートプログラム（ＳｈｏｐＬｉｓｔ）４８であるときの上記出力パラメータの内容の例を示す。
【０１２４】
処理中のテンプレートプログラムが図１１（ａ）に示されたテンプレートプログラム（Ｐｌａｃｅ）４７であるときには、構文分解部６４が呼び出し元のループ解析部６５に出力する出力パラメータには、図２１（ｃ）に示されるように、ループ部情報のみが含まれ、ループ前情報とループ後情報とは含まれない。処理中のテンプレートプログラムが図１１（ｂ）に示されたテンプレートプログラム（ＳｈｏｐＬｉｓｔ）４８であるときには、構文分解部６４が呼び出し元のループ解析部６５に出力する出力パラメータには、図２１（ｄ）に示されるように、ループ前情報のみが含まれ、ループ部情報とループ後情報とは含まれない。
【０１２５】
図１９に戻り、構文解析部６３は、構文分解部６４から上記出力パラメータを受け取ると、既に説明したように、構文解析部６３は、構文分解部６４から出力された出力パラメータに含まれるループ前情報、ループ部情報、ループ後情報を処理する。まず、構文分解部６４から出力された出力パラメータにループ前情報が含まれているか否かを判定し（ステップＳ６３２）、当該ステップＳ６３２においてループ前情報が含まれていると判定されたときには、ループ前情報を一行ずつ順次読み込み、読み込んだ各行を“ｐｒｉｎｔ”の引数にして中間コードプログラム９０又は９１に出力する（ステップＳ６３３）。
【０１２６】
処理中のテンプレートプログラムが、図１１（ａ）に示されたテンプレートプログラム（Ｐｌａｃｅ）４７であるときには、構文解析部６３が構文分解部６４から受け取った出力パラメータは、図２１（ｃ）にあるようにループ前情報を含まない。したがって、ステップＳ６３３では中間コードは何も生成されない。しかし、処理中のテンプレートプログラムが、図１１（ｂ）に示されたテンプレートプログラム（ＳｈｏｐＬｉｓｔ）４８であるときには、構文解析部６３が構文分解部６４から受信した出力パラメータは、図２１（ｄ）にあるようにループ前情報を含むので、上記ステップＳ６３３では、図２２（ｂ）の中間コード９１７と９１８が生成される。
【０１２７】
図１９に戻り、構文解析部６３は、構文分解部６４から出力された出力パラメータにループ部情報があるか否かを判定する（ステップＳ６３４）。処理中のテンプレートプログラムが、図１１（ｂ）に示されたテンプレートプログラム（ＳｈｏｐＬｉｓｔ）４８であるときには、構文解析部６３が構文分解部６４から受信した出力パラメータは、図２１（ｄ）にあるようにループ前情報のみを含み、ループ部情報を含まないので、上記ステップＳ６３４では、ループ部情報がないと判断される。その後、ステップＳ６３５において、構文解析部６３が構文分解部６４から受け取った出力パラメータにループ後情報が含まれているか否かを判断する。今仮定しているように、構文解析部６３が構文分解部６４から受け取った出力パラメータが、図２１（ｄ）にあるようにループ後情報を含まない場合には、ループ解析部６５から呼び出されたときの構文解析部６３の処理は終了する。ループ解析部６５は、その後、既に述べたようにステップＳ６５３（図２３）の処理を行い、終了する。
【０１２８】
ループ解析部６５の処理が終了すると、ループ解析部６５を呼び出した呼び出し元の構文解析部６３に処理が移る。処理中のテンプレートプログラムが図１１（ｂ）に示したテンプレートプログラム（ＳｈｏｐＬｉｓｔ）の場合には、この状態では、構文解析部６３は、解析制御部６１から呼び出され、呼び出し時に引き渡された解析ブロックは、テンプレートプログラム４８であり、構文解析部６３は、構文分解部６４からその解析ブロックに対する構文分解結果を受け取った後である。今の仮定では、図１１（ｂ）に示されたテンプレートプログラム（ＳｈｏｐＬｉｓｔ）４８に対して、図２１（ｂ）に示す構文分解結果を受けた状態にある。このような構文分解結果については、ステップＳ６３５においてループ後情報が含まれていると判断され、ステップＳ６３６において、ループ後情報を一行ずつ順次読み込み、各行を“ｐｒｉｎｔ”の引数にして中間コードプログラム９１に追加して、処理が終わる。こうして、図２２（ｂ）内の中間コード９２０、９２１が生成される。
【０１２９】
構文解析部６３の処理が終了すると、処理は解析制御部６１（図１７）に戻る。こうして、処理中のテンプレートプログラムが図１１（ｂ）に示したテンプレートプログラム（ＳｈｏｐＬｉｓｔ）の場合のように、単一ループを含むテンプレートプログラムに対する中間コードプログラム９１の生成が終了する。解析制御部６１は、処理が中間コードプログラム９１を引数として指定してアプリケーションプログラム出力部７０を呼び出し、その処理も終了する。
【０１３０】
以上では、処理中のテンプレートプログラムが図１１（ｂ）に示したテンプレートプログラム（ＳｈｏｐＬｉｓｔ）の場合について、最初に解析制御部６１が構文解析部６３を呼び出し、その結果として構文解析部６３が構文分解部６４を呼び出し、構文分解部６４から出力された出力パラメータにループ部情報があるために、構文解析部６３がループ解析部６５を呼び出した後に、ループ解析部６５が上記ループ部情報の先頭行と末行を除いた部分を解析ブロックに指定して構文解析部６３を呼び出し、その結果、構文解析部６３が、構文分解部６４を呼び出した。構文分解部６４から得られた構文分解結果情報がループ部分を含まず、ループ前情報のみを含むので、構文解析部６３は、このループ前情報のみを処理した。
【０１３１】
しかし、処理中のテンプレートプログラムが図１１（ａ）に示したテンプレートプログラム（Ｐｌａｃｅ）の場合には、構文分解部６４から得られた上記構文分解結果情報は、図２１（ｃ）に示すように、ループ部情報を含んでいる。この場合、構文解析部６３がループ解析部６５により呼び出された後のステップＳ６３４（図１９）では、ループ部情報があると判断され、ループ解析部６５が再度呼び出されることになる。このとき構文解析部６３はループ解析部６５に対する入力パラメータにより上記ループ部情報を解析ブロックに指定する。こうして、ループ解析部６５は、内側のループ部分について、図２３に示されたステップＳ６５１、Ｓ６５２を実行する。ステップＳ６５２では、今の場合、図２２（ａ）の“ｆｏｒ”ループ制御命令９０３が生成され、後にステップＳ６５３により対応する記号９０６が生成される。
【０１３２】
ループ解析部６５は、上記ループ部情報の先頭行と末行を除いた部分を解析ブロックに指定して、構文解析部６３を呼び出す。今の例では、解析ブロックは、図２１（ｃ）に示したループ部情報の内の先頭行と末行を除いた部分である。構文解析部６３は、呼び出されると、図１９に示したように、ステップＳ６３１で呼び出し元から引き渡されアプリケーションプログラム解析ブロックを読み込み、構文分解部６４を呼び出す。このとき、解析ブロックとして、ループ解析部６５から受信した解析ブロックがそのまま使用される。その結果、構文分解部６４は、例えば図２１（ｅ）に示す構文分解結果を構文解析部６３に戻すことになる。この構文分解結果では、ループ前情報のみが含まれ、ループ部情報とループ後情報は含まれない。したがって、構文解析部６３は、ステップＳ６３３により、上記ループ前情報に含まれた２行に対応して、図２２（ａ）の中間コード９０４と９０５を生成して終了する。
【０１３３】
こうして、構文解析部６３が終了すると、処理は呼び出し元のループ解析部６５に戻り、ループ解析部６５（図２３）は既に述べたように、ステップＳ６５３により、図２２（ａ）内の記号９０６を生成して終了し、処理は、構文解析部６３に戻り、ループ解析部６５で処理されたループ情報（今の仮定では図２１（ｃ）に示されたループ部情報）のループ後情報があるときには、ステップＳ６３６（図１９）で処理する。しかし、今の例では、そのようなループ後情報がないので、構文解析部６３は終了する。構文解析部６３が終了すると、元の呼び出し元のループ解析部６５に処理が戻る。ループ解析部６５（図２３）は既に述べたように、ステップＳ６５３により、図２２（ａ）内の記号９０７を生成して終了し、処理は、呼び出し元の構文解析部６３に戻り、ループ解析部６５で処理されたループ情報（今の仮定では図２１（ａ）に示されたループ部情報）のループ後情報があるときには、ステップＳ６３６（図１９）で処理する。今の例では、図２２（ａ）の中間コード９０８が生成され、構文解析部６３は終了する。
【０１３４】
構文解析部６３が終了すると、元の呼び出し元の解析制御部６１に処理が戻る。こうして、処理中のテンプレートプログラムが図１１（ａ）に示したテンプレートプログラム（Ｐｌａｃｅ）の場合のように、２重ループを含むテンプレートプログラムに対する中間コードプログラム９０の生成が終了する。解析制御部６１は、中間コードプログラムを引数として指定してアプリケーションプログラム出力部７０を呼び出して処理が終了する。こうしてテンプレートプログラム解析部６０の処理が終了する。
【０１３５】
図２４は、アプリケーションプログラム出力部７０の概略プログラムブロック図である。アプリケーションプログラム出力部７０は、出力制御部７１と、要素数取得部７２と、変数値取得部７３と、変数座標取得部７４とを含む。出力制御部７１は、中間コードプログラム９０、９１、…内の“ｆｏｒ”ループ制御命令内に引数として使用されている“＾＾ＣＯＵＮＴ（変数）＾＾”関数と、当該“ｆｏｒ”ループ制御命令及び“ｐｒｉｎｔ（引数）”命令内に使用されている“＾＾ＧＥＴ（変数）＾＾”関数と、当該“ｐｒｉｎｔ（引数）”命令自身等を処理して対応するアプリケーションプログラム１００、１０１を生成する。
【０１３６】
図２５は、出力制御部７１の概略フローチャートである。出力制御部７１は、構文解析部６３より出力された中間コードプログラム、例えば９０又は９１を読み込む（ステップＳ７１１）。読み込んだ中間コードプログラム９０又は９１内に“ｆｏｒ”ループ制御命令が含まれているか否かを判別する（ステップＳ７１２）。“ｆｏｒ”ループ制御命令が含まれているならば、最外部のｆｏｒブロックを読み込む。ｆｏｒブロックは、“ｆｏｒ”ループ制御命令から対応する末尾記号“｝”までの部分である。この際、中間コードプログラム９０又は９１に複数の“ｆｏｒ”ループ制御命令が含まれているならば、未処理のループ内の最外側のループを規定する“ｆｏｒ”ループ制御命令に対するｆｏｒブロックを読み込む（ステップＳ７１３）。以下の説明では、このときの“ｆｏｒ”ループ制御命令の第１の引数（ループ繰り返しインデックス）を“ｉ＿ｓ”と呼ぶことにする。
【０１３７】
“ｆｏｒ”ループ制御命令の第２引数の“＾＾ＣＯＵＮＴ（変数［ｉ＿ｓ］）＾＾”関数に関して、要素数取得部７２を呼び出して、上記ＣＯＵＮＴ関数で指定されている変数の要素数を取得させ、得られた要素数でもって当該第２引数を置換する。要素数は、当該変数の変数名と同じ変数名に対応する異なる変数値を記憶した変数値定義表部分４６内のセルの総数である。本実施の形態では、変数名定義表部分４５は、変数値定義表部分４６と１対１に対応するので、上記要素数は、上記変数の変数名と同じ変数名を記憶した変数名定義表部分４５内のセルの総数と等しい。
【０１３８】
なお、後に説明するように、最外周のループの内部のループに対する“ｆｏｒ”ループ制御命令に関するｆｏｒブロックを後に処理するときにも同様に要素数を要素数取得部７２に取得させるが、その場合には、“ｆｏｒ”ループ制御命令の第２引数は、“＾＾ＣＯＵＮＴ（変数１［ｉ＿１］．変数２［ｉ＿２］．…．変数ｎ［ｉ＿ｎ］）＾＾”関数という、他の変数で修飾された変数の関数である。その場合には、その修飾された変数の要素数を要素数取得部７２に取得させる。なお、得られた要素数でもって当該第２引数を置換することは変わらない。
【０１３９】
つぎに、ｆｏｒブロックのうち、先頭の“ｆｏｒ”ループ制御命令と対応する末尾記号“｝”を除いた、ｆｏｒブロック内部の中間コードを、インデックス“ｉ＿ｓ”の値を１から順次一つずつ増加させながら、“ｆｏｒ”ループ制御命令の第２引数で指定される上記要素数まで出力して、読み込んだｆｏｒブロックを置換する（ステップＳ７１４）。更に、出力された中間コード内にインデックス“ｉ＿ｓ”が付いた変数があれば、その変数のインデックスの値を順次［１］、［２］、…のように［１］から順次上記要素数までの値に書き替える（ステップＳ７１５）。
【０１４０】
図２６は、中間コードプログラム９０又は９１に対する出力制御部７１によるいくつかの処理途中結果を示す図である。同図（ａ）は、図２２（ａ）に示した中間コードプログラム９０の最外側のループに対する“ｆｏｒ”ループ制御命令について、以上に説明した図２５のステップＳ７１１からＳ７１５までの処理を実行した後に得られた中間コードプログラムを示す。図２２（ａ）の中間コードプログラム９０のうち、最外側のループに対する“ｆｏｒ”ループ制御命令９０２が指定する“＾＾ＣＯＵＮＴ（階）＾＾”に対して、後に説明するように、要素数取得部７２より、要素数“２”が変数“階”の要素数として変数名定義表部分４５から取得される。その結果、上記ステップＳ７１４では、中間コード９０３から９０５が２回出力され、ステップＳ７１５では、それぞれ内のインデックス“ｉ＿１”は、順次“１”、“２”に変更される。こうして図２６（ａ）に示す途中結果が得られる。
【０１４１】
図２６（ａ）内の中間コード群９０Ａは、最初の“ｆｏｒ”ループ制御命令について変数“階”が“階［１］”であるときの中間コード群である。中間コード９０３Ａから９０５Ａは、それぞれ図２２（ａ）内の中間コード９０３から９０５に対応するものであり、それぞれ“＾＾ＣＯＵＮＴ（階［１］．場所）＾＾”、“＾＾ＧＥＴ（階［１］．場所［ｉ＿２］）＾＾”、“＾＾ＧＥＴ（階［１］．店名［ｉ＿２］）＾＾”という関数を含んでいる。
【０１４２】
同様に、図２６（ａ）内の中間コード群９０Ｂは、最初の“ｆｏｒ”ループ制御命令について変数“階”が“階［２］”であるときの中間コード群である。中間コード９０３Ｂから９０５Ｂは、それぞれ図２２（ａ）内の中間コード９０３から９０５に対応するものであり、それぞれ“＾＾ＣＯＵＮＴ（階［２］．場所）＾＾”、“＾＾ＧＥＴ（階［２］．場所［ｉ＿２］）＾＾”、“＾＾ＧＥＴ（階［２］．店名［ｉ＿２］）＾＾”という関数を含んでいる。
【０１４３】
図２５に戻り、処理中のｆｏｒブロック内に内側ループに対する“ｆｏｒ”ループ制御命令がある場合には、以上の処理を内側のループに対する“ｆｏｒ”ループ制御命令について繰り返す。図２２（ａ）に示した中間コードプログラム“Ｐｌａｃｅ”の場合には、２重ループがあるので、図２５に示したステップＳ７１２からＳ７１５までが内側ループに関する“ｆｏｒ”ループ制御命令について繰り返される。今の場合、内側ループに関する“ｆｏｒ”ループ制御命令は、“＾＾ＣＯＵＮＴ（階［１］．場所）＾＾”関数と“＾＾ＣＯＵＮＴ（階［２］．場所）＾＾”関数とを含んでいる。
【０１４４】
後に説明するように、それぞれのＣＯＵＮＴ関数に対して要素数取得部７２により、“階［１］”に対する“場所”の要素数として“６”が取得され、“階［２］”に対する“場所”の要素数として“４”が取得される。したがって、上記内側のループに関しては、図２６（ａ）に示された中間コード９０４Ａ、９０５Ａが、インデックス“ｉ＿２”の値“１”から“６”に対して順次出力され、中間コード９０４Ｂ、９０５Ｂが、インデックス“ｉ＿２”の値“１”から“４”に対して順次出力され、出力された中間コード内の変数“場所［ｉ＿２］”、“店名［ｉ＿２］”等内のインデックス“ｉ＿２”は、順次“１”、“２”、“３”、…に変更される。
【０１４５】
図２６（ｂ）は、このように、図２６（ａ）に示された中間コードプログラム９０に対して上記ステップＳ７１２からＳ７１５を行って得られる中間コードプログラムを示している。図２６（ｂ）内の中間コード群９０Ａ１は、それぞれ内側の“ｆｏｒ”ループ制御命令について変数“場所”の値が“場所［１］”から“場所［６］”まであるときの中間コード群である。中間コード群９０Ａ１の中間コード９０４Ａ１、９０５Ａ１から９０４Ａ６、９０５Ａ６は、それぞれ図２６（ａ）内の中間コード９０４Ａから９０５Ａに対応するものであり、それらの中間コードは、“＾＾ＧＥＴ（階［１］．場所［１］）＾＾”、“＾＾ＧＥＴ（階［１］．店名［１］）＾＾”から“＾＾ＧＥＴ（階［１］．場所［６］）＾＾”、“＾＾ＧＥＴ（階［１］．店名［６］）＾＾”までのＧＥＴ関数を含んでいる。
【０１４６】
同様に、中間コード群９０Ｂ１の中間コード９０４Ｂ１、９０５Ｂ１から９０４Ｂ４、９０５Ｂ４は、内側の“ｆｏｒ”ループ制御命令についての変数“場所”が“場所［１］”から“場所［４］”までであるときの中間コード群である。中間コード群９０Ａ１の中間コード９０４Ｂ１、９０５Ｂ１から９０４Ｂ４、９０５Ａ４は、それぞれ図２６（ａ）内の中間コード９０４Ｂから９０５Ｂに対応するものであり、それらの中間コードは、“＾＾ＧＥＴ（階［２］．場所［１］）＾＾”、“＾＾ＧＥＴ（階［２］．店名［１］）＾＾”から“＾＾ＧＥＴ（階［２］．場所［４］）＾＾”、“＾＾ＧＥＴ（階［２］．店名［４］）＾＾”までのＧＥＴ関数を含んでいる。
【０１４７】
図２５に戻り、以上のようにして処理中のｆｏｒブロック内の内側ループに対する“ｆｏｒ”ループ制御命令に関する処理が終了したときには、中間コードプログラム９０内に他のループに対する他の“ｆｏｒ”ループ制御命令が含まれているか否かをチェックし、他の“ｆｏｒ”ループ制御命令が含まれている場合には以上の処理が繰り返される。図２６（ｂ）の例では、処理中の中間コードプログラムには他の“ｆｏｒ”ループ制御命令はないので、出力制御部７１は、変数値取得部７３を呼び出して、“ｐｒｉｎｔ（引数）”命令内に含まれた“＾＾ＧＥＴ（変数［１］）＾＾”あるいは“＾＾ＧＥＴ（変数１［ｉ］．変数２［ｊ］）＾＾”という“＾＾ＧＥＴ＾＾”関数の値を取得させ、当該関数を取得された関数値で置換させる。
【０１４８】
図２６（ｂ）に示された中間コードプログラムの場合には、“＾＾ＧＥＴ（階［１］．場所［１］）＾＾”から“＾＾ＧＥＴ（階［１］．場所［６］）＾＾”までと、“＾＾ＧＥＴ（階［２］．場所［１］）＾＾”から、“＾＾ＧＥＴ（階［２］．場所［４］）＾＾”までは、後に説明するように、変数値定義表部分４６（図３）内の“１Ａ”、“１Ｂ”、“１Ｃ”、“１Ｄ”、“１Ｅ”、“１Ｆ”、“２Ａ”、“２Ｂ”、“２Ｃ”、“２Ｄ”とにより置換される。“＾＾ＧＥＴ（階［１］．店名［１］）＾＾”から“＾＾ＧＥＴ（階［１］．店名［６］）＾＾”までと“＾＾ＧＥＴ（階［２］．店名［１］）＾＾”から“＾＾ＧＥＴ（階［２］．店名［４］）＾＾”までは、“ラーメン東京”、“ドラッグ千葉”、…“岩手人形”、“洋服の茨城”、…“山形家電”により置換される。
【０１４９】
出力制御部７１は、その後、中間コードプログラム９０内の複数の“ｐｒｉｎｔ（引数）”命令の引数をアプリケーションプログラムとして出力する。こうして、図１１（ａ）に示したテンプレートプログラム“Ｐｌａｃｅ”に対して、図１３に示したアプリケーションプログラム（Ｐｌａｃｅ）１００が、図２６（ｂ）に示された中間コードプログラムから生成される。
【０１５０】
図２６（ｃ）は、図１１（ｂ）に示したテンプレートプログラム“ＳｈｏｐＬｉｓｔ”に対して得られた図２２（ｂ）に示した中間コードプログラム９１を更に処理して得られた中間コードプログラムの要部を示している。ここでは、“＾＾ＧＥＴ＾＾”関数の引数は、“店名［１］”等の単独のインデックス付きの変数である。この図２６（ｃ）に示した中間コードプログラムから図１４に示したアプリケーションプログラム（ＳｈｏｐＬｉｓｔ）１０１が生成される。以下では、要素数取得部７２、変数値取得部７３、変数座標取得部７４の詳細を説明する。
【０１５１】
図２７は、要素数取得部７２の概略フローチャートである。図２５に示されたように、要素数取得部７２は出力制御部７１により呼び出される。要素数取得部７２は、呼び出されると、“ｆｏｒ”ループ制御命令内の第２の引数である“＾＾ＣＯＵＮＴ（変数）＾＾”関数内の変数に対応する要素数を取得して、取得された要素数でもって上記関数を置換する。具体的には、要素数取得部７２は、まず、“＾＾ＣＯＵＮＴ＾＾”の引数を読み込む（ステップＳ７２１）。つぎに、読み込まれた引数が修飾部を持つか否かを判定する（ステップＳ７２２）。ここで、修飾部とは、変数を修飾している他の少なくとも一つの変数を含む部分である。
【０１５２】
引数が修飾部を持たないのは、引数が単独の変数からなる場合であり、変数名定義表部分４５（図２）から、当該変数の変数名を記憶しているセルの総数を計数し、当該変数の要素数とし、“＾＾ＣＯＵＮＴ＾＾”関数自身を、この要素数で置き換える（ステップＳ７２３）。ただし、上記計数にあたっては、一群の結合されているセルは、一つのセルとして計数する。例えば、図２２の中間コード９０２内の“＾＾ＣＯＵＮＴ＾＾”関数の変数は、“階”のみである、修飾部はないので、ステップＳ７２３により、図２の変数名定義表部分４５の場合、変数名“階”を記憶しているセルの総数“２”を要素数として計数し、元の“＾＾ＣＯＵＮＴ＾＾”関数を得られた要素数“２”で置換する。
【０１５３】
図２７に戻り、ステップＳ７２２で修飾部があると判定された場合には、変数座標取得部７４を呼び出し、当該修飾部に対応するセルの座標と結合方向を取得する。例えば、図２６（ａ）の中間コード９０３Ａに含まれた“＾＾ＣＯＵＮＴ（階［１］．場所）＾＾”関数の場合には、変数“場所”に対して修飾部“階［１］”があるので変数座標取得部７４が呼び出される。図２の変数名定義表部分４５の場合、変数名“階”を有しインデックス［１］に対応する最初の結合セル４５３は、結合方向フラグとして“下方向”あるいは“上方向”を有するセルからなるので、変数座標取得部７４は、このようなセルからなる結合セルの結合方向を“列方向”として呼び出し元に戻す。
【０１５４】
更に、変数座標取得部７４は、結合セル４５３の座標として、当該結合セルを構成する複数のセルの座標（列座表，行座標）、具体的には（２，１）、（２，２）、（２，３）を呼び出し元に戻す。最初の結合セルの結合方向が“行方向”の場合には、“行方向”が戻され、結合セル４５３の座標として当該結合セルを構成する、行座標が同じである複数のセルのそれぞれの座標（列座表，行座標）が戻される。
【０１５５】
図２７に戻り、要素数取得部７２は、ステップＳ７２４において、変数座標取得部７４により取得された結合方向が列方向か行方向かを判断する。ステップＳ７２４において、変数座標取得部７４により取得された結合方向が列方向であると判断された場合、ステップＳ７２５において、使用中の変数名定義表部分４５内のセルのうち、修飾されている変数と同じ変数名を記憶し、列座標が取得された列座標より大きく、行座標が取得された複数のセルの行座標のいずれかに等しい複数のセルの数を要素数として計数し、その要素数でもって、“＾＾ＣＯＵＮＴ（変数）＾＾”を置換する。
【０１５６】
例えば、図２６（ａ）の中間コード９０３Ａに含まれた“＾＾ＣＯＵＮＴ（階［１］．場所）＾＾”関数の場合には、修飾部“階［１］”の座標は、上に述べたように列座標が同じである３つの座標であり、要素数取得部７２は、図２の変数名定義表部分４５上のセルのうち、修飾された変数“場所”と同じ変数名を記憶し、列座標が変数座標取得部７４により取得された修飾部の列座標より大きく、行座標が修飾部の複数の行座標のいずれかに等しい複数のセルの総数“６”を要素数として計数し、その要素数でもって、“＾＾ＣＯＵＮＴ（階［１］．場所）＾＾”を置換する。
【０１５７】
一方、図２６（ａ）の中間コード９０３Ｂに含まれた“＾＾ＣＯＵＮＴ（階［２］．場所）＾＾”関数の場合には、修飾部“階［２］”があり、変数座標取得部７４が呼び出され、変数座標取得部７４は、図２の変数名定義表部分４５の場合、変数名“階”を有する２番目の結合セル４５４の結合方向として“列方向”を戻し、更にセル座標として、結合セル４５４を構成する２つのセルの座標（２，４）、（２，５）を戻す。更に、要素数取得部７２は、ステップＳ７２５において、図２の変数名定義表部分４５上のセルのうち、修飾された変数“場所”と同じ変数名を記憶し、列座標が変数座標取得部７４により取得された修飾部の列座標より大きく、行座標が取得された複数のセルの行座標のいずれかに等しい複数のセルの総数“４”を要素数として計数し、その要素数でもって、“＾＾ＣＯＵＮＴ（階［２］．場所）＾＾”を置換する。
【０１５８】
なお、ステップＳ７２４において、変数座標取得部７４により取得された結合方向が“行方向”であると判断された場合、ステップＳ７２６において、使用中の変数名定義表部分４５内のセルのうち、修飾されている変数と同じ変数名の変数を記憶し、行座標が変数座標取得部７４により取得された行座標より大きく、列座標が変数座標取得部７４により取得された複数の列座標のいずれかに等しい複数のセルの数を要素数として計数し、その要素数でもって、“＾＾ＣＯＵＮＴ（変数）＾＾”を置換する。
【０１５９】
図２８は、変数値取得部７３の概略フローチャートである。７３は、既に説明したように、出力制御部７１により、“＾＾ＧＥＴ＾＾”関数の値を取得し、当該関数を置換するために使用される。変数値取得部７３は、まず“＾＾ＧＥＴ＾＾”関数の引数を全て読み込み（ステップＳ７３１）、その引数を指定して変数座標取得部７４を呼び出し、変数名定義表部分４５内のセルのうち、上記引数により定まるセルの座標と結合方向を取得させる。
【０１６０】
得られた座標に対応する、変数値定義表部分４６内のセルから変数値を読み出し、上記“＾＾ＧＥＴ＾＾”関数を取得された変数値で置換して終了する（ステップＳ７３２）。“＾＾ＧＥＴ＾＾”関数の引数は、図２６（ｂ）内の各中間コードのように他のインデックス付きの変数で修飾されたインデックス付きの変数の場合もあり、あるいは図２６（ｃ）に示されたように、他の変数で修飾されていない一つのインデックス付きの変数の場合もある。いずれの場合も、変数座標取得部７４で処理される。
【０１６１】
図２９は、変数座標取得部７４の概略フローチャートである。変数座標取得部７４は、要素数取得部７２により“＾＾ＣＯＵＮＴ＾＾”関数の引数に修飾部が含まれている場合に呼び出される。あるいは、“＾＾ＧＥＴ＾＾”関数の引数で示される変数の座標と結合方向を取得するのに変数値取得部７３により呼び出される。
【０１６２】
変数座標取得部７４は、呼び出されると、呼び出し側の“＾＾ＣＯＵＮＴ＾＾”関数又は“＾＾ＧＥＴ＾＾”関数の引数を読み込み（ステップＳ７４１）、読み込んだ引数内の一番左側にある変数名とインデックスを読み込む（ステップＳ７４２）。以下では、このインデックスの値を“ｊ”とする。
【０１６３】
変数座標取得部７４が、変数値取得部７３（図２８）により修飾部がある“＾＾ＧＥＴ＾＾”関数について呼び出された場合は、その修飾部の一番左側にある変数とインデックスとを取得することになる。例えば、図２６（ｂ）の中間コード９０４Ａ１にある“＾＾ＧＥＴ（階［１］．場所［１］）＾＾”関数の場合には、“階［１］”という変数とインデックスを取得することになる。同様に、変数座標取得部７４が、要素数取得部７２（図２７）により修飾部がある“＾＾ＣＯＵＮＴ＾＾”関数について呼び出された場合は、その修飾部の一番左側にある変数とインデックスとを取得することになる。例えば、図２６（ａ）の中間コード９０３Ａにある“＾＾ＣＯＵＮＴ（階［１］．場所［ｉ＿２］）＾＾”関数の場合には、“階［１］”という変数とインデックスを取得することになる。
【０１６４】
図２９に戻り、ステップＳ７４３では、変数名定義表部分４５内のセルのうち、上記変数と同じ名称を有する複数のセルがある場合には、当該複数のセルを列座標の昇順、行座標の昇順の優先順位で順序付けした場合に“ｊ”番目となるセルの座標（Ａ）と結合方向（Ｂ）を取得する。図２の変数名定義表部分４５の場合には、変数名“階”は２つの結合セル４５３，４５４に記憶されているので、上側の結合セル４５３が、インデックス値“１”に対応するセルとなる。
【０１６５】
図２９では、ステップＳ７４４において、上記一番左側の変数の右側にまだ変数が存在するか否かが判定される。例えば、図２６（ａ）の中間コード９０３Ａの“＾＾ＣＯＵＮＴ（階［１］．場所［ｉ＿２］）＾＾”関数の場合、修飾部が引数であり、修飾部は“階［１］”のみであり、その右にはもう変数はないことになる。このような場合には、変数座標取得部７４は処理が終了する。
【０１６６】
一方、図２６（ｂ）の中間コード９０４Ａ１の“＾＾ＧＥＴ（階［１］．場所［１］）＾＾”関数の場合には、“階［１］”という変数とインデックスの更に右側に変数“場所［１］”が含まれている。このような場合には、右側にある変数の変数名とインデックスを読み込む（ステップＳ７４５）。以下では、このインデックスの値を再度“ｊ”とする。更に、先にステップＳ７４３で取得されたセルの結合方向が列方向か否かが判定される（ステップＳ７４６）。ステップＳ７４６で結合方向が列方向であると判定された場合、ステップＳ７４７では、変数名定義表部分４５内のステップＳ７４５で取得されたセル座標Ａが示す列座標よりも大きな列座標を有し、上記座標Ｂに含まれる複数の行座標のいずれかを持ち、かつ上記変数と同じ変数名を記憶する複数のセルがある場合には、当該複数のセルを列座標の昇順、行座標の昇順の優先順位で順序付けした場合に“ｊ”番目となるセルの座標（改めてＡとする）と結合方向（改めてＢとする）を取得する。
【０１６７】
ステップＳ７４６で結合方向が行方向であると判定された場合、ステップＳ７４８では、変数名定義表部分４５内のステップＳ７４５で取得されたセル座標Ａが示す行座標よりも大きな行座標を有し、上記座標Ｂに含まれる複数の列座標のいずれかを持ち、かつ上記変数と同じ変数名を記憶する複数のセルがある場合には、当該複数のセルを行座標の昇順、列座標の昇順の優先順位で順序付けした場合に“ｊ”番目となるセルの座標（改めてＡとする）と結合方向（改めてＢとする）を取得する。
【０１６８】
その後、ステップＳ７４４に戻り、上記ステップＳ７４５で読み込まれた変数の右側にまだ変数が存在する限り、ステップＳ７４５とステップＳ７４７又はＳ７４８が繰り返され、上記ステップＳ７４５で読み込まれた変数の右側に変数が存在しないときには、処理は終了する。
【０１６９】
図３０は、変数名定義表部分４５内の同じ変数名を記憶する複数のセルの中かから所望のセルの座標を見つけるときのセルの選択の順序を説明するための図である。すなわち、変数名“階”を記憶するセルは、第２列にしか存在しないので、行座標の小さいものから順に“階［１］”、“階［２］”と順序付けられる。一方、変数名“店名”あるいは“場所”は、複数列と複数の行に記憶されている。
【０１７０】
図２６（ｂ）の中間コード９０４Ａ６にあるＧＥＴ関数の引数が“階［１］．場所［６］”のように、変数名“場所”が修飾されている場合、上位側の変数名“階［１］”の結合方向が列方向であるので、変数名“階［１］”の右側に位置するセルの中から、列座標の昇順、行座標の昇順にしたがい、図３０（ａ）に示すように、変数名“場所”を記憶するセルが順序付けられる。同様に、図２６（ｂ）の中間コード９０４Ｂ４にあるＧＥＴ関数の引数“階［２］．場所［４］”の場合、上位側の変数名“階［２］”の右側に位置するセルの中から、列座標の昇順、行座標の昇順で図３０（ａ）に示すように、変数名“場所”を記憶するセルが順序付けられる。
【０１７１】
しかし、図２６（ｃ）に示した中間コード９０６、９０７にあるＧＥＴ関数の引数“店名［１］”あるいは“店名［６］”のように、変数名“店名”が修飾されていない場合、図３０（ｂ）に示すように、変数名“店名”を記憶する複数のセルは、上位側の変数名“階”を記憶するセルの座標若しくはその中の結合方向に関係なく順序付けられる。
【０１７２】
こうして、図２６（ｂ）に示された中間コードプログラムの場合には、“＾＾ＧＥＴ（階［１］．場所［１］）＾＾”から“＾＾ＧＥＴ（階［１］．場所［６］）＾＾”までと、“＾＾ＧＥＴ（階［２］．場所［１］）＾＾”から、“＾＾ＧＥＴ（階［２］．場所［４］）＾＾”までは、変数値定義表部分４６（図３）内の“１Ａ”、“１Ｂ”、“１Ｃ”、“１Ｄ”、“１Ｅ”、“１Ｆ”、“２Ａ”、“２Ｂ”、“２Ｃ”、“２Ｄ”とにより置換される。“＾＾ＧＥＴ（階［１］．店名［１］）＾＾”から“＾＾ＧＥＴ（階［１］．店名［６］）＾＾”までと“＾＾ＧＥＴ（階［２］．店名［１］）＾＾”から“＾＾ＧＥＴ（階［２］．店名［４］）＾＾”までは、“ラーメン東京”、“ドラッグ千葉”、…“岩手人形”、“洋服の茨城”、…“山形家電”により置換される。同様に、図２６（ｃ）に示された中間コードプログラムの場合には、“＾＾ＧＥＴ（店名［１］）＾＾”から“＾＾ＧＥＴ（店名［１０］）＾＾”までが“ラーメン東京”から“山形家電”により置換される。
【０１７３】
図３０に例示したセルの順序付けの方法は、“＾＾ＣＯＵＮＴ＾＾”関数の場合にも同様に使用される。例えば、図２６（ａ）に示された中間コード９０３Ａ内の“＾＾ＣＯＵＮＴ＾＾”の引数“階［１］．場所”は、他の変数“階［１］”により修飾された変数名“場所”を含んでいるので、上記関数の値（要素数）は、図２の変数名定義表部分４５内の最初に“階”を記憶するセルの下位側（右側）にある変数名“場所”を記憶したセルの総数６となる。同様に、図２６（ａ）に示された中間コード９０３Ｂ内の“＾＾ＣＯＵＮＴ＾＾”の引数“階［２］．場所”は、他の変数“階［２］”により修飾された変数名“場所”を含んでいるので、上記関数の値（要素数）は、図２の変数名定義表部分４５内の２番目の“階”を記憶するセルの下位側（右側）にある変数名“場所”を記憶したセルの総数４となる。
【０１７４】
また、図２２（ｂ）に示された中間コード９１６内の“＾＾ＣＯＵＮＴ＾＾”関数の引数は、“店名”のみであり、他の変数で修飾されていない。このような場合、上記関数の値（要素数）は、図２の変数名定義表部分４５内の“階”を記憶するセルには関係なく、変数名“場所”を記憶したセルの総数１０となる。
【０１７５】
このように、“＾＾ＧＥＴ＾＾”及び“＾＾ＣＯＵＮＴ＾＾”関数については、変数の修飾部の形態、及び変数名定義表部分４５のセルの結合状態、セルの位置関係により、要素数とするセルの範囲あるいは、変数値定義表部分を取得するセルの位置を制限している。このように、変数名定義表部分４５から名称、及び上位クラスのグルーピング情報を表としての構造を解析することで、変数名間のクラス分けを識別することを可能にしている。例えば、テンプレートプログラム４７又は４８で“階．店名”とあった場合には、セルの結合状態が表す階要素のグルーピング情報を参照することで、その右側に位置する“店名”をそのグループに含まれる属性であることを認識する。また、“店名”とだけ指定した場合には、表内の全ての“店名”が独立の要素であるように処理される。つまりテンプレートに記述したクラス階層に応じた処理がなされ、逆に言うと、同じ表に対する様々な見方をテンプレートへの変数の記述によって分けることが可能となる。
【０１７６】
図３１は、情報編集部８０の概略プログラムブロック図である。情報編集部８０は、表編集部８１と、表変更監視部８２と、定義対応情報編集部８３とよりなる。定義対応情報編集部８３は、定義対応情報４９（図１２）の編集を行うためのものであり、変数名定義表部分４５、変数値定義表部分４６、テンプレートプログラム４７等の組を登録あるいは登録された組を変更するのに使用される。定義対応情報４９は、図１２に例示されたように、表からなるときには、定義対応情報編集部８３を使用しないで、表編集部８１により定義対応情報４９を登録、変更するのに使用することができる。
【０１７７】
表編集部８１は、一般の表計算プログラムと同じく、表構造を定義し、表を構成するセルに適当な値を記憶させる機能を有する。表内の複数のセルを結合して結合セルを生成することもできる。利用者は、通常の表計算プログラムと同様に、表編集部８１を操作して、変数名定義表部分４５と変数値定義表部分４６のそれぞれの構造を定義し、それぞれに変数名と変数値を記憶させることができる。本実施の形態では、変数名定義表部分４５と変数値定義表部分４６は、それぞれ内のセルが対応するように、列数、行数、結合セルの位置等に関して同じ構造にする。
【０１７８】
変数名定義表部分４５が、テンプレートプログラム４７、４８、…を開発するプログラム開発者あるいはアプリケーションプログラムを使用するシステム開発者によりあらかじめ作成されていて、変数名定義表部分４５もその者によりあらかじめ作成されている場合もある。そのような場合には、利用者は、表編集部８１を使用して、変数値定義表部分４６の構造を定義し、そこに変数値を記憶させればよい。利用者自身がテンプレートプログラム４７、４８、…を生成する場合には、利用者は、表編集部８１を使用して変数名定義表部分４５と変数値定義表部分４６のそれぞれの構造を定義し、それぞれに変数名と変数値を記憶させる必要がある。
【０１７９】
いずれの場合でも、本実施の形態では、その後、変数名定義表部分４５について利用者が変更を加えた場合、表変更監視部８２が、その変更を監視し、利用者が行った変更と同じ変更を変数名定義表部分４５に反映するようになっている。これにより、利用者は、変数値定義表部分４６を変更するときに、変数名定義表部分４５に対して必要となる変更を指示しなくてもよいようになっている。変数値定義表部分４６に対して利用者が行う変更には、行又は列の追加又は削除、セル結合の変更等がある。セルの結合の変更には結合セルの結合の解除、又は結合されていない複数のセルの結合などがある。結合の変更には、結合されている複数のセルへの新たなセルの結合、あるいは結合されているセルからの一部のセルの結合の解除などの他の変更態様を含んでいてもよい。
【０１８０】
図３２は、表変更監視部８２の概略フローチャートである。表変更監視部８２は、まず定義対応情報４９に登録されたいずれかの名称を有する変数値定義表部分４６に対して表編集部８１により変更がされたか否かを監視する（ステップＳ８２１）。監視の結果、いずれかの変数値定義表部分４６に対して変更がなされたことを検出すると、定義対応情報４９に基づいて、上記変更された変数値定義表部分４６に対応する変数名定義表部分４５の名称を検出し、当該名称の変数名定義表部分４５を読み込む（ステップＳ８２２）。ステップＳ８２１で検出した変更の内容を判別し（ステップＳ８２３）、その変更の内容に応じて以下の処理を行う。
【０１８１】
まず、変更が行又は列の追加の場合には、変数値定義表部分４６で追加した列又は行に対応する、変数名定義表部分４５内の位置に列又は行を追加する（ステップＳ８２４）。変更が列又は行の削除の場合には、変数値定義表部分４６内の削除された列又は行の位置に対応する、変数名定義表部分４５内の位置の列又は行を削除する（ステップＳ８２５）。変更が、複数のセルに関する結合の変更の場合には、例えば、複数の結合されたセルの結合の解除あるいは複数の結合されていないセルの新たな結合の場合には、変数値定義表部分で結合が変更された複数のセルの結合情報に合わせて、当該複数のセルに対応する変数名定義表部分４５内の複数のセルの結合情報を変更する（ステップＳ８２６）。最後に、変更が以上と異なる変更の場合、例えば、いずれかのセルに記憶された変数値の変更の場合には、変数名定義表部分４５は何も変更されないで、処理はステップＳ８２１に戻り、表変更監視部８２は、監視を継続する。
【０１８２】
変数値定義表部分４６に対して複数の変更が行われるときには、それぞれの変更に対応して変数名定義表部分４５に施すべき変更が決定される。例えば、列又は行の追加又は削除を行う場合、当該列又は行内のいずれかのセルが、当該列又は行とは異なる位置にある他のセルと結合している場合には、処理の簡単化のために、上記変更を行う前に、当該セルの結合を利用者に解除させるようにしてもよい。その場合には、セルの結合を解除し、その後、列又は行の追加又は削除を行い、その後に、セルの結合を再度行うことになる。そのような、セルの結合の解除、列又は行の追加、新たなセル群の結合という変更操作が利用者により指示され、それぞれの変更に対応して、変数名定義表部分４５に対する変更がなされる。ステップＳ８２４から８２６のいずれかの処理の後は、処理はステップＳ８２１に戻り、表変更監視部８２は、監視を継続する。
【０１８３】
なお、アプリケーションプログラムを生成した後に、変数名定義表部分４５又は変数値定義表部分４６の内容を変更したときには、変更後の変数名定義表部分４５又は変数値定義表部分４６と、対応するテンプレートプログラム４７を使用して、再度アプリケーションプログラムを生成させれば自動的に変更後のアプリケーションプログラムを得ることができる。
【０１８４】
＜発明の第２の実施の形態＞
第１の実施の形態では、図２、図３に例示されたように、変数名定義表部分４５と変数値定義表部分４６からアプリケーションプログラムを生成した。しかし、変数名定義表部分４５は変数名のみの表であり、変数値定義表部分４６は変数値のみの表であり、通常の業務で生成される表は、変数名と変数値を含むものであり、両者を対比して見ることができる。本実施の形態では、通常の業務で作成される表を使用して、アプリケーションプログラムを生成可能にする、プログラム作成プログラム及びプログラム作成方法を示す。
【０１８５】
図３３は、本実施の形態で使用される、変数値が記憶される前の変数名／変数値定義表の例を示す図である。図に示された変数名／変数値定義表４５６０は、テンプレートプログラム４７等の生成者によりテンプレートプログラム４７等の生成時にあらかじめ生成される。変数名／変数値定義表４５６０は、“変数名／変数値定義表名”というラベルを記憶したセル４５６０Ａと、その名称を記憶するためのセル４５６０Ｂを有している。更に、変数名／変数値定義表４５６０は、通常の業務で使用される多くの表と同じく、変数名部分４５Ａと変数値部分４６Ａとを含んでいる。
【０１８６】
変数名部分４５Ａは、複数の変数の変数名を記憶する複数のセルを有する。変数値部分４６Ａは、各変数に対応して、当該変数の複数の変数値を当該変数名が属する列に属する複数のセルに記憶する。変数値部分４６Ａは、各変数の複数の変数値を記憶するための２次元に配列された複数のセルを含んでいる。図３３では、変数名部分４５と変数値部分４６Ａの列数は同じであるが、変数名部分４５Ａは、単一行に属する複数のセルからなり、変数値部分４６Ａはそれより多い行に属する多数のセルを含んでいる。しかし、本実施の形態は、変数名部分４５が一行以外の場合にも適用できる。一般には、変数名部分４５Ａに含まれた前記複数のセルは、列又は行の一方に関しては、変数値部分４６Ａを構成する複数の列又は複数の行と同じ列又は行に属し、列又は行の他方に関しては、前記第２の部分を構成する複数の列又は複数の行より少ない数の列又は行に属すればよい。
【０１８７】
変数値部分４６Ａでは、単一の変数値が複数のセルに記憶されるべきときには、当該複数のセルは結合される。したがって、変数名“ビル名”の変数値を共通に記憶するための５つのセル群４６２は結合され、変数名“階”の第１の変数値“１階”を記憶するための３つのセル群４６３も結合され、変数名“階”の第２の変数値“２階”を記憶するための２つのセル群４６４も結合されている。
【０１８８】
本実施の形態のプログラム生成プログラム又はプログラム生成方法を利用してアプリケーションプログラムを生成しようとする利用者は、変数名／変数値定義表４５６０内のセル４５６０Ｂに変数名／変数値定義表名を記憶させ、変数値部分４６Ａに、複数の変数のそれぞれの変数値を記憶させて変数名／変数値定義表４５６０を完成して使用するのが一般的である。
【０１８９】
図３４は、変数値が記憶された後の変数名／変数値定義表の例を示す図である。変数名／変数値定義表４５６０では、変数名／変数値定義表名を記憶するセル４５６０Ｂに“栃木ビル変数名／変数値定義表”という名称が記憶されている。更に、変数値部分４６Ａでは、変数名部分４５Ａに記憶された複数の変数名のそれぞれと同じ行に、それぞれの変数名の変数の変数値が記憶されている。
【０１９０】
図３４と図３の対比から分かるように、変数値部分４６Ａは、図３の変数値定義表部分４６と全く同じ外観を有する。図３４に示された変数値部分４６Ａ内の各結合セルを構成している個々のセルの結合フラグ、結合方向を第１の実施の形態の場合と同じになるように定義すれば、図３４の変数値部分４６Ａは、そのまま第１の実施の形態における変数値定義表部分４６として使用することができる。すなわち、図３３又は図３４においては、変数値部分４６Ａ内の結合セルは、そのセルより右側にある複数のセルに対して上位側にある変数の変数値を記憶することが分かる。すなわち、当該結合セルが属する列にある、対応する変数名の変数は、その変数より右側の変数より、上位にあることが分かる。このように、図３３又は図３４は、変数値を記憶するセルが結合セルであるか否かにより、当該変数値が関係する変数がどの変数に対して上位にあるかを示すことが可能になっていることが分かる。
【０１９１】
更に、図３４内の変数名部分４５Ａと変数値部分４６Ａと図２の変数名定義表部分４５との対比から分かるように、変数値部分４６Ａの写を作り、当該写の中の各列に対応する変数名部分４５Ａ内の変数名を、当該変数値部分４６Ａ内の当該列に属する複数のセルに記憶させれば、図２に示されたように変数名を記憶した２次元に配列された複数のセルからなる変数名定義表部分４５が得られることが分かる。もちろん、変数名と変数値では、必要な列の幅等のセルのサイズに関連する事項は異なるので、変数名部分４５Ａと変数値部分４６Ａとから図２に示されたような変数名定義表部分４５を生成したときには、当該変数名定義表部分４５の列幅等を適宜修正してよい。
【０１９２】
図３５は、本実施の形態で使用可能な情報編集部８０の例を示す図である。図において、第１の実施の形態に比べて表変換部８４が追加されている。表変換部８４は、図３４に例示された変数名／変数値定義表４５６０の変数値部分４６Ａの写しを図３に例示された変数値定義表部分４６として生成し、更に、表４５６０内の“栃木ビル変数名／変数値定義表”というセル４５６０Ｂに保持された表の名称から、図３に例示された“栃木ビル変数値定義表”という変数値定義表名を生成して図３のセル４６１Ｂに記憶させる。
【０１９３】
更に、表変換部８４は、変数名／変数値定義表４５６０内の変数名部分４５Ａと変数値部分４６Ａとから、上に述べた方法で図２に例示された変数名定義表部分４５を生成し、更に、表４５６０内の“栃木ビル変数名／変数値定義表”というセル４５６０Ｂに保持された表の名称から、図２に例示された“栃木ビル変数名定義表”という変数名定義表名を生成し図２のセル４５１Ｂに記憶させる。
【０１９４】
こうして、図３４に示された変数名／変数値定義表４５６０から図２、図３で示された変数名定義表部分４５と変数値定義表部分４６が自動的に生成される。したがって、その後は、第１の実施の形態と同じく、生成された変数名定義表部分４５と変数値定義表部分４６を使用すればよい。
【０１９５】
なお、本実施の形態においては、テンプレートプログラム４７、４８、…を生成する時点では、図３４に示された変数値を記憶させて変数名／変数値定義表４５６０がまだ完成されていないのが普通である。しかし、テンプレートプログラム４７等を生成しようとする者は、図３３に示された変数値が記憶されていない変数名／変数値定義表４５６０を自分で作成するときには、上位側の変数に対する変数値を記憶させるセルを結合セルとするように、変数名／変数値定義表４５６０を作成し、変数値がまだ記憶されていない変数名／変数値定義表４５６０を完成すれば、変数間の階層関係を変数名／変数値定義表４５６０から知ることができるので、そのことを利用してテンプレートプログラム４７等を生成すればよい。また、他の人が作成した変数値が記憶されていない変数名／変数値定義表４５６０が利用できるときには、当該変数名／変数値定義表４５６０の変数値部分４６Ａ内の結合セルの有無を参照することにより、変数名部分４５Ａ内のいずれの変数が、他のいずれの変数に対して上位にある変数であるかを知ることができるので、図３３に示された、変数値が記憶されていない変数名／変数値定義表４５６０を参照してテンプレートプログラム４７等を生成することができる。
【０１９６】
第１の実施の形態では、利用者は、図２にある変数名定義表部分４５を参照して、どのセルがどの変数の変数名を記憶するかを確認したあと、図３にある変数値定義表部分４６の各セルに、図２内の対応するセルに記憶された変数名に対応する変数値を記憶させる必要がある。しかし、本実施の形態では、利用者は、図３３に示された、通常使用する表と同じく、上の行に示された変数名と同じ列に、その変数名の変数の変数値を記憶させればよい。また、利用者が既に作成した表も、図３３に類似である場合が多いので、修正することなく、あるいは、部分的な変更のみにより、当該作成済みの表を使用することも容易となる。
【０１９７】
更に、図３４に示された変数名／変数値定義表４５６０を作成しアプリケーションプログラムを生成した後でも、変数名／変数値定義表４５６０の表の変更は容易であり、変更後の表を利用して変更後の表に対応するアプリケーションプログラムを生成し直すことが容易となる。すなわち、行又は列の追加又は削除は、変数名部分４５Ａと変数値部分４６Ａに対して同時に行うことができるし、セルの結合の変更は、変数値部分４６Ａに対して行えばよく、変数名部分４５Ａには行う必要はない。
【０１９８】
図３６は、本実施の形態で使用可能な変数名／変数値定義表４５６０の他の例を示す図である。図において、変数名部分４５Ａでは、第１の行内のセル４５０Ａ、４５０Ｂ、４５０Ｃ、４５０Ｅにそれぞれ変数名“ビル名”、“階”、“店名”、“店名”が記憶され、第２行では、変数名“店名”と同じ列に属する下方のセルに変数名“場所”が記憶され、第２行の他のセルは空白である。この例では、変数名部分４５Ａだけを見ても、変数名“階”の下方に変数名“店名”と“場所”があることが分かる。しかし、“ビル名”の下位に“階”があることは変数名部分４５Ａからは分からないことは図３４の場合と同じである。したがって、図３４の変数名部分４５Ａは、変数の階層関係を不完全にしか表していない。しかし、変数値部分４６Ａを参照すると、変数の階層関係が完全に反映されていることは、図３４の変数名／変数値定義表４５６０と同じである。なお、図３６の例では、変数名部分４５Ａは２行を占有しているが、その行数は、変数値部分４６Ａが占有する行数より少なく、変数名部分４５Ａと変数値部分４６Ａの列数は同じでることは、図３５の場合と同じである。
【０１９９】
＜発明の第３の実施の形態＞
第２の実施の形態では、図３４に例示されたように、変数名部分４５Ａと変数値部分４６Ａを有する変数名／変数値定義表４５６０から、第１の実施の形態で使用された変数名定義表部分４５と変数値定義表部分４６を生成し、生成された２つの変数名定義表部分４５と変数値定義表部分４６に対して第１の実施形態を使用してアプリケーションプログラムを生成できることを示した。しかし、本実施の形態では、図３４に例示された、変数名と変数値が記憶された変数名／変数値定義表４５６０から変数名定義表部分４５と変数値定義表部分４６を生成しないで、図３４に例示された変数名／変数値定義表４５６０を直接使用してアプリケーションプログラムを生成可能にする、プログラム生成プログラム及びプログラム生成方法を示す。
【０２００】
第２の実施の形態で説明したように、図３４に示された変数名／変数値定義表４５６０内の変数値部分４６Ａは、図３に例示された変数値定義表部分４６として実質的に同じ情報を有している。また、図３４の変数名／変数値定義表４５６０内の変数名部分４５Ａの変数名を、変数値部分４６Ａのコピー内の当該変数値名が属する列と同じ列の各セルに記憶させれば、図２に例示された変数名定義表部分４５が得られる。
【０２０１】
したがって、図３４の変数名／変数値定義表４５６０は、実質的には、変数名定義表部分４５に関する情報と変数値定義表部分４６に関する情報が含まれており、図３４に例示された変数名と変数値が記憶された変数名／変数値定義表４５６０から変数名定義表部分４５と変数値定義表部分４６を生成しなくても、当該変数名／変数値定義表４５６０に基づいてアプリケーションプログラムを生成することが可能であると期待される。図３４の変数名／変数値定義表４５６０では、変数名部分４５Ａは変数の階層関係が識別可能なように構成されていないが、変数値部分４６Ａは、変数の階層関係が識別可能なように構成されているので、第１の実施の形態における変数名定義表部分４５を生成しなくてもよいことになる。
【０２０２】
より具体的には、図３４に例示された変数名／変数値定義表４５６０内の変数値部分４６Ａの各セルには、変数値以外にも、同じ列に属する変数名部分４５Ａに記憶された変数名が記憶されていると考えて第１の実施の形態での処理を適用すればよい。更に具体的には、第１の実施の形態において、ある変数を記憶する変数名定義表部分４５内のセルを検出し、そのセルに対応する変数値定義表部分４６内のセルを決定するかあるいはそのようなセルの数を計数する処理を図３４に例示された変数名／変数値定義表４５６０について行うには、当該変数を記憶する変数名部分４５Ａ内のセルが属する列に属する、変数値部分４６Ａ内の有効な変数値を記憶するいずれかのセルを決定するかそのようなセルの総数を計数すればよい。
【０２０３】
例えば、図２７に示した要素数取得部７２により、“＾＾ＣＯＵＮＴ（変数）＾＾”関数が指定する要素数を求めるとき、図３４に例示された変数名／変数値定義表４５６０の変数値部分４６Ａの各セルに、対応する変数が埋め込まれていると考えて、上記＾＾ＣＯＵＮＴ（変数）＾＾が指定する変数の要素数を求めればよい。例えば、図２２（ｂ）に示された中間コード９１６内にある“＾＾ＣＯＵＮＴ（店名）＾＾”関数の場合、変数“店名”の上位にある変数“階”の値には関係なく、変数名“店名”を有するセルの総数を図３４の変数名／変数値定義表４５６０から数えればよい。そのためには、図３４の変数名／変数値定義表４５６０において、変数名部分４５Ａ内の変数名“店名”に対して有効な値を記憶する、変数値部分４６Ａ内のセルの総数を計数すればよいことになる。
【０２０４】
同様に、図２２（ａ）の中間コード９０２にある“＾＾ＣＯＵＮＴ（階）＾＾”関数の場合には、変数名“階”を有するセルの総数を図３４の変数名／変数値定義表４５６０から数えればよい。そのためには、図３４の変数名／変数値定義表４５６０において、変数名部分４５Ａ内の変数名“階”に対して有効な値を記憶する、変数値部分４６Ａ内のセルの総数を計数すればよいことになる。
【０２０５】
また、図２６（ａ）の中間コード９０３Ａにある“＾＾ＣＯＵＮＴ（階［１］．場所）＾＾”関数の場合には、この関数の引数は修飾部“階［１］”を有するので、この修飾部のセルの座標を決定し、その後に当該セルの下位側にある変数名“場所”の有効な値を記憶したセルの数を計数すればよい。修飾部“階［１］”のセルは、変数名“階”の値を有するセルを列座標昇順、行座標昇順の優先順位で検索すればセル４６３を検出できる。したがって、当該セルの下位側にある変数名“場所”の有効な値を記憶したセルの数として、当該セル４６３の列座標より大きな列座標を有し、当該セル４６３に含まれた３つのセルの行座標のいずれかに一致する行座標を有し、変数名“場所”に対する有効な値を記憶する、変数値部分４６Ａ内のセルの総数を計数すればよいことになる。
【０２０６】
他の関数、例えば、＾＾ＧＥＴ（変数）＾＾あるいは＾＾ＧＥＴ（変数１．変数２）＾＾等の値を求めるときも同様であり、変数値取得部７３、変数座標取得部７４の処理も同様に行うことができる。
【０２０７】
本実施の形態によれば、変数名部分４５Ａと変数値部分４６Ａを有する図３４に例示された変数名／変数値定義表４５６０を使用してアプリケーションプログラムを生成することができるので、第２の実施の形態と同じく図３４に例示された変数名／変数値定義表４５６０を変更した場合に変更後の変数値に対応するアプリケーションプログラムを再生成することが容易である。更に、図３４に例示された変数名／変数値定義表４５６０から変数名定義表部分４５と変数値定義表部分４６を生成して使用する第２の実施の形態に比べて、本実施の形態は、これらの表部分４５、４６を生成しないで単独の図３４に例示された変数名／変数値定義表４５６０を使用してアプリケーションプログラムを生成するので、第２の実施の形態に比べて必要な処理も簡単になり、処理時間も短くなると期待される。
【０２０８】
なお、本実施の形態でも、図３４に例示された変数名／変数値定義表４５６０に代えて、第２の実施の形態で使用可能であるとされた、図３６に例示された変数名／変数値定義表４５６０を使用することもできる。
【０２０９】
＜発明の第４の実施の形態＞
以上の実施の形態では、上位側の変数又は変数値を記憶する、特定の関係にある複数のセルとして、相互に結合されたセルを使用したが、本実施の形態は、他の特定の関係にあるセルを結合セルの代わりに使用する、プログラム生成プログラム及びプログラム生成方法を示す。
【０２１０】
図３７は、第１の実施の形態の図２の変数名定義表部分４５に代えて本実施形態で使用される変数名定義表部分４５の例を示す図である。図において、変数名“ビル名”を記憶するセル群４５２を構成する５つのセル４５２Ａから４５２Ｅは、結合されていなく、第１のセル４５２Ａには変数名“ビル名”が記憶され、第２のセル４５２Ｂから第５のセル４５２Ｅには、特定の記号、たとえは上向きの“↑”が記憶されている。この特定の記号を検出することにより、上記第２から第５のセルが、第１のセルとともに一群の特定の関係にあるセルとして扱えばよい。他の変数名についても同様である。例えば、変数名“階”を記憶する最初のセル群４５３を構成する３つのセル４５３Ａから４５３Ｃも同様である。変数名“階”を記憶する第２のセル群４５４を構成する２つのセル４５４Ａから４５４Ｂも同様である。場合によっては、上記矢印を省略することも可能である。その場合には、例えば第２列において、セル４５３Ａに有効な変数名「階」が記憶され、そのセルの下方のセルのうちセル４５４Ａのみが有効な変数名を記憶していることになる。したがって、セル４５４Ａが新たなセル群の初めであり、その上のセル４５３Ｃは、セル４５３Ａから始まるセル群の最後のセルと考えることができる。なお、セル４５４Ｂで第２列は終了しているので、セル４５４Ａからセル４５４Ｂまでが第２のセル群と考えることができる。
【０２１１】
なお、本発明は、以上の実施の形態に限定されず、請求項に記載された発明の要旨を変更しない範囲で、修正又は変更してもよいことは言うまでもない。
【０２１２】
【発明の効果】
以上説明したように、本発明によれば、表内に登録された複数のデータが埋め込まれ、当該埋め込まれたデータに対して特定の処理を施す汎用のプログラム言語で記述されたアプリケーションプログラムを生成することができる。
【図面の簡単な説明】
【図１】本発明に係るプログラム生成プログラムの一つの実施の形態を使用する情報処理装置の概略ブロック図である。
【図２】ビル内店舗データを管理するために使用可能な変数名定義表部分の一例を示す図である。
【図３】図２の変数名定義表部分に対応する変数値定義表部分の例を示す図である。
【図４】変数名定義表部分と変数値定義表部分が採りうるいろいろなセルの配置例を示す図である。
【図５】上位側の変数を記憶する特定関係にある複数のセルが同一の行に属する場合における変数名定義表部分の例を示す図である。
【図６】変数名定義表部分内の変数名を記憶するセルの属性のうち、結合セルフラグの数値例と結合方向の例を示す図である。
【図７】２階の店が２個のみであるときに使用可能な変数名定義表部分の例を示す図である。
【図８】図７の変数名定義表部分に対応する変数名定義表部分の例を示す図である。
【図９】各階の店が２個のみであるときに使用可能な変数名定義表部分の例を示す図である。
【図１０】第１の実施の形態で使用可能な変数名定義表部分の他のいくつかの例を示す図である。
【図１１】テンプレートプログラムの例を示す図である。
【図１２】定義対応情報の例を示す図である。
【図１３】生成されるアプリケーションプログラムの例を示す図である。
【図１４】生成される他のアプリケーションプログラムの例を示す図である。
【図１５】テンプレートプログラム選択部の概略フローチャートである。
【図１６】テンプレートプログラム解析部の概略プログラムブロック図である。
【図１７】解析制御部の概略フローチャートである。
【図１８】＃＃変数置換部の概略フローチャートである。
【図１９】構文解析部の概略フローチャートである。
【図２０】構文分解部の概略フローチャートである。
【図２１】呼び出し元の構文解析部から呼び出された結果として構文分解部が出力する出力パラメータの例をいくつか示す図である。
【図２２】テンプレートプログラムから生成される中間コードプログラムの例を示す図である。
【図２３】ループ解析部の概略フローチャートである。
【図２４】アプリケーションプログラム出力部の概略プログラムブロック図である。
【図２５】出力制御部の概略フローチャートである。
【図２６】中間コードプログラムに対する出力制御部によるいくつかの処理途中結果を示す図である。
【図２７】要素数取得部の概略フローチャートである。
【図２８】変数値取得部の概略フローチャートである。
【図２９】変数座標取得部の概略フローチャートである。
【図３０】変数名定義表部分４５内の同じ変数名を記憶する複数のセルの中かから所望のセルの座標を見つけるときのセルの選択の順序を説明するための図である。
【図３１】情報編集部の概略プログラムブロック図である。
【図３２】表変更監視部の概略フローチャートである。
【図３３】第２の実施の形態で使用される、変数値が記憶される前の変数名／変数値定義表の例を示す図である。
【図３４】変数値が記憶された後の上記変数名／変数値定義表の例を示す図である。
【図３５】第２の実施の形態で使用可能な情報編集部の例を示す図である。
【図３６】第２の実施の形態で使用可能な変数名／変数値定義表の他の例を示す図である。
【図３７】第４の実施形態で使用される変数名定義表部分の例を示す図である。
【図１】
2004094763.tif 000003
【図２】
2004094763.tif 000004
【図３】
2004094763.tif 000005
【図４】
2004094763.tif 000006
【図５】
2004094763.tif 000007
【図６】
2004094763.tif 000008
【図７】
2004094763.tif 000009
【図８】
2004094763.tif 000010
【図９】
2004094763.tif 000011
【図１０】
2004094763.tif 000012
【図１１】
2004094763.tif 000013
【図１２】
2004094763.tif 000014
【図１３】
2004094763.tif 000015
【図１４】
2004094763.tif 000016
【図１５】
2004094763.tif 000017
【図１６】
2004094763.tif 000018
【図１７】
2004094763.tif 000019
【図１８】
2004094763.tif 000020
【図１９】
2004094763.tif 000021
【図２０】
2004094763.tif 000022
【図２１】
2004094763.tif 000023
【図２２】
2004094763.tif 000024
【図２３】
2004094763.tif 000025
【図２４】
2004094763.tif 000026
【図２５】
2004094763.tif 000027
【図２６】
2004094763.tif 000028
【図２７】
2004094763.tif 000029
【図２８】
2004094763.tif 000030
【図２９】
2004094763.tif 000031
【図３０】
2004094763.tif 000032
【図３１】
2004094763.tif 000033
【図３２】
2004094763.tif 000034
【図３３】
2004094763.tif 000035
【図３４】
2004094763.tif 000036
【図３５】
2004094763.tif 000037
【図３６】
2004094763.tif 000038
【図３７】
2004094763.tif 000039