(57)【要約】【課題】再帰呼び出しを用いないで多次元配列を展開することを可能にする。【解決手段】ワークファイルＡ，Ｂは単なるバッファである。奇数回処理ループを実行しそのときの中間出力先を偶数回処理ループに入力（ワークファイルＡ経由）し、偶数回処理ループを実行しそのときの中間出力先を奇数回処理ループに入力（ワークファイルＢ経由）する。ループの奇偶は未展開の多次元配列の次元数で判断する。【選択図】図２
2010211403.tif 000002
【特許請求の範囲】
【請求項１】
多次元配列の展開処理を行う情報処理装置であって、
第１及び第２のバッファと、
入力されたデータを走査して前記データに含まれる配列の次元数を検索する検索手段と、
前記次元数の奇偶を判定し、
奇数の場合、出力先を前記第１のバッファとし、
偶数の場合、出力先を前記第２のバッファとする制御を行う制御手段と、
前記制御手段が決定した前記出力先に、前記配列を展開する展開手段と、を有し、
前記制御手段は、前記展開手段が前記配列を展開したあと、前記次元数を１減らし、前記出力先に出力されたデータを入力データとして、前記奇偶の判定以降の処理を繰り返す制御を行うことを特徴とする、情報処理装置。
【請求項２】
前記展開手段は、マークアップ言語を用いてタグづけをすることによって、配列の展開をすることを特徴とする、請求項１記載の情報処理装置。
【請求項３】
入力データに複数の多次元配列が含まれる場合に、各多次元配列に前記入力データ内部で一意となる名票を付加する処理を行う終末処理手段を有することを特徴とする、請求項１又は２記載の情報処理装置。
【請求項４】
第１及び第２のバッファを用いる多次元配列の展開処理方法であって、
入力されたデータを走査して前記データに含まれる配列の次元数を検索する検索ステップと、
前記次元数の奇偶を判定する奇偶判定ステップと、
前記奇偶判定ステップで奇数の場合、出力先を前記第１のバッファとし、
前記奇偶判定ステップで偶数の場合、出力先を前記第２のバッファとする制御を行う制御ステップと、
前記制御ステップで決定した前記出力先に、前記配列を展開する展開ステップと、を含み、
前記展開ステップのあと、前記次元数を１減らし、前記出力先に出力されたデータを入力データとして、前記奇偶判定ステップから前記展開ステップまでの処理を繰り返すことを特徴とする、多次元配列の展開処理方法。
【請求項５】
第１及び第２のバッファを備えるコンピュータに、
入力されたデータを走査して前記データに含まれる配列の次元数を検索する検索処理と、
前記次元数の奇偶を判定する奇偶判定処理と、
前記奇偶判定処理で奇数の場合、出力先を前記第１のバッファとし、
前記奇偶判定処理で偶数の場合、出力先を前記第２のバッファとする制御を行う制御処理と、
前記制御処理で決定した前記出力先に、前記配列を展開する展開処理と、を実行させ、
前記展開処理のあと、前記次元数を１減らし、前記出力先に出力されたデータを入力データとして、前記奇偶判定処理から前記展開処理までの処理を繰り返して実行させることを特徴とする、多次元配列の展開処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、多次元配列の展開処理方法及びプログラムに関し、特に、言語処理プログラム等のソースプログラムを解析して当該ソースプログラムに含まれる多次元配列を展開する処理に関する。
【背景技術】
【０００２】
本発明の出願時に既に公知となっている文献の中から、本発明に関連する技術が記載された文献として、特許文献１を挙げる。
【０００３】
特許文献１は、再帰方程式を高速で処理するベクトル処理装置を提供することを課題とする技術であって（「発明の開示」の項冒頭部分参照）、再帰方程式を処理するにあたって、奇数項計算回路が各奇数項を計算し、偶数項計算回路が各偶数項を計算し、計算された奇数項ａ１を偶数項計算回路のレジスタ１１１Ｂに転送するという技術について開示がある（５頁目左上１０行目から右上２１行目、８頁目左下７行目から右下９行目）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特公平０７−００７３８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来の処理方法を図８を参照して説明する。
一般的に事務処理システムにおいて、データはファイルとして、手順はＣＯＢＯＬ等の言語で記述された処理プログラムとして別々に管理されている。
【０００６】
ファイル内のデータ構造は処理プログラム側に記述されている為、異種システム間のデータ移行に当たっては一旦移行用プログラムを用いて処理プログラムを解析し、データをＸＭＬ（ｅＸｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）等の移植性のあるマークアップ言語で再表現する事で実施する事がある。その際、データ内部に多次元の配列（表）が含まれ、移行用プログラム側でそれを展開して各要素に一意となる名票を付けねばならない事態が発生した際、従来の処理方法では一般的に再帰呼び出しによる展開を行う。
【０００７】
図８において、メモリ１０８上に配置された移行用プログラム１０４はハードディスク１０９上に配置されたＣＯＢＯＬソースプログラム１０５をＸＭＬ化する。
【０００８】
メモリ上に配置された配列展開部１０１は移行用プログラム１０４の一部をなし、配列の展開を行う。
【０００９】
ハードディスク１０９上の展開前ＸＭＬソース１０６は配列（表）の展開以外のＸＭＬ化処理を終えたＸＭＬソースである。一方、展開後ＸＭＬソース１０７は全てのＸＭＬ化処理を終えたＸＭＬソースである。
【００１０】
配列展開部１０１のコード１２１は配列展開部の命令部を示し、表の次元数だけ再帰呼び出しされる。配列展開部１０１のデータ１２２は配列展開部１０１のデータ部を示す。配列展開部１０１のスタック１２３は配列展開部１０１のスタック領域を示し、再帰呼び出し一回につきデータ１２２と同量分消費される。
【００１１】
しかしながら、従来の処理方法においては、次のような課題がある。
第１の課題は、プログラムの記述言語によっては再帰呼び出しが使えない事である。
第２の課題は、再帰呼び出し可能な回数は実行環境であるメモリ１０８の容量に関係なく、スタック１２３の最大サイズによる制限（各システム固有）を受ける為、次元数が極端に多くなると、最終出力である展開後ＸＭＬソース１０７を得る前に、途中で異常終了してしまう事である。すなわち、従来の技術では、スタックを利用した再帰呼び出しを行っている為に、処理可能な次元数はスタックの残量に依存しているという問題点がある。
【００１２】
上述の説明においては、言語処理プログラム等のソースプログラムをマークアップ言語で再表現する場合について説明したが、上記課題は、多次元配列を含むものであれば、再表現の対象（入力データ）が言語処理プログラム等のソースプログラム以外のものであっても共通である。
【００１３】
本発明は、上記実情に鑑みて、再帰呼び出しを用いないで多次元配列を展開することを可能にする情報処理装置、多次元配列の展開処理方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記目的を達成するために、下記の構成の情報処理装置、多次元配列の展開処理方法及びプログラムを提供する。
【００１５】
本発明に係る情報処理装置は、多次元配列の展開処理を行う情報処理装置であって、第１及び第２のバッファと、入力されたデータを走査して前記データに含まれる配列の次元数を検索する検索手段と、前記次元数の奇偶を判定し、奇数の場合、出力先を前記第１のバッファとし、偶数の場合、出力先を前記第２のバッファとする制御を行う制御手段と、前記制御手段が決定した前記出力先に、前記配列を展開する展開手段と、を有し、前記制御手段は、前記展開手段が前記配列を展開したあと、前記次元数を１減らし、前記出力先に出力されたデータを入力データとして、前記奇偶の判定以降の処理を繰り返す制御を行うことを特徴とする。
【００１６】
本発明に係る多次元配列の展開処理方法は、第１及び第２のバッファを用いる多次元配列の展開処理方法であって、入力されたデータを走査して前記データに含まれる配列の次元数を検索する検索ステップと、前記次元数の奇偶を判定する奇偶判定ステップと、前記奇偶判定ステップで奇数の場合、出力先を前記第１のバッファとし、前記奇偶判定ステップで偶数の場合、出力先を前記第２のバッファとする制御を行う制御ステップと、前記制御ステップで決定した前記出力先に、前記配列を展開する展開ステップと、を含み、前記展開ステップのあと、前記次元数を１減らし、前記出力先に出力されたデータを入力データとして、前記奇偶判定ステップから前記展開ステップまでの処理を繰り返すことを特徴とする。
【００１７】
本発明に係る多次元配列の展開処理プログラムは、第１及び第２のバッファを備えるコンピュータに、入力されたデータを走査して前記データに含まれる配列の次元数を検索する検索処理と、前記次元数の奇偶を判定する奇偶判定処理と、前記奇偶判定処理で奇数の場合、出力先を前記第１のバッファとし、前記奇偶判定処理で偶数の場合、出力先を前記第２のバッファとする制御を行う制御処理と、前記制御処理で決定した前記出力先に、前記配列を展開する展開処理と、を実行させ、前記展開処理のあと、前記次元数を１減らし、前記出力先に出力されたデータを入力データとして、前記奇偶判定処理から前記展開処理までの処理を繰り返して実行させることを特徴とする。
【発明の効果】
【００１８】
本発明によれば、再帰呼び出しを用いないで多次元配列を展開することが可能となる。
【図面の簡単な説明】
【００１９】
【図１】本発明を実施するための形態のハードウェア構成及びソフトウェア構成を示すブロック図である。
【図２】本発明を実施するための形態の移行用プログラムが実行されたときの処理の概要を示す図である。
【図３】本発明を実施するための形態の配列展開部の機能構成を示すブロック図である。
【図４】本発明を実施するための形態の多次元配列の展開処理の流れを示すフローチャートである。
【図５】本実施形態に係る多次元配列の展開処理を２次元配列で実行した場合の例におけるデータ状態遷移を説明するための図（初期状態）である。
【図６】本実施形態に係る多次元配列の展開処理を２次元配列で実行した場合の例におけるデータ状態遷移を説明するための図（一次ループ終了時）である。
【図７】本実施形態に係る多次元配列の展開処理を２次元配列で実行した場合の例におけるデータ状態遷移を説明するための図（処理完了）である。
【図８】従来の多次元配列の展開処理を説明するための概念図である。
【発明を実施するための形態】
【００２０】
本発明を実施するための形態は、従来の技術がスタックを利用した再帰呼び出しを行っている為に、処理可能な次元数がスタックの残量に依存していたことに鑑みて、従来再帰呼び出しを行う際に用いていたスタックに代え、２つのワークファイルを用いることにより、スタックを利用した再帰呼び出しを行わない方式である。
【００２１】
すなわち、本実施形態は、マークアップ言語に内在する多次元配列の展開において、２つのワークファイルを介するマルチパス方式により、再帰呼び出しを使わずに次元数無制限の配列展開を行う事を特徴の一つとしている。
【００２２】
なお、下記本実施形態の説明においては、展開対象の多次元配列の用例としてＣＯＢＯＬ、マークアップ言語の用例としてＸＭＬを使用するが、これは本発明を限定するものではない。
【００２３】
図１に、本実施形態のハードウェア構成及びソフトウェア構成を示す。
まず、ハードウェア構成から説明する。
【００２４】
図１中、ＣＰＵ１１０はコンピュータの中央演算装置であり、プログラムの実行を行う。メモリ１０８はコンピュータの一次記憶装置であり、実行要求のあったプログラムを格納し、また、プログラム自体の実行時作業領域としても使われる。
【００２５】
ハードディスク１０９はコンピュータの二次記憶装置であり、ＯＳ１１１を始めとするプログラム群、並びにＣＯＢＯＬソースプログラム１０５のようなデータ群を格納する。また、メモリ１０８同様にプログラム自体の実行時作業領域を提供する。
【００２６】
次に、ソフトウェア構成を説明する。なお、ソフトウェアに入出力されるデータ等についても以下に説明する。
【００２７】
ＯＳ１１１はコンピュータのメモリ１０８上に常駐して常時実行されており、システム全体の運行を司る。コンピュータシステムが起動する前は、図示のように、ハードディスク１０９に格納されており、起動時にＣＰＵ１１０によって呼び出され、メモリ１０８に読み込まれる。
【００２８】
ＣＯＢＯＬソースプログラム１０５は移行対象となるデータであり、ハードディスク１０９に格納されて移行用プログラム１０４の入力となる。
【００２９】
移行用プログラム１０４はハードディスク１０９に格納され、利用者の要求があるとＯＳ１１１によりメモリ１０８上へ展開され、ＣＰＵ１１０により実行される。移行用プログラム１０４の分掌は移行対象ＣＯＢＯＬソースプログラム１０５のＸＭＬ化であるが、ＣＯＢＯＬソースプログラム１０５内に配列の存在を認めると展開前ＸＭＬソース１０６を出力し、配列展開部１０１を起動する。配列展開部１０１起動の必要がない場合、直接最終出力として展開後ＸＭＬソース１０７を出力する。
【００３０】
展開前ＸＭＬソース１０６はハードディスク１０９に格納される中間データであり、配列（表）の展開以外のＸＭＬ化処理を終えたＸＭＬソースで構成され、配列展開部１０１の入力となる。
【００３１】
展開後ＸＭＬソース１０７はハードディスク１０９に格納される最終データであり、配列を含まないＸＭＬソースである。
【００３２】
配列展開部１０１は移行用プログラム１０４の一部をなす（移行用プログラム１０４の配列展開用モジュール）。ハードディスク１０９に格納され、移行用プログラム１０４の要求に応じてＯＳ１１１によりメモリ１０８上へ展開され、ＣＰＵ１１０により実行される。配列展開部１０１の分掌は配列の展開であり、メモリ１０８の代わりにハードディスク１０９内のワークファイルＡ１０２とワークファイルＢ１０３を使用して処理を実行し、展開後ＸＭＬソース１０７を出力する。
【００３３】
ワークファイルＡ１０２はハードディスク１０９内に確保される。配列展開部１０１の奇数回処理ループ時の中間出力先であり、偶数回処理ループ時の入力元ともなる。
【００３４】
ワークファイルＢ１０３もハードディスク１０９内に確保される。配列展開部１０１の偶数回処理ループ時の中間出力先であり、奇数回処理ループ時の入力元ともなる。
【００３５】
図２に、移行用プログラム１０４が実行されたときの処理の概要を示す。
【００３６】
図２において（展開対象の多次元配列の用例としてＣＯＢＯＬ、マークアップ言語の用例としてＸＭＬを使用、また、矢印はデータの流れを示す）、最初の入力であるハードディスク１０９上のＣＯＢＯＬソースプログラム１０５は、メモリ１０８上に配置された移行用プログラム１０４により、配列未展開のＸＭＬの状態でハードディスク１０９上の展開前ＸＭＬソース１０６へ一旦出力され、次いでメモリ１０８上に配置された配列展開部１０１へ引き渡される。配列展開部１０１は１回のパスで、入力された配列の次元を１だけ減らした中間データをハードディスク１０９上のワークファイルへ出力し、入力テキストの持つ次元数だけ反復される。
【００３７】
ワークファイルＡ１０２は奇数回の処理ループの展開途上ＸＭＬソースの出力先であり、偶数回処理ループの入力元ともなる。
【００３８】
ワークファイルＢ１０３は偶数回の処理ループの展開途上ＸＭＬソースの出力先であり、奇数回処理ループの入力元ともなる。
【００３９】
配列展開部１０１は入力元と出力先を交互に入れ換えて処理を反復する事でデータを循環させ、完全に配列の展開を終えた後に最終出力として展開後ＸＭＬソース１０７を出力する。
【００４０】
このようにして、本実施形態では、再帰呼び出しを使わず単純な機構の繰り返しにより配列展開を実現しているので、スタックによる制約を受ける事なく、多次元配列の展開ができる。
【００４１】
以下、配列展開部１０１の構成について図３を参照して詳細に説明する。
図３に、メモリ１０８上へ展開された配列展開部１０１の機能構成を示す。
【００４２】
図示のように、配列展開部１０１は、制御部２０１、検索部２０２、展開部２０３、終末部２０４を有する。以下、各部の機能について説明する。
【００４３】
制御部２０１は、サブモジュールの実行を司る。
検索部２０２は入力データを順処理して最大次元数、並びに該当次元数を持つ配列の繰り返し数とソース内部での位置をメモリ１０８上へ記録する。
【００４４】
展開部２０３は検索部２０２の記録を元に入力データ中の最大次元数を持つ配列の最奥部へ命名用のタグを付加した上で展開し、次元数を１減らした中間データを出力する。
【００４５】
終末部２０４は入力データに対し配列要素の命名処理、及び必要に応じてタグを回収して最終出力を行う。
【００４６】
図４に、配列展開部１０１の動作（多次元配列の展開処理）のフローチャートを示す。
以下、図４に基づいて本実施形態における多次元配列の展開処理の流れについて説明する。
【００４７】
処理Ｓ１０１は図３における検索部２０２の呼び出しである。入力データを最初から最後まで走査して配列の有無、及び存在する場合は最も次元数の高い配列の位置を記録する。
【００４８】
処理Ｓ１０２〜Ｓ１０３はループ制御変数ｉを設定する為の判定処理である。処理実行時の初期化処理として、記録された最高の次元数をループの制御変数ｉへ設定する。
【００４９】
処理Ｓ１０４は入力元と出力先の設定処理である。制御変数ｉの奇偶判定により偶数用入力元／出力先設定処理Ｓ１０５と奇数用入力元／出力先設定処理Ｓ１０６のいづれを実行するか設定する。
【００５０】
処理Ｓ１０７は図３における展開部２０３の呼び出しである。処理Ｓ１０１で記録された位置の配列を展開する。
【００５１】
処理Ｓ１０８〜Ｓ１０９はループの終了判定処理である。制御変数ｉがゼロとなった場合、展開処理の終了条件が満たされる。
【００５２】
制御変数ｉの値により入力元と出力先が交互に入れ替わることでデータが循環し、再帰呼び出しと同等の効果を得る。
【００５３】
以下、本実施形態に係る多次元配列の展開処理を、２次元配列で実行した場合の例を示す。図５，図６，図７は、本例におけるデータ状態遷移を説明するための図である。
【００５４】
図５に示す初期状態では、未展開の配列が＜ＭＡＲＫ＞〜＜／ＭＡＲＫ＞タグによって識別されている。なお、＜ＭＡＲＫ＞〜＜／ＭＡＲＫ＞に挟まれた「ＲＥＰ．００２」は配列の繰り返し回数を示し、また、ＲＥＰ．００２〜ＥＮＤ＿ＲＥＰに挟まれた範囲は配列の範囲を示し、＜ＮＡＭＥ＞〜＜／ＮＡＭＥ＞は配列範囲の名前を示す。
【００５５】
図５において、＜ＬＥＶ＝０２＞〜＜／ＬＥＶ＞配列が＜ＬＥＶ＝０１＞〜＜／ＬＥＶ＞配列の入れ子となっている事で、このデータが２次元、かつ最高の次元数である事を示す。
【００５６】
図６は図４のフローチャートにおいて処理Ｓ１０１〜Ｓ１０９のループが一巡した後のデータの状態である。＜ＬＥＶ＝０２＞〜＜／ＬＥＶ＞配列が展開され、配列範囲が解除されている。また、展開に伴い生じたデータは、暫定で元の配列範囲の名前を修飾した名前を命名され、終末処理用のタグ＜ＭＡＲＫ＞ＮＡＭＥ＜／ＭＡＲＫ＞を付加される。
【００５７】
図７は展開が完全に終了した状態で、＜ＬＥＶ＝０２＞〜＜／ＬＥＶ＞配列同様、今度は＜ＬＥＶ＝０１＞〜＜／ＬＥＶ＞配列が展開されて配列範囲が完全になくなった状態を示す。この後、＜ＭＡＲＫ＞ＮＡＭＥ＜／ＭＡＲＫ＞タグは、終末処理においてＸＭＬ内部で一意となる名票の付加処理に利用される。
【００５８】
（本実施形態の効果の説明）
以上説明したように、本実施形態においては、以下に記載するような効果を奏する。
第１の効果は展開可能な次元数が事実上無制限なことである。その理由は再帰呼び出しを行わないためである。
第２の効果は再帰呼び出しが使えない言語処理系でも適用可能なことである。
【００５９】
（他の実施形態）
以上説明した本実施形態は、本発明を限定するものではなく、本発明は種々の変形実施が可能である。例えば、上記実施形態では、配列展開部は移行用プログラム内に組み込まれていても独立していてもよい。ＣＯＢＯＬソースプログラムは、その他言語のソースプログラムとしてもよい。また、ＸＭＬソースは、その他のマークアップ言語のソースとしてもよい。
【符号の説明】
【００６０】
１０１    配列展開部
１０２    ワークファイルＡ
１０３    ワークファイルＢ
１０４    移行用プログラム
１０５    ＣＯＢＯＬソースプログラム
１０６    展開前ＸＭＬソース
１０７    展開後ＸＭＬソース
１０８    メモリ
１０９    ハードディスク
１１０    ＣＰＵ
２０１    制御部
２０２    検索部
２０３    展開部
２０４    終末部
【図１】
2010211403.tif 000003
【図２】
2010211403.tif 000004
【図３】
2010211403.tif 000005
【図４】
2010211403.tif 000006
【図５】
2010211403.tif 000007
【図６】
2010211403.tif 000008
【図７】
2010211403.tif 000009
【図８】
2010211403.tif 000010