JPH05265768A - 計算機言語の解釈実行方式 - Google Patents

計算機言語の解釈実行方式

Info

Publication number
JPH05265768A
JPH05265768A JP9367392A JP9367392A JPH05265768A JP H05265768 A JPH05265768 A JP H05265768A JP 9367392 A JP9367392 A JP 9367392A JP 9367392 A JP9367392 A JP 9367392A JP H05265768 A JPH05265768 A JP H05265768A
Authority
JP
Japan
Prior art keywords
register
evaluation
expression
processing
value
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.)
Pending
Application number
JP9367392A
Other languages
English (en)
Inventor
Masahiko Yamamoto
昌彦 山本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Software Engineering Co Ltd
Original Assignee
Hitachi Software Engineering Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hitachi Software Engineering Co Ltd filed Critical Hitachi Software Engineering Co Ltd
Priority to JP9367392A priority Critical patent/JPH05265768A/ja
Publication of JPH05265768A publication Critical patent/JPH05265768A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】解釈実行系の処理方式が本来有している判定処
理を利用して前処理なしに、実行時の不要処理を避け、
処理速度を向上させる計算機言語の解釈実行方式を提供
する。 【構成】計算機言語の評価対象の評価対象の式が部分式
を含むような計算機言語の解釈実行系において、部分式
の評価に際して、部分式の評価に要求されている状況
を、(a)部分式が返す値の全てが必要な場合、(b)
部分式が返す最初の値のみが必要な場合、および(c)
部分式の値は不要な場合に分類し、各分類に応じて評価
を行い、当該計算機言語の解釈実行を行う。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、計算機言語の解釈実行
方式に関し、特に、式中に部分式が含まれるような計算
機言語の解釈実行方式に関するものである。
【0002】
【従来の技術】対話性が要求されるスクリプト言語プロ
グラム、あるいは再利用することの少ないページ記述言
語プログラムの処理を行う場合には、コンパイル過程を
経なければならない翻訳系の処理方式よりも、ソースプ
ログラムを直接実行できる解釈実行系の処理方式の方が
有利であり、このため、一部の計算機言語の処理方式と
して、解釈実行系の処理方式が広く利用されている。し
かしながら、解釈実行系の処理方式では前処理を行なわ
ないため、実行時に不要な処理を多く行なわなければな
らないため、速度が低下する傾向がある。特に、式中に
部分式が含まれるような計算機言語を解釈実行する場
合、例えば、部分式の処理が再帰呼出しとして実行され
るような場合には、処理の流れが複雑な入れ子状態とな
り、実行時の処理効率を極端に低下する。
【0003】このような部分式を含むプログラムの処理
を、再帰呼出しにより実現している実現している計算機
言語の解釈実行方式の例としては「Structure and Inte
rpretation of Computer Programs(Abelson,H. and Su
ssman,G.,J.;McGraw Hill;1985年)」に記載されている
ような計算機用言語の解釈実行方式がある。ここでの計
算機用言語の解釈実行方式では、関数evalが式の評価を
行い、計算機言語のプログラム本文の解釈実行を行う。
関数evalは、評価対象の式と変数の束縛環境を引数とし
て受けとり、式の形に従って専用の評価関数を呼びだす
ことにより解釈実行を行う。このため、計算機言語のプ
ログラム本文中の部分式の評価は、関数evalの再帰呼出
しとして実行される。
【0004】
【発明が解決しようとする課題】ところで、上記の従来
の技術における計算機用言語の解釈実行方式では、計算
機用言語の解釈において、部分式の値の一部しか必要と
しない場合、あるいは部分式の効果のみが必要である
が、値は必要としない場合にも、値を計算する同一の評
価関数が再帰起的に呼び出される。このため、値の計
算、格納等の処理が無駄になり、処理速度の低下をもた
らす。
【0005】本発明は、上述したような従来の技術の問
題点を解決するためになされたものであり、本発明の目
的は、解釈実行系の処理方式が本来有している判定処理
を利用して前処理なしに、実行時の不要処理を避け、処
理速度を向上させる計算機言語の解釈実行方式を提供す
ることにある。
【0006】
【課題を解決するための手段】上記の目的を達成するた
め、本発明の計算機言語の解釈実行方式は、計算機言語
の評価対象の式が部分式を含むような計算機言語の解釈
実行系において、部分式の評価に際して、部分式の評価
に要求されている状況を(a)部分式が返す値の全てが
必要な場合、(b)部分式が返す最初の値のみが必要な
場合、および(c)部分式の値は不要な場合に分類し、
各分類に応じて評価を行い、当該計算機言語の解釈実行
を行うことを特徴とする。
【0007】また、各分類に応じた評価を行う場合、部
分式評価の分類毎に専用の評価関数で処理を行う関数処
理部を備え、各々の分類毎の専用の評価関数の関数処理
部により、部分式評価における評価要求の処理を行い、
部分式の評価を行うことを特徴とする。
【0008】
【作用】本発明の計算機言語の解釈実行方式において
は、計算機言語の評価対象の式が部分式を含むような計
算機言語の解釈実行の処理を行う場合、計算機言語中の
部分式の評価に際して、部分式の評価に要求されている
状況を、それぞれ(a)部分式が返す値の全てが必要な
場合、(b)部分式が返す最初の値のみが必要な場合、
および(c)部分式の値は不要な場合に分類する。そし
て、分類した各分類に応じて部分式の評価を行い、当該
計算機言語の解釈実行を行う。
【0009】各分類に応じた評価を行う場合に対応し
て、部分式評価の分類毎に専用の評価関数で処理を行う
関数処理部を備えており、分類毎の専用の評価関数の関
数処理部により、部分式評価における評価要求の処理を
行い、部分式の評価を行う。このように、各分類に応じ
た評価の処理は、部分式評価における要求を分類毎の専
用の評価関数を用意して、それぞれの評価関数によって
部分式を評価する処理を行う。各々の分類に従った専用
の評価関数により、計算機言語の解釈実行の処理を行う
ことにより、部分式の評価に際して、最小限の要求に従
って処理が行なわれる。このため、解釈実行の処理速度
が向上する。例えば、関数適用時の引数の評価、あるい
は条件分岐式の条件部の評価のように部分式の値の最初
のものしか必要としない場合、単一値専用の評価関数を
用いることにより、多くの値を評価してまたレジスタな
どに格納する無駄を避けることができる。特に、逐次式
の最後の式以外の式のように値が不要な式の評価の場合
には、不要な値を評価して格納するような処理の無駄を
避けることができ、解釈実行の処理速度が向上する。
【0010】
【実施例】以下、本発明の実施例について図面により説
明する。図1は本発明の一実施例にかかる計算機言語の
解釈実行方式により処理を行う場合に評価対象となる計
算機言語の構文を説明する図である。また、図2は図1
に示す計算機言語の構文を解釈実行する計算機システム
の要部構成を示すブロック図である。図2において、1
2は計算機言語の解釈実行を行う解釈実行部、13はプ
ログラムおよびデータを格納する主記憶部、14はプロ
グラムおよびデータを主記憶部13に転送する入力部、
15は計算結果を外部に転送する出力部である。
【0011】解釈実行部12は、作業レジスタ20,多
値評価部21,単一評価部22,無値評価部23,命令
レジスタ24,環境レジスタ25,継続レジスタ26,
評価式レジスタ27,単一レジスタ28,および、多値
レジスタ・バンク29を備えた構成とされる。ここでの
多値評価部21は、最も一般的な多値を必要とする式の
評価を行う評価処理部であり、単一評価部22は、式の
値の最初のもののみを計算する評価処理部であり、ま
た、無値評価部23は、式の値は計算しない場合の評価
処理部である。このような評価処理を行うためにデータ
を保持するレジスタ群として、命令レジスタ24,環境
レジスタ25,継続レジスタ26,評価式レジスタ2
7,単一レジスタ28,および、多値レジスタ・バンク
29を備えている。
【0012】命令レジスタ24は実行命令を保持し、環
境レジスタ25は変数とその値の対を保持する。継続レ
ジスタ26は次に行う計算の状況を保持し、評価式レジ
スタ27は評価を行うべき式を保持する。また、単一レ
ジスタ28は式の値の最初のものを格納し、多値レジス
タ・バンク29が式の値の最初以外の値(一般に複数)を
保持する。なお、作業レジスタ20が、この他に、処理
の制御データなどの一時記憶に使用される。
【0013】図3は、多値評価部21の内部構成の要部
を説明するブロック図である。ここでの多値評価部21
は、例えば、図1に示すような処理対象の計算機言語の
構文要素に従って、多値が要求されている場合の式の評
価を行う。このため、図3に示すように、多値定数評価
部31,多値変数評価部32,多値条件式評価部33,
多値分岐決定部34,多値逐次式評価部35,および、
多値逐次式続行部36を備えている。多値定数評価部3
1は定数の評価を行い、多値変数評価部32が変数の評
価を行う。多値条件式評価部33が条件式の評価を開始
すると、多値分岐決定部34が条件式の分岐を決定す
る。また、多値逐次式評価部35は逐次式の評価を開始
し、多値逐次式続行部36が逐次式の評価を続行する。
【0014】図4は、単一値評価部の内部構成の要部を
説明するブロック図である。この単一値評価部22は、
処理対象の計算機言語の構文要素に従って、式の値のう
ち最初のもののみが要求されている場合の式の評価を行
う。このため、図4に示すように単一値定数評価部4
1,単一値変数評価部42,単一値条件式評価部43,
単一値分岐決定部44,単一値逐次式評価部45,およ
び、単一値逐次式続行部46を備えている。単一値定数
評価部41は定数の評価を行い、単一値変数評価部42
は変数の評価を行う。単一値条件式評価部43が条件式
の評価を開始すると、単一値分岐決定部44が条件式の
分岐を決定する。また、単一値逐次式評価部45は逐次
式の評価を開始し、単一値逐次式続行部46は逐次式の
評価を続行する。
【0015】図5は、無評価部の内部構成の要部を説明
するブロック図である。この無値評価部23は、処理対
象の計算機言語の構文要素に従って、式の値が要求され
ていない場合の式の評価を行う。このため、図5に示す
ように無値定数評価部51,無値変数評価部52,無値
条件式評価部53,無値分岐決定部54,無値逐次式評
価部55,および、無値逐次式続行部56を備えてい
る。無値定数評価部51は定数の評価を行い、無値変数
評価部52が変数の評価を行う。無値条件式評価部53
が条件式の評価を開始すると、無値分岐決定部54が条
件式の分岐を決定する。また、無値逐次式評価部55は
逐次式の評価を開始し、無値逐次式続行部56が逐次式
の評価を続行する。
【0016】図6は、評価処理を行う各々の命令語と対
応する各処理部の対応関係を示す図である。図6に示す
ように、“evaluate-multiple-value"命令の処理は、多
値評価部が起動されてその処理が実行される。また、
“evaluate-single-value"命令の処理は、単一値評価部
が起動されてその処理が実行される。同様に“evaluate
-no-value"命令の処理は、無値評価部が起動されて、そ
の処理が実行される。“if-multiple-value"命令の処理
は、多値分岐決定部が起動されてその処理が開始され
る。“if-single-value"命令の処理は、単一値分岐決定
部が起動されてその処理が開始され、“if-no-value"命
令の処理は、無値分岐決定部が起動されてその処理が開
始される。また、“begin-multiple-value-more"命令の
処理は、多値逐次式続行部が起動されてその処理を続行
し、“begin-single-value-more"命令の処理は、単一値
逐次式続行部が起動されてその処理を続行し、“begin-
no-value-more"命令の処理は、無値逐次式続行部が起動
されてその処理を続行する。
【0017】次に各々の処理部が行う処理について説明
する。図7は、ここでの計算機用言語の解釈実行の全体
の処理制御を行う解釈実行部12の動作を示すフローチ
ャートである。解釈実行部12の処理は、図7に示すよ
うに、ステップ70において命令レジスタに命令を取り
出し、次に、ステップ71において、命令レジスタに格
納されている命令語を参照し、その内容に従って(図6
に示すような処理対応テーブルにより)、対応した各々
の処理部に制御を移すというディスパッチ処理を繰り返
す。
【0018】図8は多値評価部の処理動作を示すフロー
チャートである。図3および図8を参照して、多値評価
部21の処理動作を説明する。多値評価部21において
は、図8に示すように、まず、ステップ81において、
評価式レジスタ27の内容が定数式かどうかを判定し、
次に、ステップ83において、評価式レジスタ27の内
容が変数式かどうかを判定し、次に、ステップ85にお
いて、評価式レジスタ27の内容が条件式かどうかを判
定し、それぞれの判定結果に応じて、各々の評価部に制
御を移す処理を行う。すなわち、ステップ81で評価式
レジスタの内容が定数式であることが判定できれば、ス
テップ82に進み、多値定数評価部31(図3)に制御
を渡し、ステップ83で評価式レジスタの内容が変数式
であることが判定できれば、ステップ84に進み、多値
変数評価部32(図3)に制御を渡す。また、ステップ
85で評価式レジスタの内容が条件式であることが判定
できれば、ステップ86に進み、多値条件式評価部33
(図3)に制御を渡す。ここで評価式レジスタの内容
が、定数式,変数式,および条件式のいずれでもない場
合は、ステップ87に進み、多値逐次式評価部35(図
3)に制御を移す。このように、それぞれの判定結果に
応じて各々の評価部に制御を移すことで、処理を終了す
る。
【0019】図9は単一値評価部の処理動作を示すフロ
ーチャートである。図4および図9を参照して、単一値
評価部22の処理動作を説明する。図9に示すように、
単一値評価部22においては、まず、ステップ91にお
いて、評価式レジスタ27の内容が定数式かどうかを判
定し、次に、ステップ93において、評価式レジスタ2
7の内容が変数式かどうかを判定し、次に、ステップ9
5において、評価式レジスタ27の内容が条件式かどう
かを判定する。そして、それぞれの判定結果に応じて、
各々の評価部に制御を移す処理を行う。すなわち、ステ
ップ91で評価式レジスタの内容が定数式であることが
判定できれば、次に、ステップ92に進み、単一値定数
評価部41(図4)に制御を渡し、ステップ93で評価
式レジスタの内容が変数式であることが判定できれば、
ステップ94に進んで、単一値変数評価部42(図4)
に制御を渡す。また、ステップ95で評価式レジスタの
内容が条件式であることが判定できれば、ステップ96
に進み、単一値条件式評価部43(図4)に制御を渡す
処理を行う。評価式レジスタの内容が、定数式,変数
式,および条件式のいずれでもない場合は、ステップ9
7に進み、単一値逐次式評価部45(図3)に制御を移
す。各々の評価部に制御を移すことで、ここでの処理を
終了する。
【0020】また、図10は無値評価部の処理動作を示
すフローチャートである。図5および図10を参照し
て、無値評価部22の処理動作を説明する。図10に示
すように、無値評価部23においては、まず、ステップ
101において、評価式レジスタ27の内容が定数式か
どうかを判定し、次に、ステップ103において、評価
式レジスタ27の内容が変数式かどうかを判定し、次
に、ステップ105において、評価式レジスタ27の内
容が条件式かどうかを判定する。そして、それぞれの判
定結果に応じて、各々の評価部に制御を移す処理を行
う。すなわち、ステップ101で評価式レジスタの内容
が定数式であることが判定できれば、ステップ102に
進み、無値定数評価部51(図5)に制御を渡し、ステ
ップ103で評価式レジスタの内容が変数式であること
が判定できれば、ステップ104において無値変数評価
部52(図5)に制御を渡す。また、ステップ105で
評価式レジスタの内容が条件式であることが判定できれ
ば、ステップ106に進み、無値条件式評価部53(図
5)に制御を渡す処理を行う。評価式レジスタの内容
が、定数式,変数式,および条件式のいずれでもない場
合は、ステップ107に進んで、無値逐次式評価部55
(図5)に制御を移す。そして、各々の評価部に制御を
移すことで、ここでの処理を終了する。
【0021】図11は多値定数評価部の処理動作を示す
フローチャートである。この多値定数評価部31(図
3)の処理は、処理の対象が〈定数〉である。このた
め、この処理では、まず、ステップ111において、評
価式レジスタ27の内容を、結果の値を格納する単一値
レジスタ28に転送する。この場合、定数値は1つしか
ないので、次にステップ112において、多値レジスタ
・バンク29をクリアし、次のステップ113におい
て、継続レジスタ26に退避されている次命令を命令レ
ジスタ24に転送し、命令を継続レジスタ26に回復す
る処理を行う。
【0022】図12は単一値定数評価部の処理動作を示
すフローチャートである。この単一値定数評価部41
(図4)の処理動作は、前述の場合と同様に、処理対象
が〈定数〉となっている。このため、まず、ステップ1
21において、評価式レジスタ27の内容を、結果の値
を格納する単一値レジスタ28に転送する。ここでの単
一値定数評価部41は多値を返す必要がないため、次
に、ステップ122において、継続レジスタ26に退避
されている次命令を命令レジスタ24に転送し、命令を
継続レジスタ26に回復する処理を行う。
【0023】図13は無値定数評価部の処理動作を示す
フローチャートである。この無値定数評価部51(図
5)の処理動作では、無値定数評価部51は値を返す必
要がないため、ステップ131において、継続レジスタ
26に退避されている次命令を命令レジスタ24に転送
し、命令を継続レジスタ26に回復する処理を行う。
【0024】図14は多値変数評価部の処理動作を示す
フローチャートである。多値変数評価部32(図3)の
処理は、処理の対象が〈定数〉である。このため、ま
ず、ステップ141において、評価式レジスタ27の内
容と環境レジスタ25の内容により変数の値を求め、結
果の値を単一値レジスタ28に転送する。すなわち、環
境レジスタ中の内容により評価式レジスタの内容に対応
する値を単一値レジスタに転送する。この場合、変数値
は1つしかないので、次に、ステップ142において、
多値レジスタ・バンク29をクリアし、次のステップ1
43において、継続レジスタ26に退避されている次命
令を命令レジスタ24に転送し、命令を継続レジスタ2
6に回復する処理を行う。
【0025】図15は単一値変数評価部の処理動作を示
すフローチャートである。単一値変数評価部42(図
4)の処理動作は、前述の場合と同様に、処理対象が
〈定数〉となっているため、まず、ステップ151にお
いて、評価式レジスタ27の内容と環境レジスタ25の
内容により変数の値を求めて、結果の値を単一値レジス
タ28に転送する。すなわち、環境レジスタ中の内容に
より評価式レジスタの内容に対応する値を単一値レジス
タに転送する。ここでの単一値変数評価部42は多値を
返す必要がないため、次に、ステップ152において、
継続レジスタ26に退避されている次命令を命令レジス
タ24に転送し、命令を継続レジスタ26に回復する処
理を行う。
【0026】図16は無値変数評価部の処理動作を示す
フローチャートである。この無値変数評価部52(図
5)の処理動作では、前述の無値定数評価部の場合と同
様に、無値変数評価部52は値を返す必要がないため、
ステップ161において、継続レジスタ26に退避され
ている次命令を命令レジスタ24に転送し、命令を継続
レジスタ26に回復する処理を行う。
【0027】図17は、多値条件式評価部の処理動作を
示すフローチャートである。多値条件式評価部33(図
3)の処理動作においては、まず、最初にステップ17
1において、評価式レジスタ27に格納されている式の
〈then部〉及び〈else部〉を継続レジスタ26を通して
退避する。次に、ステップ172において、環境レジス
タ25の内容を継続レジスタ26を通して退避する。そ
して、次に、ステップ173において、if‐multiple‐
value命令を継続レジスタ26を通して退避して、次の
ステップ174において、evaluate‐single‐value命
令を命令レジスタ24にセットする。次に、ステップ1
75において、退避されている式の〈条件部〉を評価式
レジスタ27にセットする。これにより、条件式を評価
するため処理の準備が完了する。
【0028】図18は、単一値条件評価部の処理動作を
示すフローチャートである。この単一値条件式評価部4
3(図4)の処理動作においては、まず、ステップ18
1において、評価式レジスタ27に格納されている式の
〈then部〉及び〈else部〉を継続レジスタ26を通して
退避する。次に、ステップ182において、環境レジス
タ25の内容を継続レジスタ26を通して退避する。次
のステップ183においては、if‐single‐value命令
を継続レジスタ26を通して退避し、次のステップ18
4において、evaluate‐single‐value命令を命令レジ
スタ24にセットする。そして、次に、ステップ185
において、退避されている式の〈条件部〉を評価式レジ
スタ27にセットする。これにより、条件式を評価する
ため処理の準備が完了する。
【0029】また、図19は、無値条件式評価部の処理
動作を示すフローチャートである。無値条件式評価部5
3(図5)の処理においては、最初に、ステップ191
において、評価式レジスタ27に格納されている条件式
の〈then部〉および〈else部〉を継続レジスタ26を通
して退避する。次に、ステップ192において、環境レ
ジスタ25の内容を継続レジスタ26を通して退避す
る。そして、次に、ステップ193において、if‐no‐
value命令を継続レジスタ206を通じて退避する。次にス
テップ194において、evaluate‐single‐value命令
を命令レジスタ24にセットし、ステップ195におい
て、退避されている式の〈条件部〉を評価式レジスタ2
7にセットする。
【0030】図20は多値分岐決定部の処理動作を示す
フローチャートである。この多値分岐決定部34(図
3)の処理では、まず最初に、ステップ201におい
て、継続レジスタ26を通して〈条件式〉の〈then部〉
および〈else部〉を作業用レジスタ20に回復する。次
に、ステップ202において、継続レジスタ26を通し
て環境レジスタ25の内容を回復する。そして、次にス
テップ203において、単一値レジスタ28の内容の真
偽を判定する。この判定の結果により、単一値レジスタ
28の内容が真の場合には、ステップ204において、
作業用レジスタ20より〈then部〉を評価式レジスタ2
7に転送し、単一値レジスタ28の内容が偽の場合に
は、ステップ205において、作業用レジスタ20より
〈else部〉を評価式レジスタ27に転送する。そして、
ステップ206において、evaluate-multiple-value命
令を命令レジスタ24にセットする。
【0031】図21は単一値分岐決定部の処理動作を示
すフローチャートである。この単一値分岐決定部44
(図4)の処理では、前述の場合と同様に、まず最初
に、ステップ211において、継続レジスタ26を通し
て〈条件式〉の〈then部〉および〈else部〉を作業用レ
ジスタ20に回復する。次に、ステップ212におい
て、継続レジスタ26を通して環境レジスタ25の内容
を回復する。次に、ステップ213において、単一レジ
スタ28の内容の真偽を判定する。この判定結果によ
り、単一レジスタ28の内容が真の場合には、ステップ
214において、作業用レジスタ20により〈then部)
を評価式レジスタ27に転送し、また、単一値レジスタ
28の内容が偽の場合は、ステップ215において、作
業用レジスタ20により〈else部〉を評価式レジスタ2
7に転送する。そして、ステップ216において、eval
uate-single-value命令を命令レジスタ24にセットす
る。
【0032】図22は無値分岐決定部の処理動作を示す
フローチャートである。この無値分岐決定部54(図
5)の処理も、前述の処理と同様に、最初に、ステップ
221において、継続レジスタ26を通して〈条件式〉
の〈then部〉および〈else部〉を作業用レジスタ20に
回復する。次に、ステップ222において、継続レジス
タ26を通して環境レジスタ25の内容を回復し、そし
て、次のステップ223において、単一レジスタ28の
内容の真偽を判定する。この判定の結果により、単一値
レジスタ28の内容が真の場合には、ステップ224に
おいて作業用レジスタに20より〈then部〉を評価式レ
ジスタ27に転送し、また、単一値レジスタ28の内容
が偽の場合には、ステップ225において、作業用レジ
スタ20により〈else部〉を評価式レジスタ27に転送
する。そして、次のステップ226において、evaluate
-no-value命令を命令レジスタ24にセットする。
【0033】図23は、多値逐次式評価部の処理動作を
示すフローチャートである。この多値逐次式評価部35
(図3)の処理動作では、まず、最初に、ステップ23
1において、評価式レジスタ27に格納されている〈逐
次式〉が部分式を1つだけ含んでいるかどうかを判定す
る。この判定の結果、部分式が1つしか含まれていない
場合、ステップ232に進み、evaluate-multiple-v-al
ue命令を命令レジスタ24にセットし、次のステップ2
33において、部分式を評価式レジスタ27にセットし
て、この処理を終了する。また、ステップ231の判定
の結果、部分式が2つ以上含まれている場合には、ステ
ップ234に進み、先頭以外の部分式を継続レジスタ2
6を通して退避し、次に、ステップ235において、環
境レジスタ25の内容を継続レジスタ26を通して退避
する。次に、ステップ236において、次に、bigin-mu
ltiple-value-more命令を継続レジスタ26を通して退
避する。先頭の部分式は最後の部分式ではないので、次
に、ステップ237において、evaluate-no-value命令
を命令レジスタ204をセットし、次のステップ238に
おいて、先頭の部分式を評価式レジスタ27にセットし
て処理を終了する。
【0034】図24は、単一値逐次式評価部の処理動作
を示すフローチャートである。この単一値逐次式評価部
45(図4)の処理では、前述の場合と同様に、まず、
最初にステップ241において、評価式レジスタ27に
格納されている〈逐次式〉が部分式を1つだけ含んでい
るかどうかを判定する。この判定の結果により、部分式
が1つしか含まれていない場合は、ステップ242に進
み、evaluate-single-value命令を命令レジスタ204にセ
ットし、次のステップ243において、部分式を評価式
レジスタ27にセットして処理を終了する。また、ステ
ップ241の判定の結果、部分式が2つ以上含まれてい
る場合には、ステップ244に進み、先頭以外の部分式
を継続レジスタ26を通して退避し、次のステップ24
5において、環境レジスタ25の内容を継続レジスタ2
6を通して退避する。更に、次のステップ246におい
て、bigin-single-value-more命令を継続レジスタ26
を通して退避する。そして、先頭の部分式は最後の部分
式ではないので、次に、ステップ247において、eval
uate-no-value命令を命令レジスタ24にセットして、
次のステップ248において、先頭の部分式を評価式レ
ジスタ27にセットし、処理を終了する。
【0035】図25は、無値逐次式評価部の処理動作を
示すフローチャートである。この無値逐次式評価部55
(図5)の処理は、前述の場合と同様に、まず、最初に
ステップ251において、評価式レジスタ27に格納さ
れている〈逐次式〉が部分式を1つだけ含んでいるかど
うかを判定する。この判定結果により、部分式が1つし
か含まれていない場合には、ステップ252に進み、ev
aluate-no-value命令を命令レジスタ24にセットし、
次のステップ253において、部分式を評価式レジスタ
27にセットして、処理を終了する。また、ステップ2
51の判定処理の結果、部分式が2つ以上含まれている
場合には、ステップ254に進んで、まず、先頭以外の
部分式を継続レジスタ26を通して退避し、次のステッ
プ255において、環境レジスタ25の内容を継続レジ
スタ26を通して退避し、更に、ステップ256におい
て、begin-no-value-more命令を継続レジスタ26を通
して退避する。そして、この場合、先頭の部分式は最後
の部分式ではないので、次に、ステップ257におい
て、evaluate-no-value命令を命令レジスタ24にセッ
トし、次のステップ258において、先頭の部分式を評
価式レジスタ27にセットして、処理を終了する。
【0036】また、図26は、多値逐次式続行部の処理
動作を示すフローチャートである。この多値逐次式続行
部36(図3)の処理では、最初に、ステップ260に
おいて、残りの部分式を継続レジスタ26を通して作業
用レジスタ20に回復し、次にステップ261におい
て、環境レジスタ25の内容を継続レジスタ25を通し
て回復する。そして、次のステップ262において、部
分式が最後のものかどうかを判定する。この結果、部分
式が最後のものである判定された場合には、ステップ2
63に進んで、evaluate-multiple-value命令を命令レ
ジスタ24にセットし、次のステップ264において、
部分式を評価式レジスタ27にセットして処理を終了す
る。また、ステップ262の判定処理において、部分式
が2つ以上残っていると判定された場合には、ステップ
265において、作業用レジスタ20から先頭以外の部
分式を継続レジスタ26を通して退避し、次のステップ
266において、環境レジスタ25の内容を継続レジス
タ26を通して退避する。更に、次のステップ267に
おいて、begin-multiple-value-more命令を継続レジス
タ26を通して退避する。また、この場合、先頭の部分
式は最後の部分式ではないので、ステップ268におい
てevaluate-no-value命令を命令レジスタ24にセット
し、次のステップ269において、残りの部分式のうち
で先頭のものを評価式レジスタ27にセットして処理を
終了する。
【0037】図27は単一逐次式続行部の処理動作を示
すフローチャートである。この単一逐次式続行部46
(図4)の処理では、まず、ステップ270において、
残りの部分式を継続レジスタ26を通して作業用レジス
タ20に回復する。次にステップ271において、環境
レジスタ25の内容を継続レジスタ26を通して回復す
る。そして、次にステップ272において、部分式が最
後のものかどうかを判定する。この判定結果により、部
分式が最後のものである場合には、次のステップ273
に進み、evaluate-single-value命令を命令レジスタ2
4にセットし、次のステップ274において、部分式を
評価式レジスタ27にセットして処理を終了する。ま
た、ステップ272の判定処理で、部分式が2つ以上残
っている判定の場合には、ステップ275に進み、作業
用レジスタ20から先頭以外の部分式を継続レジスタ2
6を通して退避し、更に、ステップ276において、環
境レジスタ25の内容を継続レジスタ26を通して退避
し、次のステップ277において、begin-single-value
-more命令を継続レジスタを通して退避する。この場合
は、先頭の部分式は最後の部分式ではないので、次のス
テップ278において、evaluate-no-value命令を命令
レジスタ24にセットし、次にステップ279におい
て、残りの部分式の内で先頭のものを評価式レジスタ2
7にセットして、処理を終了する。
【0038】図28は無値逐次式続行部の処理動作を示
すフローチャートである。この無値逐次式続行部56
(図5)の処理では、前述の場合と同様に、まず、最初
に、ステップ280において、残りの部分式を継続レジ
スタ26を通して作業用レジスタ20に回復し、続い
て、ステップ281において、環境レジスタ25の内容
を継続レジスタを通して回復する。次にステップ282
において、部分式が最後のものかどうかを判定する。こ
の判定の結果、部分式が最後のものである場合は、次の
ステップ283において、evaluate-no-value命令を命
令レジスタ24にセットし、次に、ステップ284にお
いて、部分式を評価式レジスタ27にセットして、処理
を終了する。また、ステップ282の判定処理で、部分
式が2つ以上残っていると判定される場合には、ステッ
プ285において、作業用レジスタ20から先頭以外の
部分式を継続レジスタ26を通して退避し、次にステッ
プ286で、環境レジスタ25の内容を継続レジスタ2
6を通して退避し、更に、ステップ287において、be
gin-no-value-more命令を継続レジスタを通して退避す
る。この場合は、先頭の部分式が最後の部分式ではない
ので、ステップ288において、evaluate-no-value命
令を命令レジスタ24にセットし、次のステップ289
において、残りの部分式の内で先頭のものを評価式レジ
スタ27にセットして、処理を終了する。
【0039】次に、図29に示すようなプログラムの一
例の計算機言語を実行する場合について、各々のレジス
タ内容がどのように変化し、処理が実行されてゆくかを
説明する。まず、プログラム例の計算機言語は評価する
ため、評価式レジスタ27に格納されて実行が開始され
る。この場合、各々の評価対象の計算機言語に対して部
分式の評価を、解釈実行部は多値評価,単一値評価,無
値評価を順次に行う。
【0040】多値評価部を用いて実行する場合を説明す
ると、図30は、実行開始時点でのレジスタ群の内容を
示す図である。ここでは多値評価部を用いて実行するた
め、命令レジスタ301にはevaluate-mutiple-value命
令を格納し、また、評価式レジスタ302は評価対象の
式を格納している。この場合、命令レジスタ301の内
容は、evaluate-multiple-value命令であるから、解釈
実行部12は、制御を多値評価部21に渡し、評価式レ
ジスタ302の内容“(if (begin 0 #t) 1 2)”が条件
式であることより、多値評価部21の多値条件式評価部
33に制御を渡して、計算機言語の評価の処理を行う。
この結果、多値条件式評価部33の処理実行後の結果
は、図31に示すようになる。
【0041】図31は、多値条件式評価部33の処理実
行後のレジスタ群の内容を示す図である。継続レジスタ
311には、then部,else部,if-multiple-value命令
が退避されており、命令レジスタ312には、次の単一
値評価を行うために、evaluate-single-value命令が設
定され、評価式レジスタ313には条件部が設定されて
いる。この場合の処理では、命令レジスタ312の内容
は、evaluate-single-value命令であるから、解釈実行
部12は単一値評価部22に制御を渡し、また、評価式
レジスタ313の内容は逐次式であるから、単一値評価
部22では単一値逐次式評価部45に制御を渡す。この
結果、単一値逐次式評価部45の処理実行後の結果は、
図32に示すようになる。
【0042】図32は、単一値逐次式評価部の処理実行
後のレジスタ群の内容を示す図である。この時点では、
継続レジスタ321には、図32に示すように、更に先
頭以外の部分式およびbegin-single-value-more命令が
退避されている。次の無値評価を行うために、命令レジ
スタ322にはevaluate-no-value命令が設定され、評
価式レジスタ322には先頭の部分式が設定されてい
る。この場合の処理においては、命令レジスタ322の
内容は、evalute-no-value命令であるから、解釈実行部
12は、無値評価部23に制御を渡し、また、評価式レ
ジスタ323の内容は定数となっているので、無値評価
部23は無値定数評価部51に制御を渡すことになる。
この結果、無値定数評価部51の処理実行後の結果は、
図33に示すようになる。
【0043】図33は、無値定数評価部51の処理実行
後のレジスタ群の内容を示す図である。この時点では、
継続レジスタ331には、図33に示すように、次の命
令のbegin-single-value-more命令は既に回復されて無
くなっており、逐次式の残りの部分式が格納されてい
る。命令レジスタ332には、begin-single-value-mor
e命令が回復されて格納されている。この場合の処理で
は、命令レジスタの内容が、begin-single-value-more
命令であるから、解釈実行部12は単一値逐次式続行部
46に制御を渡すことになる。この結果、単一値逐次式
続行部46の実行後の結果は、図34に示すようにな
る。
【0044】図34は、単一値逐次式続行部46の処理
実行後のレジスタ内容を示す図である。その後の処理で
は、最後の部分式の評価であるから、図34に示すよう
に、継続レジスタ341の先頭には条件式の継続部分が
回復され、また、命令レジスタ342にはevalute-sing
le-value命令が設定される。評価式レジスタ343は最
後の部分式を格納している。この場合、命令レジスタ3
42の内容はevalute-single-value命令となっているの
で、解釈実行部12は単一値評価部22に制御を渡し、
評価式レジスタ343の内容は定数のため、単一値評価
部22は単一値定数評価部41に制御を渡すことにな
る。この結果、単一値定数評価部41の実行の結果は、
図35に示すようになる。
【0045】図35は単一値定数評価部41の処理実行
後のレジスタ内容を示す図である。この時点では、継続
レジスタ351は条件式のthen部およびelse部を格納し
ており、命令レジスタ352にはif-mutiple-value命令
が回復されている。また、単一値レジスタ353には式
の値が格納されている。この場合には、命令レジスタ3
52の内容がif-mutiple-value命令であるから、解釈実
行部12は多値評価部21に制御を渡し、多値評価部2
1は多値分岐決定部34に制御を渡して、評価処理を行
う。これにより、多値分岐決定部34は継続レジスタ3
51より、then部、else部を回復し、単一値レジスタ3
53が真を格納していることから、then部を評価式レジ
スタに格納し、evaluate-multiple-value命令を命令レ
ジスタに格納する。この結果、多値分岐決定部34の処
理実行の後は、図36に示すようになる。
【0046】図36は多値分岐決定部の処理の実行後の
レジスタ内容を示す図である。前の処理で、命令レジス
タ361にはevaluate-multiple-value命令が格納され
ており、評価式レジスタ362には条件式のthen部が格
納されている。このため、ここでの処理を進めると、命
令レジスタ361はevaluate-multiple-value命令を格
納していることから、多値評価部21は多値定数評価部
31に制御を渡して処理を進める。その結果、多値定数
評価部31の処理の実行の後は、図37のようになる。
【0047】図37は、多値定数評価部31の処理実行
後のレジスタ内容を示す図である。このような処理の結
果では、プログラム例の式の値が単一値レジスタ37に
格納されている状態となる。
【0048】このように、本実施例にかかる計算機用言
語の実行処理方式によれば、部分式評価における要求を
分類毎に専用の評価関数の処理部(多値評価部,単一値
評価部,無値評価部)を用意し、評価対象の計算機言語
の処理を、各々の分類に応じて、それぞれの評価関数の
個々の個別の処理部分によって部分式を評価する処理を
行う。このため、各々の分類に従った専用の評価関数に
より、計算機言語の解釈実行の処理を行うことにより、
部分式の評価に際して最小限の要求に従って、処理が実
行されるので、評価の処理の実行の処理速度が向上す
る。例えば、関数適用時の引数の評価、あるいは条件分
岐式の条件部の評価のように部分式の値の最初のものし
か必要としない場合、単一値専用の評価関数を用いるこ
とにより、多くの値を評価し、レジスタなどに格納する
無駄を避けることができる。特に、逐次式の最後の式以
外の式のように値が不要な式の評価の場合には、不要な
値を評価して格納する処理の無駄を避けることができ、
解釈実行の処理速度が向上する。
【0049】
【発明の効果】以上、説明したように、本発明の計算機
用言語の解釈実行方式によれば、各分類に応じた評価を
行う場合に対応して、部分式評価の分類毎に専用の評価
関数で処理を行う関数処理部が備えられ、この各々の分
類毎の専用の評価関数の関数処理部により、部分式評価
における評価要求の処理を行い、部分式の評価を行うた
め、各分類に応じた評価の処理が、部分式評価における
要求の分類毎に用意された専用の評価関数によって部分
式の評価処理が行なわれる。このため、各々の分類に従
った専用の評価関数により、計算機言語の解釈実行の処
理を行うことになり、部分式の評価に際して最小限の要
求に従って処理が行なわれ、解釈実行の処理速度が向上
する。
【図面の簡単な説明】
【図1】図1は本発明の一実施例にかかる計算機言語の
解釈実行方式により処理を行う場合に評価対象となる計
算機言語の構文を説明する図、
【図2】図2は図1に示す計算機言語の構文を解釈実行
する計算機システムの要部構成を示すブロック図、
【図3】図3は、多値評価部の内部構成の要部を説明す
るブロック図、
【図4】図4は、単一値評価部の内部構成の要部を説明
するブロック図、
【図5】図5は無評価部の内部構成の要部を説明するブ
ロック図、
【図6】図6は評価処理を行う各々の命令語と対応する
各処理部の対応関係を示す図、
【図7】図7は計算機用言語の解釈実行の全体の処理制
御を行う解釈実行部の動作を示すフローチャート、
【図8】図8は多値評価部の処理動作を示すフローチャ
ート、
【図9】図9は単一値評価部の処理動作を示すフローチ
ャート、
【図10】図10は無値評価部の処理動作を示すフロー
チャート、
【図11】図11は多値定数評価部の処理動作を示すフ
ローチャート、
【図12】図12は単一値定数評価部の処理動作を示す
フローチャート、
【図13】図13は無値定数評価部の処理動作を示すフ
ローチャート、
【図14】図14は多値変数評価部の処理動作を示すフ
ローチャート、
【図15】図15は単一値変数評価部の処理動作を示す
フローチャート、
【図16】図16は無値変数評価部の処理動作を示すフ
ローチャート、
【図17】図17は、多値条件式評価部の処理動作を示
すフローチャート、
【図18】図18は、単一値条件評価部の処理動作を示
すフローチャート、
【図19】図19は、無値条件式評価部の処理動作を示
すフローチャート、
【図20】図20は多値分岐決定部の処理動作を示すフ
ローチャート、
【図21】図21は単一値分岐決定部の処理動作を示す
フローチャート、
【図22】図22は無値分岐決定部の処理動作を示すフ
ローチャート、
【図23】図23は、多値逐次式評価部の処理動作を示
すフローチャート、
【図24】図24は、単一値逐次式評価部の処理動作を
示すフローチャート、
【図25】図25は、無値逐次式評価部の処理動作を示
すフローチャート、
【図26】図26は、多値逐次式続行部の処理動作を示
すフローチャート、
【図27】図27は単一逐次式続行部の処理動作を示す
フローチャート、
【図28】図28は無値逐次式続行部の処理動作を示す
フローチャート、
【図29】図29は計算機言語の解釈実行を行う場合の
評価対象とする計算機言語のプログラム例を示す図、
【図30】図30は実行開始時点でのレジスタ群の内容
を示す図、
【図31】図31は多値条件式評価部33の処理実行後
のレジスタ群の内容を示す図、
【図32】図32は単一値逐次式評価部の処理実行後の
レジスタ群の内容を示す図、
【図33】図33は無値定数評価部51の処理実行後の
レジスタ群の内容を示す図、
【図34】図34は単一値逐次式続行部46の処理実行
後のレジスタ内容を示す図、
【図35】図35は単一値定数評価部41の処理実行後
のレジスタ内容を示す図、
【図36】図36は多値分岐決定部の処理の実行後のレ
ジスタ内容を示す図、
【図37】図37は多値定数評価部31の処理実行後の
レジスタ内容を示す図である。
【符号の説明】
12…解釈実行部 13…主記憶部 14…入力部 15…出力部 20…作業レジスタ 21…多値評価部 22…単一評価部 23…無値評価部 24…命令レジスタ 25…環境レジスタ 26…継続レジスタ 27…評価式レジスタ 28…単一レジスタ 29…多値レジスタ・バンク 31…多値定数評価部 32…多値変数評価部 33…多値条件式評価部 34…多値分岐決定部 35…多値逐次式評価部 36…多値逐次式続行部 41…単一値定数評価部 42…単一値変数評価部 43…単一値条件式評価部 44…単一値分岐決定部 45…単一値逐次式評価部 46…単一値逐次式続行部 51…無値定数評価部 52…無値変数評価部 53…無値条件式評価部 54…無値分岐決定部 55…無値逐次式評価部 56…無値逐次式続行部。

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 計算機言語の評価対象の評価対象の式が
    部分式を含むような計算機言語の解釈実行系において、
    部分式の評価に際して、部分式の評価に要求されている
    状況を(a)部分式が返す値の全てが必要な場合、
    (b)部分式が返す最初の値のみが必要な場合、および
    (c)部分式の値は不要な場合に分類し、各分類に応じ
    て評価を行い、当該計算機言語の解釈実行を行うことを
    特徴とする計算機言語の解釈実行方式。
  2. 【請求項2】 請求項1に記載の計算機言語の解釈実行
    方式において、各分類に応じた評価を行う場合、部分式
    評価の分類毎に専用の評価関数で処理を行う関数処理部
    を備え、分類毎の専用の評価関数の関数処理部により、
    部分式評価における評価要求の処理を行い、部分式の評
    価を行うことを特徴とする計算機言語の解釈実行方式。
JP9367392A 1992-03-20 1992-03-20 計算機言語の解釈実行方式 Pending JPH05265768A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP9367392A JPH05265768A (ja) 1992-03-20 1992-03-20 計算機言語の解釈実行方式

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP9367392A JPH05265768A (ja) 1992-03-20 1992-03-20 計算機言語の解釈実行方式

Publications (1)

Publication Number Publication Date
JPH05265768A true JPH05265768A (ja) 1993-10-15

Family

ID=14088928

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9367392A Pending JPH05265768A (ja) 1992-03-20 1992-03-20 計算機言語の解釈実行方式

Country Status (1)

Country Link
JP (1) JPH05265768A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017018644A1 (ko) * 2015-07-30 2017-02-02 삼성전자 주식회사 전자 장치, 컴파일링 방법 및 컴퓨터 판독가능 기록매체

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017018644A1 (ko) * 2015-07-30 2017-02-02 삼성전자 주식회사 전자 장치, 컴파일링 방법 및 컴퓨터 판독가능 기록매체
US10635421B2 (en) 2015-07-30 2020-04-28 Samsung Electronics Co., Ltd. Electronic device, compiling method and computer-readable recording medium

Similar Documents

Publication Publication Date Title
EP0474425B1 (en) Arrangement for efficiently transferring program execution between subprograms
US6983458B1 (en) System for optimizing data type definition in program language processing, method and computer readable recording medium therefor
US20010047511A1 (en) Method of reducing unnecessary barrier instructions
EP0428560A4 (en) Machine process for translating programs in binary machine language into another binary machine language
US5778232A (en) Automatic compiler restructuring of COBOL programs into a proc per paragraph model
EP0692115B1 (en) System for conversion of loop functions to continuation-passing style
JPH05265768A (ja) 計算機言語の解釈実行方式
KR100305097B1 (ko) 최적화에 있어서 인터럽트 처리의 경감을 실현하는 컴파일러 및 그의 최적화 방법
JP2001125792A (ja) 最適化促進装置
US6944852B2 (en) Compiler
JPH04263323A (ja) 機械語命令列並べ換え方式
EP0633525B1 (en) Method for compilation of programming languages
JPH08263300A (ja) インライン展開方式
JPH11272473A (ja) プログラム言語処理装置のコード最適化方式
KR20240030078A (ko) 블록체인 스마트 컨트랙트 취약점 위치 탐지 방법 및 장치
JPS63138427A (ja) 配列に対する命令のスケジユ−リング処理方式
JPS63163636A (ja) 並列処理実行方式
JPH10171656A (ja) スクリプト言語処理装置
Feeley A better API for first-class continuations
JPS63106865A (ja) 再帰演算を含むル−プのベクトル化方法
JPH03144830A (ja) 並列処理方式
JPS62204341A (ja) デ−タ処理装置
JPH0776926B2 (ja) ループ制御処理方法
JPH04102925A (ja) 計算機プログラムの作成・実行方式
JPH0440744B2 (ja)