(57)【特許請求の範囲】
【請求項１】
ソースプログラムに記述されたコンピュータへの指示を定義する命令文の列から、コンピュータが解釈実行できる命令語の列であるオブジェクトプログラムを生成するコンパイラ処理装置に於いて、
前記オブジェクトプログラムがコンピュータにより実行される際に使用するメモリ領域である変数領域を確保し前記確保した変数領域に初期値を設定して前記オブジェクトプログラムを出力する旨を前記コンパイラ装置に指示する宣言命令文を、前記ソースプログラムの中から検出して認識する認識手段と、
前記宣言命令文の定義に基づいて、前記変数領域に設定する１以上の初期値の設定構造を解析する解析手段と、
前記宣言命令文の定義に対応して、前記解析手段による解析結果を基に、前記変数領域に設定する１以上の初期値を一括して１個の連続した作業領域に格納して保存する一括保存法と、前記変数領域に設定する１以上の初期値に対して、１個の初期値毎に１個の管理ブロックに管理される１個の作業領域を割り当てて前記１以上の初期値を前記作業領域の各々へ分割格納して保存する分割保存法とのいずれかの保存法を、前記作業領域の総量が小さくなるように選択する保存法選択手段と、
前記宣言命令文に対応して、前記保存法選択手段により選択された保存法により前記１以上の初期値を前記作業領域に保存し、前記作業領域に保存された前記１以上の初期値を前記変数領域に設定して前記オブジェクトプログラムを出力する初期値設定手段と、
を備えたことを特徴とするコンパイラ処理装置。
【請求項２】
前記解析手段による前記１以上の初期値の設定構造の解析は、前記宣言命令文で定義される変数領域の大きさ、前記１以上の初期値の数、前記１以上の初期値の連続性、及び、前記変数領域に対する設定位置の数を基に行う
ことを特徴とする請求項１に記載のコンパイラ処理装置。
【請求項３】
前記ソースプログラムはＦＯＲＴＲＡＮプログラムであり、
前記宣言命令文は初期値指定のある型宣言文、および、ＤＡＴＡ文である
ことを特徴とする請求項１又は請求項２に記載のコンパイラ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ＦＯＲＴＲＡＮなどコンパイラのＤＡＴＡ文（ＤＡＴＡ宣言命令）の初期値をオブジェクト・プログラムに変換する技術に関する。
【０００２】
【従来の技術】
ＦＯＲＴＲＡＮなどコンパイラのＤＡＴＡ文の初期値割り付けの方法には、従来、次のような二つの方法があった。
【０００３】
その第一の方法（以下、一括保存法と呼ぶ）を、図１１に示すようなプログラム例１をもとに説明する。同図（１）はその一例としてＦＯＲＴＲＡＮプログラムの一部であるＤＡＴＡ文による初期値設定部分のソースプログラムを示しており、プログラム例１とするが、説明の便宜上、以降プログラム例に於ける初期値は、全て符号付４バイトとする。
【０００４】
▲１▼の「INTEGER 」は整数の作業域（領域）確保のための宣言命令であり、▲２▼〜▲４▼の「DATA」は作業域への初期値設定のための宣言命令であり、▲５▼の「END 」は原始プログラムの終了命令を示している。
【０００５】
同図( 2 ）は当プログラム例１の初期値設定及び出力の過程を示したもので、先ず、▲１▼のINTEGER 命令により（１）に示す作業域が確保される。続いて▲２▼〜▲４▼のDATA命令により、それぞれ（２）、（３）を経て（４）の初期値設定がなされ、全ての初期値設定が終了する。
【０００６】
しかし、この方法に於いては、図１２に示す(1) のプログラム例２のような場合、即ち▲１▼のINTEGER 命令により10,000,000個分の作業域を確保し、▲２▼、▲３▼のDATA命令により、先頭の要素B(1)作業域に初期値「1 」を設定し、最後の要素B(10000000) 作業域に初期値「2 」をそれぞれ設定するような巨大配列( 変数) の場合には、(2) の初期値出力結果に示すように、その間の領域が無駄になる上、作業域を獲得するのに時間が掛かるという問題がある。更に、作業域を確保出来ずに、コンパイルを失敗してしまうケースさえ生ずることもある。尚、この一括保存法による初期値設定に於いて、図では省略・表現していないが、この初期値を管理するための管理ブロック（後述）が存在する。
【０００７】
次に第二の方法（以下、分割保存法と呼ぶ）として、先ず初期値が与えられると、その初期値を設定管理するための管理ブロック（４バイト×５項目＝２０バイトの大きさ）を作成する。図１３（１）はこの管理ブロックの内容と初期値設定作業域との関係を示したもので、管理ブロックの内容としては、「次の管理ブロックへのポインタ」、「初期値へのポインタ」、「初期値の割り付け位置」、「作業域の大きさ」、及び「初期値の繰返し回数」を記憶・保持しており、この「初期値へのポインタ」により初期値設定作業域（可変長）に連鎖されている。そして初期値が与えられる都度、即ち初期値の数だけ管理ブロックが作成され、これ等は割り付け位置順に前述の「管理ブロックへのポインタ」により連鎖されて初期値を管理するものである。但し、同じ値の初期値が連続する時は、前述の管理ブロックの「初期値の繰返し回数」を所要数設定するだけで、一つの管理ブロックにより初期値を管理することが出来る。（プログラム例４）
そして、これ等管理ブロックを参照しながら、割り付け位置順にオブジェクトプログラムを出力して完結する。
【０００８】
図１３（２）は先のプログラム例１について、この分割保存法により初期値出力した時の図であり、初期値の数の三個の管理ブロックが作成され、これ等は割り付け位置順（DATA文に現れた順番を位置順にソートしたもの）に「管理ブロックのポインタ」により連鎖されている。又、初期値「1 」、「2 」、「3 」は「初期値へのポインタ」により初期値設定作業域に連鎖され、設定・記憶されることを示している。
【０００９】
しかし、この方法に於いては、初期値の数が多くなると、初期値を保存管理する管理ブロックが増加し、管理ブロックの作業域が大きくなる上、初期値が割り付け位置順に与えられていないようなケースでは、管理ブロックを割り付け位置順にソートする時間も増大し、強いてはコンパイル時間が長くなるという問題が生ずる。
【００１０】
このように、ＤＡＴＡ文の初期値設定方法には一括保存法と分割保存法とがあり、一括保存法では初期値が連続の作業域上に一括記憶・保存されるよう管理され管理ブロックは一つであるが、分割保存法では初期値が与えられる都度、初期値設定作業域とその管理ブロックが確保・設定されるため初期値が連続の作業域に設定されるとは限らず、初期値設定作業域と管理ブロックの数も基本的に複数となる。但し前述したように同じ値の初期値が連続する時は、管理ブロックの「初期値の繰返し回数」設定により、一つの管理ブロックで初期値を管理することが出来る。
【００１１】
【発明が解決しようとする課題】
ＤＡＴＡ文による初期値設定に際し、従来は前述の一括保存法に依るか分割保存法に依るか、システム（コンパイラ）によって固定化されている。従ってＤＡＴＡ文の初期値設定の構造に依っては、無駄な作業域が生じたり、作業域を獲得する時間が掛かり、又初期値の数が多くなると、その管理ブロックのための作業域が大きくなる上、初期値が割り付け位置順に与えられていないようなケースでは、管理ブロックを割り付け位置順にソートする時間も増大し、強いてはコンパイル時間が長くなるという問題があった。
【００１２】
本発明はこのような点にかんがみて、システム内に複数の初期値設定手段を保持し、ＤＡＴＡ文による初期値設定の構造に依って初期値設定手段を選択出来る手段を提供することを目的とする。
【００１３】
【課題を解決するための手段】
上記の課題は下記の如くに構成されたコンパイラ処理装置によって解決される。
【００１４】
図１は、本発明の構成図である。即ち、
コンピュータプログラムのコンパイラ処理装置に於いて、
初期値設定を表現する文を認識する認識手段と、該文の構造を解析する解析手段と、解析の結果により前記初期値の保存法を選択する保存法選択手段と、該保存法により初期値設定を実行、出力する初期値設定手段とを備えることにより、文の構造に即した初期値の保存法が選択可能となり、作業域の節減に繋がると同時に、より高速な初期値設定が実現出来る。
【００１５】
【発明の実施の形態】
以下、ＤＡＴＡ文の初期値設定の方法について、幾つかのＦＯＲＴＲＡＮプログラムの例を使用して説明して行くが、その前段として図１を基に初期値設定の全体の流れを概略説明しておく。
【００１６】
先ず、同図中の認識手段１0 により（ソース）プログラム中の初期値設定を表現する文、即ち初期値を格納する主メモリ上の領域を確保する「INTEGER 」などの宣言命令と、それに続いて前記確保領域に、パラメータで与えられた初期値をセットする「DATA」宣言命令とを認識する。
【００１７】
この認識された宣言命令（以下、単に命令と呼ぶ）のパラメータ構造を解析手段１１により解析し、解析の結果、複数の初期値保存法、即ち一括保存法と分割保存法の何れの方法に依り初期値を設定・保存するか保存法選択手段１２により選択される。
【００１８】
そして選択された保存法により、実際の初期値設定が初期値設定手段１３により実行、出力され、目的の初期値の設定が完了するというものである。
続いて、これ等処理を具体的なプログラム例を挙げて、どの様な場合に何れの方法を選択するのが有利かを説明し、本発明の構造を示すものとする。
【００１９】
図２は、具体的なプログラム例を引用するに当たり、その一般形を示したものであり、▲１▼「INTEGER 」命令の直後のパラメータでは、確保する領域の名称とその大きさ２０を指定する。尚、ここでは便宜上、「INTEGER 」命令で代表して説明するが、「REAL」命令など、その他同類の宣言命令でも同様である。
【００２０】
又、▲２▼「DATA」命令のパラメータは、「/ 」で区切られた二つの項目から成っており、前項目は「INTEGER 」命令で確保された領域の位置を表現するもので、第一パラメータ２１と呼び、後項目は設定する初期値を表現するもので、第二パラメータ２２と呼ぶこととする。
【００２１】
図３のプログラム例２( 従来の技術の項で引用) は、B 領域のB(1)位置へ初期値「1 」を設定し、B(10000000) 位置へ初期値「2 」を設定するものである。これを一括保存法で初期値設定した場合には、管理ブロックは1 個であるが、初期値設定作業域のB(1)領域とB(10000000) 領域以外はムダな領域となる。又、これを分割保存法で初期値設定した場合には、管理ブロックは2 個となるが、初期値設定作業域は4 バイトの領域が2 個で済む。従ってプログラム例２のような巨大変数の場合には分割保存法で初期値設定するのが、領域上も処理速度上も得策といえる。
【００２２】
図4 のプログラム例3 は、マトリックス形式で「2000×2000」の要素をとり、第一パラメータによりC(I,I)の「I 」を「1 」から「2000」まで「2 」増分(1つ置き) しながら、第二パラメータにより「1000」個の要素C(I,I)に初期値「1 」を設定するものである。これを一括保存法で初期値設定した場合には、管理ブロックは1 個であり、初期値設定作業域には1 つ置きに初期値「1 」が設定されるが、膨大な領域を必要とする。これを分割保存法で初期値設定した場合には、管理ブロック1000個に対して各々4 バイトの初期値設定作業域が必要となるが、前者に比べ必要とする領域は少なくて済む。
【００２３】
この様に、巨大変数又はマトリックス形式の変数のような、経験値Ｎに比べて膨大な領域を必要とするプログラムに於いては、分割保存法を採用した方が有利であると言える。
【００２４】
図5 のプログラム例4 は、D(20000)から成る各要素に同じ値の初期値「1 」を連続的に設定するものである。これを一括保存法で初期値設定した場合には、管理ブロックは1 個であり、初期値設定作業域には連続的に初期値「1 」が設定されるが、これを分割保存法で初期値設定した場合には、前述した分割保存法の特例とも言うべき、同じ値の初期値を連続的な割付け位置に設定する場合には管理ブロック上の「初期値の繰返し回数」欄を「20000 」までカウントアップし、管理ブロックと初期値設定作業域は新たに作成せず、それぞれ1 個の管理ブロックと初期値設定作業域で初期値設定が可能である。従って当ケースのようなプログラムでは分割保存法が有利である。
【００２５】
図6 のプログラム例5 は、E(20000)の各要素順に、異なった初期値「1 」、「2 」、・・・・、「19999 」、「20000 」を設定するものである。これを一括保存法で初期値設定した場合には、管理ブロックは1 個であり、初期値設定作業域の割付け位置順にE(1)からE(20000)に、初期値「1 」から「20000 」が設定される。これを分割保存法で初期値設定した場合には、初期値の数、即ち「20000 」個の膨大な管理ブロックが必要となり、異なった初期値が経験値Ｍより多い場合には使用領域のみならず、管理ブロックのチェーン処理など処理時間上も一括保存法の方が有利である。
【００２６】
図7 のプログラム例6 は、第一パラメータによりF(I)の「I 」を「1 」から「20000 」まで「2 」増分(1つ置き) しながら、第二パラメータにより「10000 」個の要素F(I)に初期値「1 」を設定するものである。これを一括保存法で初期値設定した場合には、管理ブロックは1 個であり、初期値設定作業域には1 つ置きに初期値「1 」が設定されが、これを分割保存法で初期値設定した場合には、管理ブロック10000 個に対して各々4 バイトの初期値設定作業域が必要となり、前者に比べ領域は大きくなる。従って、この様なDO型並び( 第一パラメータによる範囲内繰返し動作指示) の増分値指定により非連続的に初期値設定を行い、且つ初期値設定の要素個数が経験値Ｐより多い場合には一括保存法が有利である。
【００２７】
以上、幾つかの具体的なプログラム例を挙げて、一括保存法と分割保存法による初期値設定の優劣を、主に占有する作業域の側面から説明してきたが、これ等状況を纏めたものが図8 である。同図は、前述の各プログラム例毎に「管理ブロックの数」、「管理ブロックの大きさ」、「初期値設定作業域の大きさ」、そして両者を加えた「合計作業域の大きさ」を一括保存法と分割保存法について比較した表である。尚、同表中の領域の大きさの単位はバイト数である。
【００２８】
プログラム例2 、プログラム例3 は経験値Ｎに対して巨大変数である例であり、この様なプログラムでは分割保存法で処理するのが得策である。プログラム例4 は同じ値の初期値を連続的な割付け位置に設定するもので、同じく分割保存法で処理するのが得策である。プログラム例5 は経験値Ｍに対して異なった初期値の数が多いプログラムであり、この様なプログラムでは一括保存法で処理するのが得策である。次のプログラム例6 は、同一の初期値を非連続的な要素位置に設定し、且つ経験値Ｐに対して初期値設定の要素個数が多いプログラムであり、この様なプログラムも一括保存法で処理するのが得策である。
【００２９】
以上の様に本発明の構造は、システム内に一括保存法と分割保存法の複数の初期値設定手段を保持し、ＤＡＴＡ文による初期値設定の構造を経験値Ｎ、Ｍ、Ｐ等により解析し、適切な初期値設定手段を選択出来るように構成されている。
【００３０】
続いて、これ等の処理手順について図９、図１０により順次説明する。図９はソースプログラムに於ける命令の解析と、それに伴う保存法の選択に関するフローチャートであり、先ずステップ５０に於いて、一括保存法選択を示すフラグを初期設定としてOFF にセットして置き、ステップ５１で「INTEGER 」などの宣言命令から、変数の使用する作業域の大きさＳを算出する。
【００３１】
次にステップ５２で、この算出されたＳが、メモリに記憶された従来からの経験値Ｎより大きいか判別され、大きい場合には分割保存法による処理が行われ、否の場合にはステップ５３で「DATA」などの宣言命令に於ける第二パラメータの内容が解読され、異なった初期値の数Ｘが求められる。このＸが、メモリに記憶された従来からの経験値Ｍより大きいかステップ５４で判別され、大きい場合には一括保存法による準備処理に移り、否の場合にはステップ５５により、第一、第二パラメータの内容解読の結果、初期値割付け構造が増分値指定などにより不連続で、且つ初期値設定位置の要素個数が、メモリに記憶された従来からの経験値Ｐより大きいか判別され、大きい場合には一括保存法による準備処理に移り、否の場合には分割保存法による処理が行われる。
【００３２】
前記ステップ５４、ステップ５５に於いて、一括保存法による準備処理に入った場合には、ステップ５６で一括保存法選択を示すフラグをONにセットし、ステップ５７に於いて一括保存法の管理ブロックを作成すると同時に、作業域を確保する。
【００３３】
この様にして一括保存法と分割保存法の何れによる処理か選択されたら、次に各保存法による初期値設定作業が図１０に示す様なフローチャートの手順に従って実行される。
【００３４】
先ず、ステップ６０で初期値を一つ取得し、ステップ６１で一括保存法フラグがONか判別され、一括保存法の場合( フラグON) には、当該要素割り付け位置に初期値を設定した後、次の初期値処理であるステップ６６に移る。一方、分割保存法の場合( フラグOFF)にはステップ６２に於いて、同じ値の初期値を連続的な割付け位置に設定するプログラムであるかを判別( 既存管理ブロックの初期値と同一かを判別) し、YES の場合にはステップ64にて、管理ブロックの「初期値の繰返回数」をカウントアップして次の初期値処理であるステップ６６に移る。又、否の場合にはステップ６３に於いて新規管理ブロックと作業域を確保・作成し初期値設定した後、次の初期値処理であるステップ６６に移る。そしてステップ６６で初期値設定が終了でなければ、ステップ６０へ戻り新たな初期値を取得し、同様の処理を繰り返すことにより、順次初期値を設定して行くものである。
【００３５】
尚、本発明に関する説明では、プログラム言語として「ＦＯＲＴＲＡＮ」を例に述べてきたが、その他の言語、例えばＰＬ/1などに於いても共有出来るものである。
【００３６】
【発明の効果】
以上の説明から明らかなように本発明によれば、システム内に複数の初期値設定手段を保持し、ＤＡＴＡ文による初期値設定の構造に依って初期値設定手段が選択出来ることにより、より少ない作業域で、しかも高速にＤＡＴＡ文の初期値設定が可能となり、強いてはコンパイル時間も短く出来るという著しい工業的効果がある。
【図面の簡単な説明】
【図１】  本発明の構成図
【図２】  命令の一般形の説明
【図３】  プログラム例２の保存法比較
【図４】  プログラム例３の保存法比較
【図５】  プログラム例４の保存法比較
【図６】  プログラム例５の保存法比較
【図７】  プログラム例6 の保存法比較
【図８】  各プログラム例の保存法比較表
【図９】  命令の解析と保存法選択のフローチャート
【図１０】保存法の実行フローチャート
【図１１】従来のＤＡＴＡ文の初期値出力方法( その１) 説明図
【図１２】初期値出力方法( その１) の問題点
【図１３】従来のＤＡＴＡ文の初期値出力方法( その２) 説明図
【符号の説明】
10  認識手段
11  解析手段
12  保存法選択手段
13  初期値設定手段
20  領域名と領域の大きさ
21  領域の位置( 第一パラメータ)
22  初期値( 第二パラメータ)
【図１】
0003921722.tif 000002
【図２】
0003921722.tif 000003
【図３】
0003921722.tif 000004
【図４】
0003921722.tif 000005
【図５】
0003921722.tif 000006
【図６】
0003921722.tif 000007
【図７】
0003921722.tif 000008
【図８】
0003921722.tif 000009
【図９】
0003921722.tif 000010
【図１０】
0003921722.tif 000011
【図１１】
0003921722.tif 000012
【図１２】
0003921722.tif 000013
【図１３】
0003921722.tif 000014