説明

ベーシツク・インタプリタのスタツク演算処理方法

【目的】 BASICインタプリタで、文字列をスタックに保存する場合、スタック内の隙間を無くし、その小型化とメモリの節約を実現すると共に、文字列を演算処理する際に何回もコピーする必要を無くし、処理速度を向上させる。
【構成】 アドレスを格納するスタック1と文字列本体を格納するスタック2との2つのスタックを使用する。スタック2は、動的メモリ領域3内に拡張可能に設定する。文字列本体は演算子に従って順次スタック2に格納し、そのアドレスをスタック1に格納する。文字列の大きさがスタック2に入らない時は動的メモリ領域3内にスタック2を設定し直す。

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、コンピュータのマイクロプログラミングで命令を1つずつ解釈しながら実行するベーシック・インタプリタ(BASIC interpreter)のスタック演算処理方法に関し、特に、文字列の演算処理方法に関する。
【0002】
【従来の技術】ベーシック・インタプリタにおいて、命令のいくつかはスタックに関するものである。スタック(stack)とは、一時的に記憶されるデータの格納に使用される一群のメモリのことで、データ移動を伴う一連のレジスタをハードウェアで形成してもよいし、読み/書き用記憶領域の一部を割当ててもよい。いずれにせよ、プログラムが割込み完了と同時に元の時点に戻れるようにレジスタの状態を保持し、演算の再開に必要なデータを記憶している。抽出する(読み出す)データは「スタックを押し上げる」と言われ、記憶する(書き込む)データは「スタックを押し下げる」と言われる。スタック・ポインタがスタックに挿入された最後の項目のアドレスを保持していて、該ポインタに従って読み出しが行われるので、例えば末尾から3番目の文字列を読み出すのは、まず末尾から1番目と2番目の文字列を読み出した後でなければならない。尚、スタックから読み出された情報は、再利用のためそのままスタック内にも残されている。
【0003】ベーシック・インタプリタで、スタックをワークエリアとして文字列の演算に使用しようとする場合、文字列の最大長を制限し、図5に示すように、文字列の最大長Lに固定されたスタックをn個(通常n=9)に使用して、文字列の演算を行っている。例えば、A+Bの場合、図6(a)に示す如く文字列Aをスタック1に格納し、文字列Bをスタック2に格納するか、又は図6(b)に示す如く同一スタック内で文字列Aに続けて文字列Bをコピーし、スタックポインタ(SP)を1減じるかである。
【0004】
【発明が解決しようとする課題】しかしながら、上記従来の文字列演算方法では、下記の課題がある。
【0005】(1)固定長のスタックを使用しているので、文字列の最大長を大きくした場合、スタック全体が大きくなる。複数のベーシック・プログラムが並列に走るようなシステムでは全プログラムのスタックを均等に大きくする必要があるので、メモリに無駄が生じる。
【0006】(2)ベーシック・インタプリタでは、一般的に演算を逆ポーランド記述法に変換している。命令の形式には、4項系列と3項系列と2項系列とポーランド式の4種類があって、ポーランド式は操作コードとオペランドを別個に取扱う方式で、正ポーランド式が操作コードをオペランドの前に書くのに対して、オペランドの後に書くのを逆ポーランド式と呼んでいる。逆ポーランド式に展開した式を固定長のスタックで解釈・実行すると、例えば前記A+Bの場合、文字列Bを2回コピーすることになる。即ち、A+Bを逆ポーランド式に展開するとAB+となり、これを前方から順に解釈・実行するので、文字列Aと文字列Bをスタックにプッシュし、演算子“+”が現れたときスタックに取込まれているAとBを取出し、A+Bの演算を行って、その結果をスタックに保存することになる。
【0007】本発明は、このような課題に鑑みて創案されたもので、スタック内部の隙間を無くしてメモリを節約し、スタックを小さく設定でき、文字列の加算時に何回もコピーする必要がなく、処理速度を向上させるスタック演算処理方法を提供することを目的としている。
【0008】
【課題を解決するための手段】本発明における上記課題を解決するための手段は、ベーシック・インタプリタで、データを一時的に格納するスタックを文字列演算のワークエリアに使用するスタック演算処理方法において、アドレス格納用の第1のスタックと動的メモリ内に拡張可能に設けられた第2のスタックとを備え、第2のスタックに文字列本体を演算子に従って順次格納し、それらの各文字列のアドレスを第1のスタックに格納するスタック演算処理方法によるものとする。
【0009】
【作用】本発明は、ベーシック・インタプリタで、文字列の演算処理にスタックを使用する場合、2つのスタックを使用し、文字列本体は動的メモリ内の拡張しか可能なスタックに格納し、そのアドレスをもう1つのスタックに格納するものである。文字列の本体を格納するスタックが拡張可能な構造なので、大きな文字列を扱うベーシックのスタックだけを必要に応じて拡張すればよい。文字列をスタックに格納した時点で、文字列が既に結合された状態になっていて、何回もコピーする必要はない。
【0010】
【実施例】以下、図面を参照して、本発明の実施例を詳細に説明する。図1は、本発明の一実施例の説明図である。図において、1はスタック1、2はスタック2で、スタック2は、動的メモリ領域3内に設定され、その大きさを拡張できるようになっている。前記大きさを拡張する場合、スタック2に後続する部分が他で使用されているときは、その動的メモリ領域3内の別の場所にスタック2を新規設定し、それまでスタック2として使用していた場所は使用可能領域と解釈される。
【0011】図2は、実施例のスタック1とスタック2の内容を示す説明図で、スタック2に文字列が格納され、そのアドレスがスタック1に格納されている。図中BPはスタック2の開始アドレスを示し、TPはスタック2の終了アドレスを示している。また、第1のスタックポインタSP1はスタック1の次のデータ入力位置を示し、第2のスタックポインタSP2は次に文字列を格納する位置のアドレスを示している。
【0012】図3は、上記実施例の格納処理のフローチャートである。同図に示す如く、スタック2に文字列を入れる余地があれば、前記ポインタSP1の示すスタックにSP2を入れたのちSP1を+1進め、スタック2でポインタSP2の示す位置から文字列を格納し、その文字列のサイズだけSP2に加算する。スタック2に文字列を入れる余地がない場合は、使用中のスタック2を解放し、拡張したスタック2を新たに獲得し、それに対応させてBP,TP,SP2,SP1を変更する。
【0013】図4は、上記実施例の抽出処理の工程図である。文字列を取出す際には前記ポインタSP1を−1戻し、該SP1の示すスタックの内容をSP2に入れる。
【0014】本実施例は下記の効果が明らかである。
【0015】(1)2つのスタックを使って文字列を格納するようにしたので、スタックの中の空部屋がなくなり、メモリが節約できる。
【0016】(2)文字列本体を格納するスタックが拡張可能な構造なので、スタックを小さく設定できる。大きな文字列を扱うベーシックのスタックだけを、必要に応じて拡張すればよい。
【0017】(3)文字列をスタックに格納した時点で、文字列が既に結合された状態になっているので、文字列の加算(結合)時に何回もコピーする必要がなく、処理速度が向上する。
【0018】
【発明の効果】以上、説明したとおり、本発明によれば、スタック中の隙間を無くしてメモリを節約し、スタックを小さく設定でき、文字列の加算時に何回もコピーする必要がなく、処理速度を向上させるスタック演算処理方法を提供することができる。
【図面の簡単な説明】
【図1】本発明の一実施例の説明図。
【図2】一実施例のスタックの説明図。
【図3】一実施例の格納処理のフローチャート。
【図4】一実施例の抽出処理の工程図。
【図5】従来例の説明図。
【図6】従来例の説明図。
【符号の説明】
1,21…スタック
1、2,22…スタック
2、3…動的メモリ領域。

【特許請求の範囲】
【請求項1】 ベーシック・インタプリタで、データを一時的に格納するスタックを文字列演算のワークエリアに使用するスタック演算処理方法において、アドレス格納用の第1のスタックと動的メモリ内に拡張可能に設けられた第2のスタックとを備え、第2のスタックに文字列本体を演算子に従って順次格納し、それらの各文字列のアドレスを第1のスタックに格納することを特徴とするスタック演算処理方法。

【図1】
image rotate


【図2】
image rotate


【図4】
image rotate


【図3】
image rotate


【図5】
image rotate


【図6】
image rotate