JP2768073B2 - プログラム間相互呼出し方式 - Google Patents
プログラム間相互呼出し方式Info
- Publication number
- JP2768073B2 JP2768073B2 JP3226501A JP22650191A JP2768073B2 JP 2768073 B2 JP2768073 B2 JP 2768073B2 JP 3226501 A JP3226501 A JP 3226501A JP 22650191 A JP22650191 A JP 22650191A JP 2768073 B2 JP2768073 B2 JP 2768073B2
- Authority
- JP
- Japan
- Prior art keywords
- exception
- interpreter
- program
- language
- state
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims description 22
- 238000006243 chemical reaction Methods 0.000 claims description 35
- 230000006870 function Effects 0.000 claims description 35
- 230000010365 information processing Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 2
- 101150025789 RITA1 gene Proteins 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Landscapes
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
Description
【0001】
【産業上の利用分野】本発明はいくつかの異なるプログ
ラミング言語(以下、単に言語という)によって作成さ
れる情報処理システムにおけるプログラム間相互呼出し
方式に関し、インタプリタと他言語プログラム(そのイ
ンタプリタに係る言語と異なる言語の原始プログラムに
基づいてコンパイラにより作成された目的プログラム)
との間で相互呼出しを行うプログラム間相互呼出し方式
に関する。
ラミング言語(以下、単に言語という)によって作成さ
れる情報処理システムにおけるプログラム間相互呼出し
方式に関し、インタプリタと他言語プログラム(そのイ
ンタプリタに係る言語と異なる言語の原始プログラムに
基づいてコンパイラにより作成された目的プログラム)
との間で相互呼出しを行うプログラム間相互呼出し方式
に関する。
【0002】
【従来の技術】近年、計算機による情報処理システムの
多様化および複雑化に伴い、いくつかの言語に係るプロ
グラム(モジュール)が組み合わされて1つの情報処理
システムが構築される機会が増加しつつある。これは、
各言語にはそれぞれに特徴があり、情報処理システムの
構成要素の各プログラムの原始プログラムをそれぞれに
適合した言語によって記述することが望ましいからであ
る。
多様化および複雑化に伴い、いくつかの言語に係るプロ
グラム(モジュール)が組み合わされて1つの情報処理
システムが構築される機会が増加しつつある。これは、
各言語にはそれぞれに特徴があり、情報処理システムの
構成要素の各プログラムの原始プログラムをそれぞれに
適合した言語によって記述することが望ましいからであ
る。
【0003】ここで、原始プログラムが異なる言語によ
って記述されている2つのプログラムにおける各呼出し
インタフェースはそれぞれの言語仕様によって異なるた
めに、2つのプログラムの間の呼出しに際してはいずれ
かのプログラムの呼出しインタフェースを他のプログラ
ムに合わせたものに変更する必要が生じる。
って記述されている2つのプログラムにおける各呼出し
インタフェースはそれぞれの言語仕様によって異なるた
めに、2つのプログラムの間の呼出しに際してはいずれ
かのプログラムの呼出しインタフェースを他のプログラ
ムに合わせたものに変更する必要が生じる。
【0004】このような情報処理システムにおいて、イ
ンタプリタと他言語プログラムとの間で行われるプログ
ラム間相互呼出し方式は、インタプリタの拡張機能とし
て実現されるのが一般的である。
ンタプリタと他言語プログラムとの間で行われるプログ
ラム間相互呼出し方式は、インタプリタの拡張機能とし
て実現されるのが一般的である。
【0005】従来、この種のプログラム間相互呼出し方
式は、引数情報(プログラム間で引数を適正に伝えるた
めの情報であり、各プログラムにおける命令の内部表現
や引数の値等に関する情報)の変換を行った上でプログ
ラム間の制御の受渡しを行うだけにとどまっていた。
式は、引数情報(プログラム間で引数を適正に伝えるた
めの情報であり、各プログラムにおける命令の内部表現
や引数の値等に関する情報)の変換を行った上でプログ
ラム間の制御の受渡しを行うだけにとどまっていた。
【0006】
【発明が解決しようとする課題】上述した従来のプログ
ラム間相互呼出し方式では、インタプリタと他言語プロ
グラムとの間の呼出しインタフェースにおいて、引数情
報の変換だけが行われており、例外処理に関する定義状
態の変更は行われていないので、インタプリタおよび他
言語プログラムにおける例外処理の適正な実行が保証さ
れず、一方のプログラム(インタプリタまたは他言語プ
ログラム)における適正でない例外処理の実行により他
のプログラム(他言語プログラムまたはインタプリタ)
の実行に悪影響を与えるおそれがあるという欠点があっ
た。
ラム間相互呼出し方式では、インタプリタと他言語プロ
グラムとの間の呼出しインタフェースにおいて、引数情
報の変換だけが行われており、例外処理に関する定義状
態の変更は行われていないので、インタプリタおよび他
言語プログラムにおける例外処理の適正な実行が保証さ
れず、一方のプログラム(インタプリタまたは他言語プ
ログラム)における適正でない例外処理の実行により他
のプログラム(他言語プログラムまたはインタプリタ)
の実行に悪影響を与えるおそれがあるという欠点があっ
た。
【0007】近年のように情報処理システムが高度化す
ると、情報処理システムのスタイルがデータをトップダ
ウンに処理するデータ指向のスタイルからリアルタイム
な利用者からの要求を処理するイベント(事象)指向の
スタイルに移行しつつある。イベント指向の情報処理シ
ステムにおいては、同期的な例外事象(不正アドレス参
照や算術オーバフロー等)の他に非同期的な例外事象
(利用者による割込みキーの押下やマウスの操作等)が
発生しやすいので、インタプリタおよび他言語プログラ
ムにおいて適正な例外処理の実行が保証されないという
上記欠点は特に深刻なものとなる。
ると、情報処理システムのスタイルがデータをトップダ
ウンに処理するデータ指向のスタイルからリアルタイム
な利用者からの要求を処理するイベント(事象)指向の
スタイルに移行しつつある。イベント指向の情報処理シ
ステムにおいては、同期的な例外事象(不正アドレス参
照や算術オーバフロー等)の他に非同期的な例外事象
(利用者による割込みキーの押下やマウスの操作等)が
発生しやすいので、インタプリタおよび他言語プログラ
ムにおいて適正な例外処理の実行が保証されないという
上記欠点は特に深刻なものとなる。
【0008】本発明の目的は、上述の点に鑑み、インタ
プリタおよび他言語プログラムにおける適正な例外処理
の実行を保証することができるプログラム間相互呼出し
方式を提供することにある。
プリタおよび他言語プログラムにおける適正な例外処理
の実行を保証することができるプログラム間相互呼出し
方式を提供することにある。
【0009】
【課題を解決するための手段】本発明のプログラム間相
互呼出し方式は、インタプリタと他言語プログラムとの
間のプログラム間相互呼出し方式において、例外状態情
報が設定される例外捕獲機構と、前記例外捕獲機構内の
例外状態情報をインタプリタ例外状態情報から他言語プ
ログラム例外状態情報に変更したり、他言語プログラム
例外状態情報からインタプリタ例外状態情報に変更した
りする例外状態変更部と、インタプリタが他言語プログ
ラムを呼び出す時に当該呼出しに係る引数情報をインタ
プリタ表現から他言語プログラム表現に変換して制御を
前記例外状態変更部に渡す他言語引数変換部と、前記例
外状態変更部による前記例外捕獲機構内の例外状態情報
のインタプリタ例外状態情報から他言語プログラム例外
状態情報への変更後に他言語プログラムに制御を渡し、
他言語プログラムにおける当該呼出しに係る処理が終了
した後に前記例外状態変更部に制御を戻す他言語制御渡
し部と、前記例外状態変更部による前記例外捕獲機構内
の例外状態情報の他言語プログラム例外状態情報からイ
ンタプリタ例外状態情報への変更後に他言語プログラム
表現の返却値をインタプリタ表現の返却値に変換してイ
ンタプリタに渡すインタプリタ返却値変換部と、他言語
プログラムがインタプリタを呼び出す時に当該呼出しに
係る引数情報を他言語プログラム表現からインタプリタ
表現に変換して制御を前記例外状態変更部に渡すインタ
プリタ引数変換部と、前記例外状態変更部による前記例
外捕獲機構内の例外状態情報の他言語プログラム例外状
態情報からインタプリタ例外状態情報への変更後にイン
タプリタに制御を渡し、インタプリタにおける当該呼出
しに係る処理が終了した後に前記例外状態変更部に制御
を戻すインタプリタ制御渡し部と、前記例外状態変更部
による前記例外捕獲機能内の例外状態情報のインタプリ
タ例外状態情報から他言語プログラム例外状態情報への
変更後にインタプリタ表現の返却値を他言語プログラム
表現の返却値に変換して他言語プログラムに渡す他言語
返却値変換部とを有する。
互呼出し方式は、インタプリタと他言語プログラムとの
間のプログラム間相互呼出し方式において、例外状態情
報が設定される例外捕獲機構と、前記例外捕獲機構内の
例外状態情報をインタプリタ例外状態情報から他言語プ
ログラム例外状態情報に変更したり、他言語プログラム
例外状態情報からインタプリタ例外状態情報に変更した
りする例外状態変更部と、インタプリタが他言語プログ
ラムを呼び出す時に当該呼出しに係る引数情報をインタ
プリタ表現から他言語プログラム表現に変換して制御を
前記例外状態変更部に渡す他言語引数変換部と、前記例
外状態変更部による前記例外捕獲機構内の例外状態情報
のインタプリタ例外状態情報から他言語プログラム例外
状態情報への変更後に他言語プログラムに制御を渡し、
他言語プログラムにおける当該呼出しに係る処理が終了
した後に前記例外状態変更部に制御を戻す他言語制御渡
し部と、前記例外状態変更部による前記例外捕獲機構内
の例外状態情報の他言語プログラム例外状態情報からイ
ンタプリタ例外状態情報への変更後に他言語プログラム
表現の返却値をインタプリタ表現の返却値に変換してイ
ンタプリタに渡すインタプリタ返却値変換部と、他言語
プログラムがインタプリタを呼び出す時に当該呼出しに
係る引数情報を他言語プログラム表現からインタプリタ
表現に変換して制御を前記例外状態変更部に渡すインタ
プリタ引数変換部と、前記例外状態変更部による前記例
外捕獲機構内の例外状態情報の他言語プログラム例外状
態情報からインタプリタ例外状態情報への変更後にイン
タプリタに制御を渡し、インタプリタにおける当該呼出
しに係る処理が終了した後に前記例外状態変更部に制御
を戻すインタプリタ制御渡し部と、前記例外状態変更部
による前記例外捕獲機能内の例外状態情報のインタプリ
タ例外状態情報から他言語プログラム例外状態情報への
変更後にインタプリタ表現の返却値を他言語プログラム
表現の返却値に変換して他言語プログラムに渡す他言語
返却値変換部とを有する。
【0010】
【作用】本発明のプログラム間相互呼出し方式では、例
外捕獲機構が例外状態情報を設定しており、例外状態変
更部が例外捕獲機構内の例外状態情報をインタプリタ例
外状態情報から他言語プログラム例外状態情報に変更し
たり、他言語プログラム例外状態情報からインタプリタ
例外状態情報に変更したりする。インタプリタが他言語
プログラムを呼び出す時に、他言語引数変換部は当該呼
出しに係る引数情報をインタプリタ表現から他言語プロ
グラム表現に変換して制御を例外状態変更部に渡し、他
言語制御渡し部は例外状態変更部による例外捕獲機構内
の例外状態情報のインタプリタ例外状態情報から他言語
プログラム例外状態情報への変更後に他言語プログラム
に制御を渡し、他言語プログラムにおける当該呼出しに
係る処理が終了した後に例外状態変更部に制御を戻し、
インタプリタ返却値変換部は例外状態変更部による例外
捕獲機構内の例外状態情報の他言語プログラム例外状態
情報からインタプリタ例外状態情報への変更後に他言語
プログラム表現の返却値をインタプリタ表現の返却値に
変換してインタプリタに渡す。他言語プログラムがイン
タプリタを呼び出す時に、インタプリタ引数変換部は当
該呼出しに係る引数情報を他言語プログラム表現からイ
ンタプリタ表現に変換して制御を例外状態変更部に渡
し、インタプリタ制御渡し部は例外状態変更部による例
外捕獲機構内の例外状態情報の他言語プログラム例外状
態情報からインタプリタ例外状態情報への変更後にイン
タプリタに制御を渡し、インタプリタにおける当該呼出
しに係る処理が終了した後に例外状態変更部に制御を戻
し、他言語返却値変換部は例外状態変更部による例外捕
獲機能内の例外状態情報のインタプリタ例外状態情報か
ら他言語プログラム例外状態情報への変更後にインタプ
リタ表現の返却値を他言語プログラム表現の返却値に変
換して他言語プログラムに渡す。
外捕獲機構が例外状態情報を設定しており、例外状態変
更部が例外捕獲機構内の例外状態情報をインタプリタ例
外状態情報から他言語プログラム例外状態情報に変更し
たり、他言語プログラム例外状態情報からインタプリタ
例外状態情報に変更したりする。インタプリタが他言語
プログラムを呼び出す時に、他言語引数変換部は当該呼
出しに係る引数情報をインタプリタ表現から他言語プロ
グラム表現に変換して制御を例外状態変更部に渡し、他
言語制御渡し部は例外状態変更部による例外捕獲機構内
の例外状態情報のインタプリタ例外状態情報から他言語
プログラム例外状態情報への変更後に他言語プログラム
に制御を渡し、他言語プログラムにおける当該呼出しに
係る処理が終了した後に例外状態変更部に制御を戻し、
インタプリタ返却値変換部は例外状態変更部による例外
捕獲機構内の例外状態情報の他言語プログラム例外状態
情報からインタプリタ例外状態情報への変更後に他言語
プログラム表現の返却値をインタプリタ表現の返却値に
変換してインタプリタに渡す。他言語プログラムがイン
タプリタを呼び出す時に、インタプリタ引数変換部は当
該呼出しに係る引数情報を他言語プログラム表現からイ
ンタプリタ表現に変換して制御を例外状態変更部に渡
し、インタプリタ制御渡し部は例外状態変更部による例
外捕獲機構内の例外状態情報の他言語プログラム例外状
態情報からインタプリタ例外状態情報への変更後にイン
タプリタに制御を渡し、インタプリタにおける当該呼出
しに係る処理が終了した後に例外状態変更部に制御を戻
し、他言語返却値変換部は例外状態変更部による例外捕
獲機能内の例外状態情報のインタプリタ例外状態情報か
ら他言語プログラム例外状態情報への変更後にインタプ
リタ表現の返却値を他言語プログラム表現の返却値に変
換して他言語プログラムに渡す。
【0011】
【実施例】次に、本発明について図面を参照して詳細に
説明する。
説明する。
【0012】図1は、本発明のプログラム間相互呼出し
方式の一実施例の構成を示すブロック図である。
方式の一実施例の構成を示すブロック図である。
【0013】本実施例のプログラム間相互呼出し方式
は、例外状態再設定手段1と、インタプリタ2と、他言
語プログラム3と、他言語引数変換部4と、他言語制御
渡し部6と、インタプリタ返却値変換部7と、インタプ
リタ制御渡し部11と、インタプリタ引数変換部12
と、他言語返却値変換部13とを含んで構成されてい
る。なお、例外状態再設定手段1,他言語引数変換部
4,他言語制御渡し部6,インタプリタ返却値変換部
7,インタプリタ制御渡し部11,インタプリタ引数変
換部12および他言語返却値変換部13は、インタプリ
タ2の拡張機能として実現される。
は、例外状態再設定手段1と、インタプリタ2と、他言
語プログラム3と、他言語引数変換部4と、他言語制御
渡し部6と、インタプリタ返却値変換部7と、インタプ
リタ制御渡し部11と、インタプリタ引数変換部12
と、他言語返却値変換部13とを含んで構成されてい
る。なお、例外状態再設定手段1,他言語引数変換部
4,他言語制御渡し部6,インタプリタ返却値変換部
7,インタプリタ制御渡し部11,インタプリタ引数変
換部12および他言語返却値変換部13は、インタプリ
タ2の拡張機能として実現される。
【0014】例外状態再設定手段1は、インタプリタ2
が他言語プログラム3を呼び出す時に例外捕獲機構9内
に設定されている例外状態情報をインタプリタ例外状態
情報8から他言語プログラム例外状態情報10に変更し
他言語プログラム3がインタプリタ2を呼び出す時に例
外捕獲機構9内に設定されている例外状態情報を他言語
プログラム例外状態情報10からインタプリタ例外状態
情報8に変更する例外状態変更部5と、インタプリタ2
の実行時における例外状態情報(いくつかの例外事象と
各例外事象の発生時に行われるべき例外処理を特定(定
義)するための情報との対応を示す情報)であるインタ
プリタ例外状態情報8と、現時点での例外状態情報を記
憶している例外捕獲機構9と、他言語プログラム3の実
行時における例外状態情報である他言語プログラム例外
状態情報10とを含んで構成されている(図1中のイン
タプリタ例外状態情報8と例外捕獲機構9との間の実線
および例外捕獲機構9と他言語プログラム例外状態情報
10との間の破線は、図1に示す時点で例外捕獲機構9
内にインタプリタ例外状態情報8が設定されていること
を示している)。
が他言語プログラム3を呼び出す時に例外捕獲機構9内
に設定されている例外状態情報をインタプリタ例外状態
情報8から他言語プログラム例外状態情報10に変更し
他言語プログラム3がインタプリタ2を呼び出す時に例
外捕獲機構9内に設定されている例外状態情報を他言語
プログラム例外状態情報10からインタプリタ例外状態
情報8に変更する例外状態変更部5と、インタプリタ2
の実行時における例外状態情報(いくつかの例外事象と
各例外事象の発生時に行われるべき例外処理を特定(定
義)するための情報との対応を示す情報)であるインタ
プリタ例外状態情報8と、現時点での例外状態情報を記
憶している例外捕獲機構9と、他言語プログラム3の実
行時における例外状態情報である他言語プログラム例外
状態情報10とを含んで構成されている(図1中のイン
タプリタ例外状態情報8と例外捕獲機構9との間の実線
および例外捕獲機構9と他言語プログラム例外状態情報
10との間の破線は、図1に示す時点で例外捕獲機構9
内にインタプリタ例外状態情報8が設定されていること
を示している)。
【0015】図2(a)は、LISPプログラムにおけ
る関数定義の一例を示す図である。
る関数定義の一例を示す図である。
【0016】図2(b)は、Cプログラムにおける関数
定義の一例を示す図である。
定義の一例を示す図である。
【0017】図3は、本実施例のプログラム間相互呼出
し方式の具体的な動作を説明するための図である。
し方式の具体的な動作を説明するための図である。
【0018】次に、このように構成された本実施例のプ
ログラム間相互呼出し方式の動作について説明する。
ログラム間相互呼出し方式の動作について説明する。
【0019】第1に、インタプリタ2が処理の過程で他
言語プログラム3を呼び出す場合の動作を説明する。
言語プログラム3を呼び出す場合の動作を説明する。
【0020】他言語引数変換部4は、当該呼出しに係る
引数情報をインタプリタ表現(インタプリタ2における
表現)から他言語プログラム表現(他言語プログラム3
における表現)に変換する。
引数情報をインタプリタ表現(インタプリタ2における
表現)から他言語プログラム表現(他言語プログラム3
における表現)に変換する。
【0021】例外状態再設定手段1内の例外状態変更部
5は、例外捕獲機構9内に設定されている例外状態情報
をインタプリ例外状態情報8から他言語プログラム例外
状態情報10に変更する。
5は、例外捕獲機構9内に設定されている例外状態情報
をインタプリ例外状態情報8から他言語プログラム例外
状態情報10に変更する。
【0022】他言語制御渡し部6は、他言語引数変換部
4における変換および例外状態変更部5における変更の
後に、他言語プログラム3に制御を渡す。
4における変換および例外状態変更部5における変更の
後に、他言語プログラム3に制御を渡す。
【0023】第2に、以上のようにして呼び出された他
言語プログラム3が当該呼出しに係る処理を終えて返却
値をインタプリタ2に戻す場合の動作を説明する。
言語プログラム3が当該呼出しに係る処理を終えて返却
値をインタプリタ2に戻す場合の動作を説明する。
【0024】他言語プログラム3における当該呼出しに
係る処理が終了し他言語制御渡し部6に制御が戻される
と、他言語制御渡し部6は例外状態再設定手段1内の例
外状態変更部5に制御を渡す。
係る処理が終了し他言語制御渡し部6に制御が戻される
と、他言語制御渡し部6は例外状態再設定手段1内の例
外状態変更部5に制御を渡す。
【0025】例外状態変更部5は、例外捕獲機構9内に
設定されている例外状態情報を他言語プログラム例外状
態情報10からインタプリタ例外状態情報8に戻す。
設定されている例外状態情報を他言語プログラム例外状
態情報10からインタプリタ例外状態情報8に戻す。
【0026】インタプリタ返却値変換部7は、他言語プ
ログラム表現の返却値をインタプリタ表現に変換し、変
換後の返却値をインタプリタ2に渡す。
ログラム表現の返却値をインタプリタ表現に変換し、変
換後の返却値をインタプリタ2に渡す。
【0027】第3に、インタプリタ2から呼び出された
他言語プログラム3が当該呼出しに係る処理の過程で逆
にインタプリタ2を呼び出す場合の動作を説明する。
他言語プログラム3が当該呼出しに係る処理の過程で逆
にインタプリタ2を呼び出す場合の動作を説明する。
【0028】インタプリタ引数変換部12は、他言語プ
ログラム3からインタプリタ2への呼出しに係る引数情
報を他言語プログラム表現からインタプリタ表現に変換
する。
ログラム3からインタプリタ2への呼出しに係る引数情
報を他言語プログラム表現からインタプリタ表現に変換
する。
【0029】例外状態再設定手段1内の例外状態変更部
5は、例外捕獲機構9内に設定されている例外状態情報
を他言語プログラム例外状態情報10からインタプリタ
例外状態情報8に変更する。
5は、例外捕獲機構9内に設定されている例外状態情報
を他言語プログラム例外状態情報10からインタプリタ
例外状態情報8に変更する。
【0030】インタプリタ制御渡し部11は、インタプ
リタ引数変換部12における変換および例外状態変更部
5における変更の後に、インタプリタ2に制御を渡す。
リタ引数変換部12における変換および例外状態変更部
5における変更の後に、インタプリタ2に制御を渡す。
【0031】第4に、以上のようにして呼び出されたイ
ンタプリタ2が当該呼出しに係る処理を終えて返却値を
他言語プログラム3に戻す場合の動作を説明する。
ンタプリタ2が当該呼出しに係る処理を終えて返却値を
他言語プログラム3に戻す場合の動作を説明する。
【0032】インタプリタ2における当該呼出しに係る
処理が終了しインタプリタ制御渡し部11に制御が戻さ
れると、インタプリタ制御渡し部11は例外状態再設定
手段1内の例外状態変更部5に制御を渡す。
処理が終了しインタプリタ制御渡し部11に制御が戻さ
れると、インタプリタ制御渡し部11は例外状態再設定
手段1内の例外状態変更部5に制御を渡す。
【0033】例外状態変更部5は、例外捕獲機構9内に
設定されている例外状態情報をインタプリタ例外状態情
報8から他言語プログラム例外状態情報10に戻す。
設定されている例外状態情報をインタプリタ例外状態情
報8から他言語プログラム例外状態情報10に戻す。
【0034】他言語返却値変換部13は、インタプリタ
表現の返却値を他言語プログラム表現に変換し、変換後
の返却値を他言語プログラム3に渡す。
表現の返却値を他言語プログラム表現に変換し、変換後
の返却値を他言語プログラム3に渡す。
【0035】次に、図2(a)および(b)ならびに図
3を参照して、本実施例のプログラム間相互呼出し方式
の具体的な動作について説明する。
3を参照して、本実施例のプログラム間相互呼出し方式
の具体的な動作について説明する。
【0036】今、図1中のインタプリタ2がLISPイ
ンタプリタであり他言語プログラム3がC言語プログラ
ム(Cプログラムを原始プログラムとする目的プログラ
ム)である場合の動作について考える(図3中の「LI
SPインタプリタ」には、その拡張機能である図1中の
例外状態再設定手段1,他言語引数変換部4,他言語制
御渡し部6,インタプリタ返却値変換部7,インタプリ
タ制御渡し部11,インタプリタ引数変換部12および
他言語返却値変換部13が含まれている)。
ンタプリタであり他言語プログラム3がC言語プログラ
ム(Cプログラムを原始プログラムとする目的プログラ
ム)である場合の動作について考える(図3中の「LI
SPインタプリタ」には、その拡張機能である図1中の
例外状態再設定手段1,他言語引数変換部4,他言語制
御渡し部6,インタプリタ返却値変換部7,インタプリ
タ制御渡し部11,インタプリタ引数変換部12および
他言語返却値変換部13が含まれている)。
【0037】LISPインタプリタに係るインタプリタ
例外状態情報8およびC言語プログラムに係る他言語プ
ログラム例外状態情報10においては、利用者による割
込みキーの押下という非同期的な例外事象に対して次の
ような例外処理が定義されているものとする。 インタプリタ例外状態情報8:「LISPインタプ
リタを中断するための割込みキーの押下と認識し関数b
reakを呼び出す」 他言語プログラム例外状態情報10:「その割込み
キーの押下を無視する」
例外状態情報8およびC言語プログラムに係る他言語プ
ログラム例外状態情報10においては、利用者による割
込みキーの押下という非同期的な例外事象に対して次の
ような例外処理が定義されているものとする。 インタプリタ例外状態情報8:「LISPインタプ
リタを中断するための割込みキーの押下と認識し関数b
reakを呼び出す」 他言語プログラム例外状態情報10:「その割込み
キーの押下を無視する」
【0038】LISPインタプリタに係るLISPプロ
グラム中で定義されている関数bar(図2(a)参
照)は、引数を1つとり、その引数を2で割った結果を
戻す関数である。
グラム中で定義されている関数bar(図2(a)参
照)は、引数を1つとり、その引数を2で割った結果を
戻す関数である。
【0039】C言語プログラムに係るCプログラム中で
定義されている関数foo(図2(b)参照)は、与え
られた引数をそのまま関数barに与えて、その結果に
1を加えた値を戻す関数である。また、関数fooの中
に存在する関数signalは、例外捕獲機構9に対し
て「プログラム実行中に割込みキーが押されてもそれを
無視する」という例外処理を要求している。
定義されている関数foo(図2(b)参照)は、与え
られた引数をそのまま関数barに与えて、その結果に
1を加えた値を戻す関数である。また、関数fooの中
に存在する関数signalは、例外捕獲機構9に対し
て「プログラム実行中に割込みキーが押されてもそれを
無視する」という例外処理を要求している。
【0040】LISPインタプリタにおける拡張機能
(本実施例のプログラム間相互呼出し方式における機
能)は、異なる言語によって定義されている上述の関数
を言語の区別なく利用できる環境を提供する。
(本実施例のプログラム間相互呼出し方式における機
能)は、異なる言語によって定義されている上述の関数
を言語の区別なく利用できる環境を提供する。
【0041】以上のようなインタプリタ例外状態情報8
および他言語プログラム例外状態情報10ならびに関数
barおよび関数fooの定義を前提として、「(fo
o10)」がLISPインタプリタ上で実行される場合
(後述するようにこの実行結果は「6」になる)の動作
について説明する(図3参照)。
および他言語プログラム例外状態情報10ならびに関数
barおよび関数fooの定義を前提として、「(fo
o10)」がLISPインタプリタ上で実行される場合
(後述するようにこの実行結果は「6」になる)の動作
について説明する(図3参照)。
【0042】 LISPインタプリタ上で「(foo
10)」の実行が要求される(これにより、LISP
インタプリタはC言語プログラムを呼び出す必要を認識
する)。
10)」の実行が要求される(これにより、LISP
インタプリタはC言語プログラムを呼び出す必要を認識
する)。
【0043】−1 LISPインタプリタの拡張機能
として実現される他言語引数変換部4は、引数情報の変
換を行う。すなわち、「(foo 10)」のLISP
インタプリタでの内部表現から「(foo 10)」の
C言語プログラムでの内部表現への変換等を行う。
として実現される他言語引数変換部4は、引数情報の変
換を行う。すなわち、「(foo 10)」のLISP
インタプリタでの内部表現から「(foo 10)」の
C言語プログラムでの内部表現への変換等を行う。
【0044】「(foo 10)」のLISPインタプ
リタでの内部表現は、2つのポインタで表現されるセル
が2つ用意され、1つ目のセルの第1ポインタにシンボ
ル「foo」へのポインタが設定されて第2ポインタに
2つ目のセルへのポインタが設定され、2つ目のセルの
第1ポインタに引数である整数「10」が設定されて第
2ポインタに終端を示す値が設定されて表現されるもの
である。また、「(foo 10)」のC言語プログラ
ムでの内部表現は、引数である整数「10」がスタック
の先頭に置かれ、スタックポインタspがその位置を指
しているものである。
リタでの内部表現は、2つのポインタで表現されるセル
が2つ用意され、1つ目のセルの第1ポインタにシンボ
ル「foo」へのポインタが設定されて第2ポインタに
2つ目のセルへのポインタが設定され、2つ目のセルの
第1ポインタに引数である整数「10」が設定されて第
2ポインタに終端を示す値が設定されて表現されるもの
である。また、「(foo 10)」のC言語プログラ
ムでの内部表現は、引数である整数「10」がスタック
の先頭に置かれ、スタックポインタspがその位置を指
しているものである。
【0045】−2 引数情報の変換が終了すると、例
外状態変更部5は例外捕獲機構9内に設定されている例
外状態情報をインタプリタ例外状態情報8(LISP例
外状態情報)から他言語プログラム例外状態情報10
(C例外状態情報)に変更する。
外状態変更部5は例外捕獲機構9内に設定されている例
外状態情報をインタプリタ例外状態情報8(LISP例
外状態情報)から他言語プログラム例外状態情報10
(C例外状態情報)に変更する。
【0046】−3 他言語制御渡し部6は、関数fo
oに制御を渡すことにより、C言語プログラムに制御を
渡す。
oに制御を渡すことにより、C言語プログラムに制御を
渡す。
【0047】以上の−1〜−3が、LISPインタ
プリタにおけるC言語プログラムの呼出しのための処理
(インタフェース処理)である。
プリタにおけるC言語プログラムの呼出しのための処理
(インタフェース処理)である。
【0048】 呼び出されたC言語プログラムは、関
数fooの引数に続いてスタックに関数fooの呼出し
元のアドレス(他言語制御渡し部6への戻り番地)を退
避し、関数barに与える引数(「10」)をさらにそ
の上に設定して関数barの実行のためにインタプリタ
2を呼び出す(スタックの最上位には他言語プログラム
3への戻り番地が設定される)。
数fooの引数に続いてスタックに関数fooの呼出し
元のアドレス(他言語制御渡し部6への戻り番地)を退
避し、関数barに与える引数(「10」)をさらにそ
の上に設定して関数barの実行のためにインタプリタ
2を呼び出す(スタックの最上位には他言語プログラム
3への戻り番地が設定される)。
【0049】−1 LISPインタプリタの拡張機能
として実現されるインタプリタ引数変換部12は、引数
情報の変換(「(bar 10)」のC言語プログラム
での内部表現からLISPインタプリタでの内部表現へ
の変換等)を行う。
として実現されるインタプリタ引数変換部12は、引数
情報の変換(「(bar 10)」のC言語プログラム
での内部表現からLISPインタプリタでの内部表現へ
の変換等)を行う。
【0050】−2 引数情報の変換が終了すると、例
外状態変更部5は例外捕獲機構9内に設定されている例
外状態情報をC例外状態情報からLISP例外状態情報
に変更する。
外状態変更部5は例外捕獲機構9内に設定されている例
外状態情報をC例外状態情報からLISP例外状態情報
に変更する。
【0051】−3 インタプリタ制御渡し部11を介
して制御を渡されたLISPインタプリタの本体(拡張
機能以外の部分であり、図1中のインタプリタ2に相当
する部分)は、「(bar 10)」を実行しその実行
結果(返却値)の「5」を得る。なお、LISPインタ
プリタは返却値をレジスタAに格納するものとする。
して制御を渡されたLISPインタプリタの本体(拡張
機能以外の部分であり、図1中のインタプリタ2に相当
する部分)は、「(bar 10)」を実行しその実行
結果(返却値)の「5」を得る。なお、LISPインタ
プリタは返却値をレジスタAに格納するものとする。
【0052】−4 インタプリタ制御渡し部11を介
して制御を渡された例外状態変更部5は、例外捕獲機構
9内に設定されている例外状態情報をLISP例外状態
情報からC例外状態情報に戻す。
して制御を渡された例外状態変更部5は、例外捕獲機構
9内に設定されている例外状態情報をLISP例外状態
情報からC例外状態情報に戻す。
【0053】−5 他言語返却値変換部13は、返却
値の表現をLISPインタプリタ表現からC言語プログ
ラム表現に変換する。なお、C言語プログラムは返却値
をレジスタRに格納するものとする。
値の表現をLISPインタプリタ表現からC言語プログ
ラム表現に変換する。なお、C言語プログラムは返却値
をレジスタRに格納するものとする。
【0054】以上の−1〜−5が、C言語プログラ
ムから呼び出されてC言語プログラムに制御を戻すまで
のLISPインタプリタにおける処理である。
ムから呼び出されてC言語プログラムに制御を戻すまで
のLISPインタプリタにおける処理である。
【0055】 関数fooに制御が戻されたC言語プ
ログラムは、関数barから得た値に1を加えた値
「6」をレジスタRに設定して処理を終える。
ログラムは、関数barから得た値に1を加えた値
「6」をレジスタRに設定して処理を終える。
【0056】−1 C言語プログラムにおける関数f
ooの実行が終了すると、他言語制御渡し部6を介して
制御を渡された例外状態変更部5は例外捕獲機構9内に
設定されている例外状態情報をC例外状態情報からLI
SP例外状態情報に変更する。
ooの実行が終了すると、他言語制御渡し部6を介して
制御を渡された例外状態変更部5は例外捕獲機構9内に
設定されている例外状態情報をC例外状態情報からLI
SP例外状態情報に変更する。
【0057】−2 インタプリタ返却値変換部7は、
返却値の表現をC言語プログラム表現からLISPイン
タプリタ表現に変換し、LISPインタプリタの本体に
制御を戻す。
返却値の表現をC言語プログラム表現からLISPイン
タプリタ表現に変換し、LISPインタプリタの本体に
制御を戻す。
【0058】 LISPインタプリタの本体は、
「(foo 10)」の実行結果として「6」を得て、
通常のインタプリタ状態に戻る。
「(foo 10)」の実行結果として「6」を得て、
通常のインタプリタ状態に戻る。
【0059】以上の処理の過程で(関数fooが起動さ
れてからその実行結果が得られるまでの間に)、利用者
により割込みキーが押されたとすると、例外捕獲機構9
内の例外状態情報に基づいて次のような例外処理が行わ
れる。 LISPインタプリタの実行中の押下であれば、L
ISPプログラムの割込み処理として関数breakが
呼び出される。 C言語プログラムの実行中の押下であれば、割込み
キーが押されたことは無視される。
れてからその実行結果が得られるまでの間に)、利用者
により割込みキーが押されたとすると、例外捕獲機構9
内の例外状態情報に基づいて次のような例外処理が行わ
れる。 LISPインタプリタの実行中の押下であれば、L
ISPプログラムの割込み処理として関数breakが
呼び出される。 C言語プログラムの実行中の押下であれば、割込み
キーが押されたことは無視される。
【0060】
【発明の効果】以上説明したように本発明は、例外捕獲
機構および例外状態変更部を含む例外状態再設定手段を
設けることにより、インタプリタと他言語プログラムと
の間の相互呼出しにおいてそれぞれに対応する例外状態
情報の設定が可能になり、インタプリタおよび他言語プ
ログラムにおける適正な例外処理の実行を保証すること
ができるという効果がある。この効果は、非同期的な例
外事象が頻繁に発生するイベント指向の情報処理システ
ムにおいて、特に有効なものになる。
機構および例外状態変更部を含む例外状態再設定手段を
設けることにより、インタプリタと他言語プログラムと
の間の相互呼出しにおいてそれぞれに対応する例外状態
情報の設定が可能になり、インタプリタおよび他言語プ
ログラムにおける適正な例外処理の実行を保証すること
ができるという効果がある。この効果は、非同期的な例
外事象が頻繁に発生するイベント指向の情報処理システ
ムにおいて、特に有効なものになる。
【図1】本発明の一実施例の構成を示すブロック図であ
る。
る。
【図2】(a)はLISPプログラムにおける関数定義
の一例を示す図であり、(b)はCプログラムにおける
関数定義の一例を示す図である。
の一例を示す図であり、(b)はCプログラムにおける
関数定義の一例を示す図である。
【図3】図1に示すプログラム間相互呼出し方式の具体
的な動作を説明するための図である。
的な動作を説明するための図である。
1 例外状態再設定手段 2 インタプリタ 3 他言語プログラム 4 他言語引数変換部 5 例外状態変更部 6 他言語制御渡し部 7 インタプリタ返却値変換部 8 インタプリタ例外状態情報 9 例外捕獲機構 10 他言語プログラム例外状態情報 11 インタプリタ制御渡し部 12 インタプリタ引数変換部 13 他言語返却値変換部
Claims (1)
- 【請求項1】 インタプリタと他言語プログラムとの間
のプログラム間相互呼出し方式において、 例外状態情報が設定される例外捕獲機構と、 前記例外捕獲機構内の例外状態情報をインタプリタ例外
状態情報から他言語プログラム例外状態情報に変更した
り、他言語プログラム例外状態情報からインタプリタ例
外状態情報に変更したりする例外状態変更部と、インタプリタが他言語プログラムを呼び出す時に当該呼
出しに係る引数情報をインタプリタ表現から他言語プロ
グラム表現に変換して制御を前記例外状態変更部に渡す
他言語引数変換部と、 前記例外状態変更部による前記例外捕獲機構内の例外状
態情報のインタプリタ例外状態情報から他言語プログラ
ム例外状態情報への変更後に他言語プログラムに制御を
渡し、他言語プログラムにおける当該呼出しに係る処理
が終了した後に前記例外状態変更部に制御を戻す他言語
制御渡し部と、 前記例外状態変更部による前記例外捕獲機構内の例外状
態情報の他言語プログラム例外状態情報からインタプリ
タ例外状態情報への変更後に他言語プログラム表現の返
却値をインタプリタ表現の返却値に変換してインタプリ
タに渡すインタプリタ返却値変換部と、 他言語プログラムがインタプリタを呼び出す時に当該呼
出しに係る引数情報を他言語プログラム表現からインタ
プリタ表現に変換して制御を前記例外状態変更部に渡す
インタプリタ引数変換部と、 前記例外状態変更部による前記例外捕獲機構内の例外状
態情報の他言語プログラム例外状態情報からインタプリ
タ例外状態情報への変更後にインタプリタに制御を渡
し、インタプリタにおける当該呼出しに係る処理が終了
した後に前記例外状態変更部に制御を戻すインタプリタ
制御渡し部と、 前記例外状態変更部による前記例外捕獲機能内の例外状
態情報のインタプリタ例外状態情報から他言語プログラ
ム例外状態情報への変更後にインタプリタ表現の返却値
を他言語プログラム表現の返却値に変換して他言語プロ
グラムに渡す他言語返却値変換部と を有することを特徴
とするプログラム間相互呼出し方式。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP3226501A JP2768073B2 (ja) | 1991-08-12 | 1991-08-12 | プログラム間相互呼出し方式 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP3226501A JP2768073B2 (ja) | 1991-08-12 | 1991-08-12 | プログラム間相互呼出し方式 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JPH0546402A JPH0546402A (ja) | 1993-02-26 |
| JP2768073B2 true JP2768073B2 (ja) | 1998-06-25 |
Family
ID=16846105
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP3226501A Expired - Fee Related JP2768073B2 (ja) | 1991-08-12 | 1991-08-12 | プログラム間相互呼出し方式 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2768073B2 (ja) |
Families Citing this family (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8046777B2 (en) * | 2005-06-02 | 2011-10-25 | The Mathworks, Inc. | Calling of late bound functions from an external program environment |
-
1991
- 1991-08-12 JP JP3226501A patent/JP2768073B2/ja not_active Expired - Fee Related
Non-Patent Citations (1)
| Title |
|---|
| 「情報処理学会研究報告」 VOL.89,NO.100 (89−SYM−53−2) |
Also Published As
| Publication number | Publication date |
|---|---|
| JPH0546402A (ja) | 1993-02-26 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US8020173B2 (en) | Method and system for associating parameters of containers and contained objects | |
| Robbins et al. | UNIX systems programming: communication, concurrency, and threads | |
| US20040261083A1 (en) | Event routing model for an extensible editor | |
| JPH0237454A (ja) | コンピュータシステム | |
| US5551040A (en) | Methods and apparatus for specifying the contexts of names in callback-style programming | |
| Bordin et al. | Automated model-based generation of ravenscar-compliant source code | |
| US20010016866A1 (en) | Computer and computer-readable storage medium | |
| JP2768073B2 (ja) | プログラム間相互呼出し方式 | |
| Lane | A design space and design rules for user interface software architecture | |
| US5970250A (en) | System, method, and computer program product for scoping operating system semanticis in a computing environment supporting multi-enclave processes | |
| US5388263A (en) | Procedure state descriptor system for digital data processors | |
| US6769119B1 (en) | System, method, and computer program product for scoping operating system semantics in a computing environment supporting multi-enclave processes | |
| KR101571908B1 (ko) | Sip 및 sdp 프로토콜을 커스텀화하는 사용자 동시 실행 루틴 인터페이스 | |
| CN115774574A (zh) | 一种操作系统内核切换方法和装置 | |
| KR100560393B1 (ko) | 에스디엘에서 c언어로의 변환 시스템 및 방법, 그 프로그램이 구현된 기록매체 | |
| CN119621206A (zh) | 基于IOS系统的UIButton按钮防抖方法及系统 | |
| McDonald et al. | Denotational semantics of a command interpreter and their implementation in Standard ML | |
| EP0892346A2 (en) | Propagation of a command status code from a remote unit to a host unit | |
| JPH0567049A (ja) | 外部コマンド処理装置 | |
| JP3334167B2 (ja) | ディジタル計算機 | |
| Miranda et al. | The implementation of ada 2005 synchronized interfaces in the GNAT compiler | |
| EP0902366A2 (en) | System of propagating a command status code from a remote unit to a host unit | |
| Kuchcinski et al. | A man-machine intercommunication facility in well-structured concurrent systems | |
| JP2002229801A (ja) | 関数のリンク方法 | |
| JPH0588934A (ja) | デバツグ方式 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| LAPS | Cancellation because of no payment of annual fees |