(57)【要約】【課題】プログラム内部の構造体データ及び変数の記述において、従来高級言語のデータ型を意識する事無く、構造体データは構成要素のバイト位置、変数は設定する値のみで記述できるインタプリタ言語とインタプリタ言語を解析実行するプログラムの方式。【解決手段】コンピュータ上で動作し、従来の言語においてデータが持つデータ型を無くし、構造を持つデータの記述機能とプログラム実行の為に必要な最小限の機能を持ったインタプリタ言語解析実行プログラムであって、インタプリタ言語で記述した構造体データ及び変数を元にデータを作成することが出来る。【選択図】図１
2010282248.tif 000002
【特許請求の範囲】
【請求項１】
プログラムソースファイルから中間ファイルを作成し、中間ファイルから１実行文単位で文を取り出して実行処理するプログラム言語解析実行プログラムであって、少なくとも全体サイズ、構成要素のバイト位置、構成要素のサイズ、構成要素の名称を記述した文を実行することにより構造体データの作成を可能とするプログラム言語解析実行プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ上で動作するプログラムであって、インタプリタ型のプログラム言語において構造体データの記述方式と解析実行方式に係る。
【背景技術】
【０００２】
コンピュータで実行するプログラムを開発する上でプログラム内部で使用するデータにおいて構造を持つデータ、特にコンピュータ間のネットワーク通信用プログラムを開発する時には通信データのバイト位置を意識した構造を持つデータを扱う必要が有る。このデータ構造を扱う為のプログラミング言語としてはアセンブラ言語が有効だが、アセンブラ言語はコンピュータ内プロセッサの命令仕様を十分に理解している必要が有り、目的のネットワークの他プロセッサの専門的な知識を必要とする。一方、高級言語ではプロセッサの専門的知識を必要としないがこれらのデータを扱う時は、データを構成する要素単位で言語がサポートするデータ型を組合わせて構造を持つデータを記述作成しなければならず、データの記述に柔軟性が無くまたプログラム自身も複雑なものに成っていた。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開2007-026267
【特許文献２】特開平7-84795
【特許文献３】特開平9-26897
【発明の概要】
【発明が解決しようとする課題】
【０００４】
プログラム内部の構造体データ及び変数の記述においてデータ型を無くし、構造体データは構成要素のバイト位置、変数は設定する値のみで記述できるインタプリタ言語とインタプリタ言語を解析実行するプログラムの方式。
【課題を解決するための手段】
【０００５】
コンピュータ上で動作し、従来の言語においてデータが持つデータ型を無くし、構造を持つデータの記述機能とプログラム実行の為に必要な最小限の機能を持ったインタプリタ言語解析実行プログラムであって、インタプリタ言語で記述した構造体データ及び変数を元にデータを作成することが出来る。
【発明の効果】
【０００６】
構造を持つ通信用データ等の記述作成が容易に成り、プログラムの開発期間の短縮と品質の向上が出来る。また、本発明のプログラミングにおける構造体データ作成方式を特徴とするインタプリタ言語で記述したプログラムは、プログラムが扱う構造にデータを構成する要素サイズの情報を持たせるように設計する事で、そのデータを扱うプログラムの運用後にデータの構成要素のサイズ変更が生じても、データを扱うプログラム内部のデータ定義を書き換える事無く対応が出来、データ仕様変更への対応が容易になる。
【図面の簡単な説明】
【０００７】
【図１】本発明の実施例で示すインタプリタ言語を解析実行するプログラムの構成。
【図２】本発明の実施例で示すインタプリタ言語を解析実行するプログラムメイン処理のフローチャート。
【図３】インタプリタ言語で記述した入力ソースプログラムを中間ファイルに変換作成する処理のフローチャート。
【図４】中間ファイルに変換後の各実行文を解析実行する処理のフローチャート。
【図５】インタプリタ言語のdata文を解析実行し、構造体データを作成する処理のフローチャート。
【図６】インタプリタ言語代入文の解析実行処理フローチャート。
【図７】インタプリタ言語で記述したプログラムソースファイルを最適化した後の中間ファイル出力形式を示す。
【図８】データ・変数・ラベルのスタック情報を示す。
【図９】インタプリタ言語実行文を最適化する時の文名称と変換コードの対応及び文の実行内容を示す。
【図１０】インタプリタ言語でのデータ記述形式を示す。
【図１１】実施例で使用する簡易アドレス帖のデータ仕様を示す。
【図１２】実施例で使用する簡易アドレス帖のプログラム記述例を示す。
【図１３】本発明によるインタプリタ言語でのデータ構造記述において設定する初期値構造へ柔軟に対応出来る記述例を示す。
【発明を実施するための形態】
【０００８】
本発明のインタプリタ言語解析実行プログラムにおいてデータ記述の解析実行方法について説明する。
【０００９】
図1は本発明のプログラミングにおける構造体データ作成方式を特徴とするインタプリタ言語を解析実行するプログラム処理方式の構造図である。本インタプリタ言語を解析実行するプログラム100と、入力となる本インタプリタ言語で記述したプログラムソースファイル101と、本インタプリタ言語を解析実行する為に最適化した中間ファイル102と、本インタプリタ言語で記述したプログラム内の変数、データ及びラベル情報を保持・および取得する為のスタック103と、本インタプリタ言語で記述したプログラム内の変数、データ及びラベル名称をメモリ内に記憶スタックする104と、本インタプリタ言語で記述したプログラム内データの初期値及び実行結果の値を保持するデータ領域105と、実行状況を記録するログ出力ファイル106と、入力した本インタプリタ言語で記述したプログラムソースの内容、実行時のメッセージ及び実行結果をテキストで出力するリストファイル107で構成する。
【００１０】
図2は本発明のプログラミングにおける構造体データ作成方式を特徴とするインタプリタ言語を解析実行するプログラム処理方式するのメイン処理フローである。本発明のインタプリタ言語の解析実行プログラムは事前に入力プログラムソースファイルから最適化した中間ファイルを作成後、中間ファイルから1実行文単位で取出して文に対応した処理を実行し、中間ファイルから取り出す文が無くなるまで繰返し実行する。
【００１１】
200はインタプリタ言語で記述したプログラムソースファイル101を読込み実行に直接必要の無いスペース文字やコメント文を削除し、実行文名称をコード化する事で最適化した中間ファイル102を作成する。次に201は作成した中間ファイル102より1実行文単位で取出す為のポインタを設定し、202〜205で中間ファイル102のデータをポインタに従って文単位で取出し解析実行する。202は中間ファイル102よりポインタが示す1実行文のデータ700を取出し、203は中間ファイル102の最終データ706のチェックを行う。取出した中間ファイルのデータが最終データ706でない時は、204で中間ファイルより取出した文を解析実行し、205で中間ファイル102の処理が完了したデータの次へポインタを更新し、中間ファイル102の最終データ706を検出するまで202〜205を繰返し実行する。
【００１２】
図3は入力のインタプリタ言語で記述したプログラムソースファイル101を読込み、実行時に必要の無いスペース文字やコメント文を削除した文字列と、ラベル及び実行文名称をコード変換したデータを中間ファイル102として出力する処理フローを示す。以降説明中の中間ファイルへの出力は全て追加書きするものとする。最初に300はインタプリタ言語で記述したプログラムソースファイル101をメモリ内に読込み、301はメモリ内に読込み込んだソースプログラムデータを逐次取出す為のポインタを設定し、302〜308で変換処理を行なう。302はポインタが示すメモリ上の読込みデータの終了を検出し、終了していない時は303でスペース文字及びコメント文を検出スキップし、304は有効文字又は文字列が実行文902の種類に一致するか識別し、一致する時は305で実行文に対応するコード901を文コード703として702〜703の形式で中間ファイルに出力する。また、一致しない時は306で文データ又は変数名称として704〜705の形式で中間ファイルに出力し、307はソースプログラムを読込んだメモリのポインタを更新し、302でデータの終了を検出するまで302〜307を繰返し実行する。302で終了を検出した時は308で中間ファイルに最終データ706を出力して中間ファイルの作成処理を終了する。
【００１３】
図4は中間ファイル102より取出した1実行文単位のデータ700を逐次処理実行するフローを示す。400は1実行文単位データを先頭から逐次解析処理する為のポインタを設定し、解析実行は401〜408で行なう。401は文コード703で文の終わりを検出し、文の終わりでない時は402が実行文単位のデータ中の文コード703値により文の種類を識別する。文コード703がラベル名称の時は403でラベル情報のデータ・変数情報スタック103への登録とラベル名称をデータ・変数・ラベル名称スタック104への登録後ラベルが付加する文データの中間ファイル内位置をデータ・変数情報803に設定し、404は処理したラベルデータの次へポインタを更新する。文コード703が実行文の時は405で文コード703に対応した図9で示す実行内容の処理をコール実行し、406はコール先で処理したデータの次へポインタを進める。文コード703が無い時は407で変数名称としてポインタが示す文字列705のデータ・変数・ラベル名称スタック104への登録と図8で示す変数情報を変数属性801でデータ・変数情報スタック103へ登録し、408で処理した変数名称の次へポインタを進める。またこのデータ・変数情報スタック103にスタックする変数サイズ802及び値又はデータの位置803は次に継続する図5data文解析処理又は図6の代入文の実行処理で確定し設定する。以降401が文コード703で文の終わりを検出するまで401〜408を繰返し実行し、文コード703で文の終わりを検出した時点で実行処理を完了する。
【００１４】
図5は本発明のプログラミングにおける構造体データ作成方式を特徴とするインタプリタ言語を解析実行するプログラム処理方式での構造体データ作成方式の処理フローを示す。本発明のプログラミングにおける構造体データは図10(a)data文の記述形式で、中間ファイル102内データ700の文コード703がdata文の時に図5で示すdata文解析処理の入力となる。本実施例では簡単な構造で図11のアドレス帖データ仕様を本発明のプログラミングにおける構造体データ定義のdata文で記述した図12(a)をdata文解析処理の入力としての動作を説明する。
最初に500はdata文の全体サイズ1001アドレス帖データでは1201で示すサイズの領域をデータ領域105から取得し、取得した領域のサイズ1201の値とデータ領域105内の取得アドレスをデータ・変数情報スタックのデータサイズ802及びデータの位置803にそれぞれを設定し407で作成したデータ・変数情報を確定する。501はdata文オペランドを先頭から逐次解析する為の文ポインタをdata文オペランド1003〜1006アドレス帖データでは1202〜1204の先頭に設定する。502〜509はdata文の要素データを解析する為の処理であり、502はデータ文の終了文字1007を文コード703の値で検出する。503でdata文のバイト位置情報1003アドレス帖データでは1202の値よりデータ先頭からのバイト位置を取得し、504はこのバイト位置の要素名称1004アドレス帖データでは1203の有無を識別し、要素名称が有る時は505で新に要素名称情報用の図8で示すデータ・変数情報のデータの場所803にはデータ領域105内の取得アドレスにデータ先頭からのバイト位置を加えた値で作成しデータ・変数情報スタック103に登録する。506は現在処理中のデータ要素の終わり位置1006を検索し次の要素バイト位置1003入力では1202と現在の要素のバイト位置の差分より現在処理中要素のサイズを決定する。但し、次のバイト位置情報1003アドレス帖データでは1202が無くdata文の終了文字1007を検出した時は全体のサイズ1001アドレス帖データでは1201と現在要素のバイト位置の差分を現在要素のサイズ値とする。また、要素名称1004アドレス帖データでは1203が有る時は要素のサイズ及び位置を505で作成したデータ・変数情報のデータサイズ802及びデータの場所803にそれぞれ設定格納後、変数情報の属性801にデータ属性を設定し、要素のデータ・変数情報図8を確定する。507で現在の処理中要素に設定する初期値1005アドレス帖データでは1204の有無を識別し、初期値1005アドレス帖データでは1204が有れば現在のデータ領域105内の取得アドレスにデータ先頭からのバイト位置を加えた要素位置に初期値1005アドレス帖データでは1202の値を設定する。509は現在の要素データ終了文字1006アドレス帖データでは1204の次へポインタを更新し、以降の要素データを処理する為に502〜509をデータ文の終了文字1007を検出するまで繰返し実行する事で構造体データを作成する。
【００１５】
図6は本発明のプログラミングにおける構造体データ作成方式を特徴とするインタプリタ言語を解析実行するプログラム処理方式における図10(b)代入文の処理フローを示す。最初に600は代入文の右辺値データが初期値又は実行文の何れであるかを文コード703の値により識別する。601は文コード703が無く、右辺値データが初期値データ図7(2)文データの形式の時は601で先頭の文字数704により初期値のデータ長を識別し、初期値長が5バイト以上の時は602でデータ領域105内にデータ長分の領域を取得してアドレスを左辺値の変数情報図8のデータの場所803に設定後、変数情報の属性801にデータ属性を設定し、603は取得したデータ領域105内のデータ領域に初期値を格納する。初期値長が1〜4バイトの時は604で初期値データをコンピュータで演算可能な31ビット長整数に変換後、左辺値変数情報の属性801に変数属性を設定し、605で左辺値変数情報の値803に31ビット長の整数値を格納する。また、600での右辺値識別結果が実行文の時は606で対応する実行文処理図9の処理をコール実行し、607で左辺値変数情報の属性801に変数属性を設定し、実行結果の返値を左辺値変数情報の値803に設定する。
【００１６】
図7は本発明のプログラミングにおける構造体データ作成方式を特徴とするインタプリタ言語を解析実行するプログラム処理方式のインタプリタ言語で記述したプログラムソースファイル101を最適化した中間ファイル102のデータ形式を示し、図3の中間ファイル作成処理が出力する。700のデータ１〜ｎそれぞれがプログラムソースの1実行文に対応しており、701の(1)〜(3)で示すデータの集合で構成する。
図7(1)は図9実行文のコード901を中間ファイルに出力する時のデータ形式で、先頭1バイトのデータ長702と、図9実行文のコード901値で示す文コード703から成る。
【００１７】
図7(2)はラベル名称、変数名称又は文データを中間ファイルに出力する時のデータ形式で、先頭1バイトはラベル名称、変数名称又は文データの文字数704と、ラベル、変数名称又は文データを示す文字列705から成る。
【００１８】
図7(3)706は中間ファイルの終了を示す最終データ。
【００１９】
図8はデータ、変数又はラベルの情報をデータ・変数情報スタック103へスタックする時の内容を示す。800はデータ、変数又はラベルの名称を格納したデータ・変数・ラベル名称スタック104内のアドレス。属性801はデータ、変数又はラベルの種類を識別する為の情報で、変数で初期値サイズが1〜4バイト時は変数属性を示し、data文及び変数で初期値サイズが5バイト以上時はデータ属性を示す。データ・変数有効サイズ802はdata文又は変数の時に有効でdata文の全体サイズ1001、data文の要素サイズまたは変数値1009が示すデータ長。値又はデータの場所803は属性801で示す内容により意味が異なり、属性801がデータ属性の時はデータ領域105内のデータアドレスを示し、属性801が変数属性の時は変数値で初期値の記述桁数に関係なくコンピュータで演算可能な31ビット長の整数値を示す。また、属性801がラベル属性の時はデータ・変数・ラベル名称スタック104内の変数またはラベル名称の格納アドレスを示す。
【００２０】
図9は本発明のプログラミングにおける構造体データ作成方式を特徴とするインタプリタ言語を解析実行するプログラム処理方式でインタプリタ言語を構成する代表的な実行文の種類、文コード703の割当て値および実行処理内容を示す。コード901は中間ファイル実行文のデータ形式図７(1)の文コード703に設定する値であり、各実行文毎に決めた1バイト長の識別コード値。902は実行文の種類で、プログラムプログラムソースファイル101を最適化する時に文コードへ変換対象となる予約語。903は各実行文に対応した実行処理内容を示す
図10(a) は本発明のプログラミングにおける構造体データ作成方式を特徴とするインタプリタ言語を解析実行するプログラム処理方式のインタプリタ言語で構造体データを記述する為のdata文の形式を示す。1000はデータ全体に付ける名称であり、1001はdata文が定義するデータ全体のサイズを示す。1002はデータを構成する要素記述の開始文字で、1003〜1006はデータを構成する各要素情報を示す。1003はデータ内における要素の先頭バイト位置を決める値または式、1004は要素を個別に参照又は更新する必要がある時の参照名称、1005はデータ内要素に初期値がある時はその値、1006は各要素情報記述の終了文字、1007はdata文の終了文字を示す。
【００２１】
図10(b)は本発明のプログラミングにおける構造体データ作成方式を特徴とするインタプリタ言語での構造体以外の変数記述形式を示す。1008は作成する変数名称または代入先の変数名称を記述し、1009は変数に代入する項目を記述し、1010は文の終了文字を示す。
【００２２】
図11は実施例で使用する構造を持つデータの仕様例を示したもので、ここでは簡易住所録のデータ構造仕様で、データ全体の名称およびサイズ、構成要素のバイト位置、構成要素のサイズ、構成要素の参照名称および構成要素の初期値を示す。
【００２３】
図12は図11で示した簡易住所録のデータ仕様を本発明のプログラミングにおける構造体データ作成方式を特徴とするインタプリタ言語とC言語で記述したものを示す。
【００２４】
図12(a) は本発明のプログラミングにおける構造体データ作成方式を特徴とするインタプリタ言語を解析実行するプログラム処理方式のインタプリタ言語での記述を示す。1200は図11簡易住所録のデータ構造仕様のアドレス帖データの名称を記述し、アドレス帖データのサイズは1201に記述し、各要素の位置は1202に記述し、各要素の名称は1203に記述し、要素の設定初期値は1204に記述する。簡易住所録のデータ構造は簡易住所録を構成する各要素のバイト位置1202で決まる。
【００２５】
図12(b)は一般的な高級言語のC言語での記述を示す。C言語では図11簡易住所録のデータ仕様で示す構造を新たにデータ型として定義する必要があり、初期値は新たに定義したデータ型を持つ変数に代入する事で設定する。また、簡易住所録のデータ構造を新たにデータ型として定義するには簡易住所録のデータ構造を構成する各要素のサイズ情報を元に各サイズに合うC言語のデータ型に対応させて記述する必要がある。Ｃ言語では、図11簡易住所録のデータ構造仕様のアドレス帖名称は1205に記述し、各要素のサイズ及び要素名称の組合せを1206に記述し、要素の設定初期値は1207に記述する。簡易住所録のデータ構造はC言語データ型の組み合わせ方1206で決まる。
【００２６】
図13はデータ構造定義を書き換える事無くデータ形状の変化に対応出来る記述例を示す。本発明で示したインタプリタ言語で記述定義するデータ構造において初期値または設定するデータの各要素にサイズ情報を持つ時は、その値によってデータ構造を構成する要素の見え方が変り、データ形状の変化に対応できる事を説明する。
【００２７】
図13で示すデータは全体が4096バイト長で３項目の要素1300〜1302で構成し、要素1300は要素名称がsize1の1バイト長要素データサイズ情報と要素名称がelement1の要素データより成り、要素1301は要素名称がsize2の1バイト長要素データサイズと要素名称がelement2の要素データより成り、要素1302は要素名称がsize3の1バイト長要素データサイズと要素名称がelement3の要素データより成り、1303は位置情報のみを示す。この時に要素1301、要素1302および1303のバイト位置情報が変数に成っている為バイト位置は実行時の変数値で決まる。またaddr(element1)、addr(element2)およびaddr(element3)の実行文で得られる戻り値はこのdata文が作成するデータ領域先頭からのバイト位置で、element1、element2およびelement3の各バイト位置の値とする。この記述例では要素1301のバイト位置は要素1300のelement1の位置addr(element1)の戻り値にsize1の初期値を加えた値。同様に要素1302のバイト位置は要素1301のelement2の位置addr(element2)の戻り値にsize2の初期値を加えた値で決まるり、1302の終了位置を決める1303のバイト位置は要素1302のelement3の位置addr(element3)の戻り値にsize3の初期値を加えた値で決まる事になる。データの構造は各要素のバイト位置で決まる為、各要素の設定サイズを書き換えればdata文の記述を変更しなくてもデータ構造が変わり、この記述例では全体が4096バイト以内でデータの形を変える事が出来る事に成る。
【符号の説明】
【００２８】
１００  インタプリタ言語解析実行プログラム
１０１  プログラムソースファイル
１０２  中間ファイル
１０３  データ・変数・ラベル情報スタック
１０４  データ・変数・ラベル名称スタック
１０５  データ領域
１０６  実行ログテキストファイル
１０７  実行結果テキストファイル
【図１】
2010282248.tif 000003
【図２】
2010282248.tif 000004
【図３】
2010282248.tif 000005
【図４】
2010282248.tif 000006
【図５】
2010282248.tif 000007
【図６】
2010282248.tif 000008
【図７】
2010282248.tif 000009
【図８】
2010282248.tif 000010
【図９】
2010282248.tif 000011
【図１０】
2010282248.tif 000012
【図１１】
2010282248.tif 000013
【図１２】
2010282248.tif 000014
【図１３】
2010282248.tif 000015