JPH03177930A - コンパイルコード生成処理方法 - Google Patents
コンパイルコード生成処理方法Info
- Publication number
- JPH03177930A JPH03177930A JP31861889A JP31861889A JPH03177930A JP H03177930 A JPH03177930 A JP H03177930A JP 31861889 A JP31861889 A JP 31861889A JP 31861889 A JP31861889 A JP 31861889A JP H03177930 A JPH03177930 A JP H03177930A
- Authority
- JP
- Japan
- Prior art keywords
- function
- argument
- names
- variable
- symbol
- 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
Links
- 238000003672 processing method Methods 0.000 title claims description 9
- 230000006870 function Effects 0.000 claims abstract description 100
- 238000012545 processing Methods 0.000 abstract description 15
- 230000002542 deteriorative effect Effects 0.000 abstract 1
- 238000000034 method Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 5
- 238000013473 artificial intelligence Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
〔産業上の利用分野〕
この発明は、Li5p (List Process
er)等の関数型言語の関数をコンパイルするときのコ
ンパイルコード生成処理方法に関する。
er)等の関数型言語の関数をコンパイルするときのコ
ンパイルコード生成処理方法に関する。
Li5pはリスト処理を目的として開発された関数型の
プログラミング言語であり、主に人工知能研究の分野で
用いられている。また最近では、エキスパートシステム
の記述言語としても注目を集めている。Li5pは2本
の枝により構成される2進木を基本構造としており、こ
の2進木を組み合わせることによってデータのリスト(
情報の記憶形態)を形成している。したがって、データ
間の関葆は全てリストにより表現されることになる。L
i5pにより作成された関数(プログラム)はコンパイ
ラで処理することにより、コンパイルコード(オブジェ
クトプログラム)として生成される。
プログラミング言語であり、主に人工知能研究の分野で
用いられている。また最近では、エキスパートシステム
の記述言語としても注目を集めている。Li5pは2本
の枝により構成される2進木を基本構造としており、こ
の2進木を組み合わせることによってデータのリスト(
情報の記憶形態)を形成している。したがって、データ
間の関葆は全てリストにより表現されることになる。L
i5pにより作成された関数(プログラム)はコンパイ
ラで処理することにより、コンパイルコード(オブジェ
クトプログラム)として生成される。
ところで、従来のコンパイラによって生成されたコンパ
イルコードの中には、局所変数である引数の値を参照す
るためのアドレスは保存されていたが、引数の名前は保
存されていなかった。したがって、ユーザーはエラーが
発生した部分の引数の名前をソースプログラムを見なが
ら調べなければならず、デバッグに多くの労力と時間を
強いられるという問題点があった。
イルコードの中には、局所変数である引数の値を参照す
るためのアドレスは保存されていたが、引数の名前は保
存されていなかった。したがって、ユーザーはエラーが
発生した部分の引数の名前をソースプログラムを見なが
ら調べなければならず、デバッグに多くの労力と時間を
強いられるという問題点があった。
なお、コンパイルコードの中に引数の名前を保存するこ
ともできるが、コンパイルコードのボリュームが大きく
なり、結果的にプログラム実行時の実行速度が低下して
しまう。
ともできるが、コンパイルコードのボリュームが大きく
なり、結果的にプログラム実行時の実行速度が低下して
しまう。
この発明は、プログラムの実行速度を低下させることな
く、デバッグ時に引数の名前を参照できるようにしたコ
ンパイルコード生成処理方法を提供することを目的とす
る。
く、デバッグ時に引数の名前を参照できるようにしたコ
ンパイルコード生成処理方法を提供することを目的とす
る。
〔課題を解決するための手段〕及び〔作用〕この発明に
係わるコンパイルコード生成処理方法では、Li5p等
の関数の定義情報の中に、局所変数である引数の名前及
び値を保持するテーブルと、入城変数である変数の名前
及び値を保持するテーブルをそれぞれ異なる領域に割り
当てるようにしたものである。
係わるコンパイルコード生成処理方法では、Li5p等
の関数の定義情報の中に、局所変数である引数の名前及
び値を保持するテーブルと、入城変数である変数の名前
及び値を保持するテーブルをそれぞれ異なる領域に割り
当てるようにしたものである。
実行時に引数の値を参照する場合は、スタックフレーム
の引数の領域にあるポインタを参照し、そのポインタが
指しているオブジェクトを参照する。変数の値を参照す
る場合は、スタックフレームの変数の領域にあるポイン
タを参照し、そのポインタが指しているオブジェクトを
参照する。
の引数の領域にあるポインタを参照し、そのポインタが
指しているオブジェクトを参照する。変数の値を参照す
る場合は、スタックフレームの変数の領域にあるポイン
タを参照し、そのポインタが指しているオブジェクトを
参照する。
一方、デバッグ時において、引数の値はスタックフレー
ムの引数へのポインタを参照する。引数の名前は関数定
義の引数のテーブルを参照し、シンボルへのインデック
スを元にしてシンボルテーブルを参照する。また、変数
の値はスタックフレームの変数へのポインタを参照する
。変数の名前はそのスタックに対応した関数定義の変数
のテーブルを参照し、シンボルへのインデックスを元に
してシンボルテーブルを参照する。シンボルテーブルの
名前のフィールドが変数の名前である。
ムの引数へのポインタを参照する。引数の名前は関数定
義の引数のテーブルを参照し、シンボルへのインデック
スを元にしてシンボルテーブルを参照する。また、変数
の値はスタックフレームの変数へのポインタを参照する
。変数の名前はそのスタックに対応した関数定義の変数
のテーブルを参照し、シンボルへのインデックスを元に
してシンボルテーブルを参照する。シンボルテーブルの
名前のフィールドが変数の名前である。
以下、この発明に係わるコンパイルコード生成処理方法
の一実施例を説明する。なお、以下の説明では、局所変
数を引数といい、入城変数を変数という。
の一実施例を説明する。なお、以下の説明では、局所変
数を引数といい、入城変数を変数という。
第1図は、この発明に係わるコンパイルコード生成処理
方法において、Li5pの関数をコンパイルしたときに
生成されるコンパイルコードの概要を示す説明図である
。コンパイルコードにおける関数定義テーブル11は、
関数の定義情報を保持する関数のヘッダ1と、変数の名
前を保持する変数テーブル2と、引数の名前を保持する
引数テーブル3と、関数が実行する処理を記述している
実行コード4とから構成されている。Li5pの関数を
コンパイルする場合は、最初に関数のソースコードの宣
言文に引数が含まれているか、変数が含まれているかを
判断し、引数が含まれているときは引数テーブル3にシ
ンボルを示すインデックス値(ポインタ)を登録し、変
数が含まれているときは変数テーブル2にシンボルを示
すインデックス値を登録する。
方法において、Li5pの関数をコンパイルしたときに
生成されるコンパイルコードの概要を示す説明図である
。コンパイルコードにおける関数定義テーブル11は、
関数の定義情報を保持する関数のヘッダ1と、変数の名
前を保持する変数テーブル2と、引数の名前を保持する
引数テーブル3と、関数が実行する処理を記述している
実行コード4とから構成されている。Li5pの関数を
コンパイルする場合は、最初に関数のソースコードの宣
言文に引数が含まれているか、変数が含まれているかを
判断し、引数が含まれているときは引数テーブル3にシ
ンボルを示すインデックス値(ポインタ)を登録し、変
数が含まれているときは変数テーブル2にシンボルを示
すインデックス値を登録する。
関数定義テーブル11と共に生成される情報としてシン
ボルテーブル12がある。シンボルテーブル12は、各
シンボルの名前、プロパティ (属性)、値、関数定義
を格納しておくためのテーブルである(なお、シンボル
の名前は、他の手続き型の言語でいえば変数の名前に対
応する)。また、プロパティはシンボルに付属するデー
タであり、値はそのシンボルを評価したときに得られる
データ(手続き型言語で変数の値と同じもの)である。
ボルテーブル12がある。シンボルテーブル12は、各
シンボルの名前、プロパティ (属性)、値、関数定義
を格納しておくためのテーブルである(なお、シンボル
の名前は、他の手続き型の言語でいえば変数の名前に対
応する)。また、プロパティはシンボルに付属するデー
タであり、値はそのシンボルを評価したときに得られる
データ(手続き型言語で変数の値と同じもの)である。
関数の定義を第1図で説明すると、例えば、“Plus
という名前の関数(この関数は、2つの引数を取り
、1つの変数を使用していたとする)があったとすると
、この関数の定義情報は関数定義テーブル11にあり、
この関数を呼び出すためのシンボル“Plug はシ
ンボルテーブル12にある。また、シンボル″Plus
の“関数定義”のフィールドは関数定義テーブル1
1の“Plus”のエントリ(P 1 u sの関数定
義の入口の部分)を指すことになる。
という名前の関数(この関数は、2つの引数を取り
、1つの変数を使用していたとする)があったとすると
、この関数の定義情報は関数定義テーブル11にあり、
この関数を呼び出すためのシンボル“Plug はシ
ンボルテーブル12にある。また、シンボル″Plus
の“関数定義”のフィールドは関数定義テーブル1
1の“Plus”のエントリ(P 1 u sの関数定
義の入口の部分)を指すことになる。
関数定義テーブル11からシンボルテーブル12へ参照
するものとしては、関数の引数と変数のシンボルの定義
を指しているもの、すなわち、引数及び変数の項目にお
ける“シンボルへのインデックス”のフィールドがある
。また、シンボルテーブル12から関数定義テーブル1
1へ参照するものとしては、シンボルテーブル12の“
関数定義“のフィールドがある。ただし、そのシンボル
の名前の関数がない場合には、“関数定義゛のフィール
ドは関数定義のテーブルを指すことはない。
するものとしては、関数の引数と変数のシンボルの定義
を指しているもの、すなわち、引数及び変数の項目にお
ける“シンボルへのインデックス”のフィールドがある
。また、シンボルテーブル12から関数定義テーブル1
1へ参照するものとしては、シンボルテーブル12の“
関数定義“のフィールドがある。ただし、そのシンボル
の名前の関数がない場合には、“関数定義゛のフィール
ドは関数定義のテーブルを指すことはない。
例えば、第1図のシンボル“X″の場合は、Xという名
前の関数がないので、シンボル″X の゛関数定義”の
フィールドは、関数定義テーブル〕1のどのフィールド
も指していない。なお、シンボルテーブル12から関数
定義テーブル11への参照が起きるのは、例えば、ユー
ザーが8式を入力して関数を直接呼び出すときや、関数
の引数としてさらに関数が渡された時である。
前の関数がないので、シンボル″X の゛関数定義”の
フィールドは、関数定義テーブル〕1のどのフィールド
も指していない。なお、シンボルテーブル12から関数
定義テーブル11への参照が起きるのは、例えば、ユー
ザーが8式を入力して関数を直接呼び出すときや、関数
の引数としてさらに関数が渡された時である。
第2図は、関数の実行時のスタックの概要を示す説明図
である。スタックは、実行中の関数のスタックフレーム
と、その関数のワークエリアから溝底されている。また
、関数のスタックフレームは、スタックの底の方から引
数の領域5、関数の定義と実行状態の領域6、変数の領
域7が順に配置されている。第2図では、関数Aと関数
日のスタックフレームが積まれている状態を示している
。
である。スタックは、実行中の関数のスタックフレーム
と、その関数のワークエリアから溝底されている。また
、関数のスタックフレームは、スタックの底の方から引
数の領域5、関数の定義と実行状態の領域6、変数の領
域7が順に配置されている。第2図では、関数Aと関数
日のスタックフレームが積まれている状態を示している
。
プログラムの実行時には、関数の呼び出しか起きるごと
にスタックにそれぞれの関数のスタックフレームが積ま
れていく。そして、関数が呼び出されると、呼び出され
た関数のスタックフレームの関数の定義と実行状態の領
域6の先頭(この例ではALink)のアドレスが渡さ
れる。したがって、関数を実行するときには、必ず、関
数の定義と実行状態の領域6のアドレスが知らされてい
ることになる。また、関数の定義と実行状態の領域6に
含まれるフィールドの数は固定であり、何番目のフィー
ルドがどの要素なのかも固定的に決まっている。
にスタックにそれぞれの関数のスタックフレームが積ま
れていく。そして、関数が呼び出されると、呼び出され
た関数のスタックフレームの関数の定義と実行状態の領
域6の先頭(この例ではALink)のアドレスが渡さ
れる。したがって、関数を実行するときには、必ず、関
数の定義と実行状態の領域6のアドレスが知らされてい
ることになる。また、関数の定義と実行状態の領域6に
含まれるフィールドの数は固定であり、何番目のフィー
ルドがどの要素なのかも固定的に決まっている。
次に、上述したコンパイルコードにおいて、プログラム
実行時に引数と変数を参照する場合の処理手順を、第1
図、第2図を参照しながら、第3図及び第4図のフロー
チャートに基づいて説明する。
実行時に引数と変数を参照する場合の処理手順を、第1
図、第2図を参照しながら、第3図及び第4図のフロー
チャートに基づいて説明する。
第3図は、実行時に引数の値を参照する場合の処理手順
を示すフローチャートである。引数にアクセスする場合
は、スタックフレームにある関数の定義と実行状態の領
域6の先頭(ALink)のアドレスから1を引き、引
数の領域5の“引数領域の先頭”へのポインタのアドレ
スを得る(ステップ101)。そして、6引数領域の先
頭”に引数の領域5の先頭からのオフセットを加えて、
“引数へのポインタ′のアドレスを得る(ステップ10
2)。例えば、1番目の引数のときはオフセットはOと
なるので“引数領域の先頭”+0となり、3番目の引数
のときはオフセットは2となるので“引数領域の先頭”
+2となる。
を示すフローチャートである。引数にアクセスする場合
は、スタックフレームにある関数の定義と実行状態の領
域6の先頭(ALink)のアドレスから1を引き、引
数の領域5の“引数領域の先頭”へのポインタのアドレ
スを得る(ステップ101)。そして、6引数領域の先
頭”に引数の領域5の先頭からのオフセットを加えて、
“引数へのポインタ′のアドレスを得る(ステップ10
2)。例えば、1番目の引数のときはオフセットはOと
なるので“引数領域の先頭”+0となり、3番目の引数
のときはオフセットは2となるので“引数領域の先頭”
+2となる。
次に、このようにして得られたアドレスから、引数の領
域5にある“引数へのポインタ“を参照しくステップ1
03)、引数へのポインタが指しているオブジェクトを
参照する(ステップ104)なお、実行時に必要な引数
の情報は、その値だけであり、名前を参照することはな
い。
域5にある“引数へのポインタ“を参照しくステップ1
03)、引数へのポインタが指しているオブジェクトを
参照する(ステップ104)なお、実行時に必要な引数
の情報は、その値だけであり、名前を参照することはな
い。
第4図は実行時に変数の値を参照する場合の処理手順を
示すフローチャートである。変数の値を参照する場合は
、まず、スタックフレームにある関数の定義と実行状態
の領域6の最後の次のアドレスを計算する(ステップ2
01)。例えば、関数の定義と実行状態の領域6のサイ
ズが固定で、ここでサイズをFとすると、変数の領域7
の先頭のアドレスは、関数の定義と実行状態の領域6の
先頭のアドレス十Fとなる。
示すフローチャートである。変数の値を参照する場合は
、まず、スタックフレームにある関数の定義と実行状態
の領域6の最後の次のアドレスを計算する(ステップ2
01)。例えば、関数の定義と実行状態の領域6のサイ
ズが固定で、ここでサイズをFとすると、変数の領域7
の先頭のアドレスは、関数の定義と実行状態の領域6の
先頭のアドレス十Fとなる。
次に、このようにして求められた変数の領域7の先頭の
アドレスに、何番目めの変数かに応じて変数の領域7の
先頭からのオフセットを加え、変数へのポインタのアド
レスを得る(ステップ202)。そして、このアドレス
から変数へのポインタを参照しくステップ203)、変
数へのポインタが指しているオブジェクト(データ)を
参照する(ステップ204)。なお、実行時に必要な変
数の情報は、その値だけであり、名前を参照することは
通常はない。
アドレスに、何番目めの変数かに応じて変数の領域7の
先頭からのオフセットを加え、変数へのポインタのアド
レスを得る(ステップ202)。そして、このアドレス
から変数へのポインタを参照しくステップ203)、変
数へのポインタが指しているオブジェクト(データ)を
参照する(ステップ204)。なお、実行時に必要な変
数の情報は、その値だけであり、名前を参照することは
通常はない。
関数をデバッグするときのデバッガは、スタックの中を
見るときに、関数の呼び出し関係を示しているポインタ
を辿り、それぞれの関数のスタックフレームを参照する
。関数の呼び出し関係を示しているポインタは、関数の
スタックフレームのうち、関数の定義と実行状態の領域
6の先頭を指している。したがって、デバッグするとき
には、必ず、関数の定義と実行状態の領域6のアドレス
が知らされていることになる。
見るときに、関数の呼び出し関係を示しているポインタ
を辿り、それぞれの関数のスタックフレームを参照する
。関数の呼び出し関係を示しているポインタは、関数の
スタックフレームのうち、関数の定義と実行状態の領域
6の先頭を指している。したがって、デバッグするとき
には、必ず、関数の定義と実行状態の領域6のアドレス
が知らされていることになる。
次に、プログラムのデバッグ時に引数と変数を参照する
場合の処理手順を第5図及び第6図のフローチャートに
基づいて説明する。
場合の処理手順を第5図及び第6図のフローチャートに
基づいて説明する。
第5図は、デバッグ時に引数の名前を参照する場合の処
理手順を示すフローチャートである。引数の名前を参照
する場合は、まずスタックフレームにある、関数定義と
実行状態の領域6のアドレスに2を加え、“関数定義へ
のポインタ”のアドレスを得る(ステップ301)。そ
して、このアドレスから“関数定義へのポインタ″を参
照しくステップ302)、“関数定義へのポインタ”が
指している関数の定義を参照する(ステップ303)。
理手順を示すフローチャートである。引数の名前を参照
する場合は、まずスタックフレームにある、関数定義と
実行状態の領域6のアドレスに2を加え、“関数定義へ
のポインタ”のアドレスを得る(ステップ301)。そ
して、このアドレスから“関数定義へのポインタ″を参
照しくステップ302)、“関数定義へのポインタ”が
指している関数の定義を参照する(ステップ303)。
続いて、関数の定義の先頭のアドレスに関数のヘッダの
サイズ(固定値)と変数の個数×2を加え、引数テーブ
ル3の先頭のアドレスを得る(ステップ304)。次に
、引数テーブル3の先頭のアドレスにオフセットを加え
、参照したい引数のシンボルへのインデックスのアドレ
スを得る(ステップ305)。さらに、参照したい引数
のシンボルへのインデックスを参照しくステップ306
)、インデックスが指すシンボルテーブルでの定義を参
照する(ステップ307)。そして、シンボルの定義の
うちの名前のエリアを参照する(ステップ308)。な
お、デバッグ時に引数の値を参照するときは、実行時と
同様の処理(第3図)を行う。
サイズ(固定値)と変数の個数×2を加え、引数テーブ
ル3の先頭のアドレスを得る(ステップ304)。次に
、引数テーブル3の先頭のアドレスにオフセットを加え
、参照したい引数のシンボルへのインデックスのアドレ
スを得る(ステップ305)。さらに、参照したい引数
のシンボルへのインデックスを参照しくステップ306
)、インデックスが指すシンボルテーブルでの定義を参
照する(ステップ307)。そして、シンボルの定義の
うちの名前のエリアを参照する(ステップ308)。な
お、デバッグ時に引数の値を参照するときは、実行時と
同様の処理(第3図)を行う。
第6図は、デバッグ時に変数の名前を参照する場合の処
理手順を示すフローチャートである。変数の名前を参照
する場合は、まずスタックフレームにある、関数定義と
実行状態の領域6のアドレスに、固定したオフセット(
−2)を加え、“関数定義のポインタ”のアドレスを得
る(ステップ401)。このアドレスから“関数定義へ
のポインタ”を参照しくステップ402)、“関数定義
へのポインタ”が指している関数の定義、を参照する(
ステップ403)。そして、関数の定義の先頭のアドレ
スに関数のヘッダのサイズ(固定値)を加え、変数テー
ブル2の先頭のアドレスを得る(ステップ404)。続
いて、変数テーブル2の先頭のアドレスにオフセットを
加え、参照したい変数のシンボルへのインデックスのア
ドレスを得る(ステップ405)。さらに、参照したい
変数のシンボルへのインデックスを参照しくステップ4
06)、インデックスが指すシンボルテーブルでの定義
を参照する(ステップ407)。そして、シンボルの定
義のうちの名前のエリアを参照する(ステップ408)
。なお、デバッグ時に変数の値を参〇、αするときは、
実行時と同様の処理(第4図)を行う。
理手順を示すフローチャートである。変数の名前を参照
する場合は、まずスタックフレームにある、関数定義と
実行状態の領域6のアドレスに、固定したオフセット(
−2)を加え、“関数定義のポインタ”のアドレスを得
る(ステップ401)。このアドレスから“関数定義へ
のポインタ”を参照しくステップ402)、“関数定義
へのポインタ”が指している関数の定義、を参照する(
ステップ403)。そして、関数の定義の先頭のアドレ
スに関数のヘッダのサイズ(固定値)を加え、変数テー
ブル2の先頭のアドレスを得る(ステップ404)。続
いて、変数テーブル2の先頭のアドレスにオフセットを
加え、参照したい変数のシンボルへのインデックスのア
ドレスを得る(ステップ405)。さらに、参照したい
変数のシンボルへのインデックスを参照しくステップ4
06)、インデックスが指すシンボルテーブルでの定義
を参照する(ステップ407)。そして、シンボルの定
義のうちの名前のエリアを参照する(ステップ408)
。なお、デバッグ時に変数の値を参〇、αするときは、
実行時と同様の処理(第4図)を行う。
上記方法によれば、例えば、関数Aから関数Bを呼び出
す場合、関数Bの引数を評価し結果をスタックに積んで
関数Bを起動する。関数Bの評価は、関数Aのスタック
フレームの後にあるワークエリア(第2図参照)で行う
。スタックを使って引数を評価すると、結果(引数への
ポインタ)がTop of 5tackに残る。関
数Bの引数を順に評価すると、結果として引数のポイン
タがスタックに順番に並ぶことになる。これは関数Bの
スタックフレームの引数のエリアとして使うことができ
、新たにスタックに引数を積む必要がない。したがって
、余分に引数をコピーすることがなくなり、関数の呼び
出しを高速化することができる。
す場合、関数Bの引数を評価し結果をスタックに積んで
関数Bを起動する。関数Bの評価は、関数Aのスタック
フレームの後にあるワークエリア(第2図参照)で行う
。スタックを使って引数を評価すると、結果(引数への
ポインタ)がTop of 5tackに残る。関
数Bの引数を順に評価すると、結果として引数のポイン
タがスタックに順番に並ぶことになる。これは関数Bの
スタックフレームの引数のエリアとして使うことができ
、新たにスタックに引数を積む必要がない。したがって
、余分に引数をコピーすることがなくなり、関数の呼び
出しを高速化することができる。
以上説明したように、この発明に係わるコンパイルコー
ド生成処理方法によれば、引数の名前及び値を保持する
テーブルと、変数の名前及び値を保持するテーブルをコ
ンパイルコード内の異なる領域に割り当てるようにした
ため、実行時においては、関数の呼び出し時の引数の受
は渡しを高速化することができる。また、デバッグ時に
は引数の名前を容易に参照することができるので、デバ
ッグ時の手間を大幅に軽減することが可能となる。
ド生成処理方法によれば、引数の名前及び値を保持する
テーブルと、変数の名前及び値を保持するテーブルをコ
ンパイルコード内の異なる領域に割り当てるようにした
ため、実行時においては、関数の呼び出し時の引数の受
は渡しを高速化することができる。また、デバッグ時に
は引数の名前を容易に参照することができるので、デバ
ッグ時の手間を大幅に軽減することが可能となる。
第1図はLi spの関数をコンパイルしたときに生成
されるコンパイルコードの概要を示す説明図、第2図は
関数の実行時のスタックの概要を示す説明図、第3図は
実行時に引数の値を参照する場合の処理手順を示すフロ
ーチャート図、第4図は実行侍に変数の値を参照する場
合の処理手順を示すフローチャート図、第5図はデバッ
グ時に引数の名前を参照する場合の処理手順を示すフロ
チャート図、第6図はデバッグ時に変数の名前を参照す
る場合の処理手順を示すフローチャート図である。 1・・・関数のヘッダ、2・・・変数テーブル、3・・
・引数テーブル、4・・・実行コード、5・・・引数の
領域、6・・・関数の定義と実行状態の領域、7・・・
変数の領域、11・・・関数定義テーブル、12・・・
シンボルテブル。 Fll’l歓の1轟 第 図 シンボルめ完」へ 第3図 第4図
されるコンパイルコードの概要を示す説明図、第2図は
関数の実行時のスタックの概要を示す説明図、第3図は
実行時に引数の値を参照する場合の処理手順を示すフロ
ーチャート図、第4図は実行侍に変数の値を参照する場
合の処理手順を示すフローチャート図、第5図はデバッ
グ時に引数の名前を参照する場合の処理手順を示すフロ
チャート図、第6図はデバッグ時に変数の名前を参照す
る場合の処理手順を示すフローチャート図である。 1・・・関数のヘッダ、2・・・変数テーブル、3・・
・引数テーブル、4・・・実行コード、5・・・引数の
領域、6・・・関数の定義と実行状態の領域、7・・・
変数の領域、11・・・関数定義テーブル、12・・・
シンボルテブル。 Fll’l歓の1轟 第 図 シンボルめ完」へ 第3図 第4図
Claims (1)
- 【特許請求の範囲】 関数型言語の関数をコンパイルしてコンパイルコードを
生成するコンパイルコード生成処理方法において、 引数の名前及び値を保持するテーブルと、変数の名前及
び値を保持するテーブルをコンパイルコード内の異なる
領域に割り当てるようにしたことを特徴とするコンパイ
ルコード生成処理方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP31861889A JPH03177930A (ja) | 1989-12-07 | 1989-12-07 | コンパイルコード生成処理方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP31861889A JPH03177930A (ja) | 1989-12-07 | 1989-12-07 | コンパイルコード生成処理方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH03177930A true JPH03177930A (ja) | 1991-08-01 |
Family
ID=18101147
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP31861889A Pending JPH03177930A (ja) | 1989-12-07 | 1989-12-07 | コンパイルコード生成処理方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH03177930A (ja) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8395915B2 (en) | 2007-11-29 | 2013-03-12 | Samsung Electro-Mechanics Co., Ltd. | DC/DC converter |
-
1989
- 1989-12-07 JP JP31861889A patent/JPH03177930A/ja active Pending
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8395915B2 (en) | 2007-11-29 | 2013-03-12 | Samsung Electro-Mechanics Co., Ltd. | DC/DC converter |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN108920133B (zh) | 跨语言编程方法、装置、电子设备及存储介质 | |
| Tatsubori et al. | OpenJava: A class-based macro system for Java | |
| US8156471B2 (en) | Multi-language execution method | |
| US5535394A (en) | Methods for distinguishing dynamically allocated storage along different call paths and for providing a compact representation of alias analysis | |
| JPH01306923A (ja) | 異種言語間連絡方式 | |
| JPH0338735A (ja) | 並列プログラム中のエラーを探す方法及び支援システム | |
| CN104965687A (zh) | 基于指令集生成的大数据处理方法及装置 | |
| Ahman et al. | Asynchronous effects | |
| US6101326A (en) | Method and apparatus for frame elimination for simple procedures with tail calls | |
| Brown | Communicating Haskell Processes: Composable Explicit Concurrency using Monads. | |
| Curzon | A verified compiler for a structured assembly language | |
| US5150474A (en) | Method for transferring arguments between object programs by switching address modes according to mode identifying flag | |
| JPH03177930A (ja) | コンパイルコード生成処理方法 | |
| Hanson | Variable associations in SNOBOL4 | |
| KR101024707B1 (ko) | 바이트코드-투-씨 어헤드-오브-타임 컴파일러를 위한 해석기 호출 방법 | |
| US6311227B1 (en) | Procedure calling method | |
| JP2718427B2 (ja) | 大規模知識ベースにおけるデータアクセス方式 | |
| Hallenberg | A Region Pro ler for a Standard ML compiler based on Region Inference | |
| CN114489683B (zh) | 一种类java语言基于JVM的函数式编程语法实现方法 | |
| JPH04181436A (ja) | デバック方式 | |
| de Carvalho | The object and event oriented language TOOL | |
| Patnaik et al. | Implementation of CSP-S for description of distributed algorithms | |
| Molderez et al. | A platform for experimenting with language constructs for modularizing crosscutting concerns | |
| Coplien | Supporting Truly Object-Oriented Debugging of C++ Programs. | |
| Cortonesi | Objective-C frameworks to Eiffel converter |