JPH0520093A - モジユールのコンパイル方法およびコンパイル装置 - Google Patents
モジユールのコンパイル方法およびコンパイル装置Info
- Publication number
- JPH0520093A JPH0520093A JP17373091A JP17373091A JPH0520093A JP H0520093 A JPH0520093 A JP H0520093A JP 17373091 A JP17373091 A JP 17373091A JP 17373091 A JP17373091 A JP 17373091A JP H0520093 A JPH0520093 A JP H0520093A
- Authority
- JP
- Japan
- Prior art keywords
- module
- external
- information
- accessed
- called
- 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
Landscapes
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
(57)【要約】
【目的】再コンパイルすることなしに任意のモジュール
をオブジェクトコードレベルで再利用できるモジュール
のコンパイル方法およびコンパイル装置を提供する。 【構成】外部関係検出部5は、各モジュール毎にモジュ
ールが呼び出す外部モジュールやアクセスする外部変数
を検出する。外部仕様情報保持手段2は、外部関係検出
部5により検出された情報であるインタフェース情報と
資源結合情報とを記憶する。再利用化コード生成部9
は、外部仕様情報保持手段2に記憶された情報を参照し
て、各局所モジュールが呼び出す外部モジュールのコー
ルアドレスやアクセスする外部変数のアドレスが格納さ
れた外部結合情報領域を、各局所モジュール毎にモジュ
ールの活性レコードに追加する。
をオブジェクトコードレベルで再利用できるモジュール
のコンパイル方法およびコンパイル装置を提供する。 【構成】外部関係検出部5は、各モジュール毎にモジュ
ールが呼び出す外部モジュールやアクセスする外部変数
を検出する。外部仕様情報保持手段2は、外部関係検出
部5により検出された情報であるインタフェース情報と
資源結合情報とを記憶する。再利用化コード生成部9
は、外部仕様情報保持手段2に記憶された情報を参照し
て、各局所モジュールが呼び出す外部モジュールのコー
ルアドレスやアクセスする外部変数のアドレスが格納さ
れた外部結合情報領域を、各局所モジュール毎にモジュ
ールの活性レコードに追加する。
Description
【0001】
【産業上の利用分野】本発明は、ソースプログラムを機
械言語に翻訳するコンパイラにおけるモジュールのコン
パイル方法およびコンパイル装置に関するものである。
械言語に翻訳するコンパイラにおけるモジュールのコン
パイル方法およびコンパイル装置に関するものである。
【0002】
【従来の技術】パスカル(PASCAL)言語のように
モジュール(procedure)の入れ子構造を持つ
ような言語において、モジュールが外部の変数をアクセ
スする方法として、ディスプレイを使用した方法がよく
使用される。また、外部のモジュールを呼び出すとき
は、直接に呼び出す。
モジュール(procedure)の入れ子構造を持つ
ような言語において、モジュールが外部の変数をアクセ
スする方法として、ディスプレイを使用した方法がよく
使用される。また、外部のモジュールを呼び出すとき
は、直接に呼び出す。
【0003】図5は従来のモジュールのコンパイル方法
におけるディスプレイとスタック上の活性レコードとの
説明図で、従来のディスプレイを使用した外部変数アク
セス方法を示している。ディスプレイ31は、モジュー
ルの局所変数や管理情報を保持している活性レコードの
ベースポインタを、各モジュールのレベル毎に保持す
る。モジュールA,B,Cの活性レコードには、局所変
数、引数、戻り番地、呼び出し元の活性レコードのベー
スポインタなどが各々格納されている。通常、活性レコ
ードはスタック上に作られる。
におけるディスプレイとスタック上の活性レコードとの
説明図で、従来のディスプレイを使用した外部変数アク
セス方法を示している。ディスプレイ31は、モジュー
ルの局所変数や管理情報を保持している活性レコードの
ベースポインタを、各モジュールのレベル毎に保持す
る。モジュールA,B,Cの活性レコードには、局所変
数、引数、戻り番地、呼び出し元の活性レコードのベー
スポインタなどが各々格納されている。通常、活性レコ
ードはスタック上に作られる。
【0004】図6は図5の活性レコードを生成するプロ
グラムの説明図で、モジュールBからモジュールCが呼
ばれたときに、図5のように構成される活性レコードを
構成するプログラムを示している。図6のプログラムに
おいて、モジュールCが変数x1にアクセスするとき
は、変数x1が宣言されているモジュールAのレベルか
らディスプレイ31のN番目を選択し、この内容と、モ
ジュールAの活性化レコードのベースポインタ(選択さ
れたディスプレイ31の値と同じ)から変数x1までの
オフセットを加えたアドレスを実行アドレスとして実行
される。
グラムの説明図で、モジュールBからモジュールCが呼
ばれたときに、図5のように構成される活性レコードを
構成するプログラムを示している。図6のプログラムに
おいて、モジュールCが変数x1にアクセスするとき
は、変数x1が宣言されているモジュールAのレベルか
らディスプレイ31のN番目を選択し、この内容と、モ
ジュールAの活性化レコードのベースポインタ(選択さ
れたディスプレイ31の値と同じ)から変数x1までの
オフセットを加えたアドレスを実行アドレスとして実行
される。
【0005】このように、外部の変数のアクセスのため
に、必ずモジュールのレベル情報を知る必要がある。ま
た、モジュールAの呼び出しは、引数pをスタックに積
んでからモジュールAを直接呼び出す。
に、必ずモジュールのレベル情報を知る必要がある。ま
た、モジュールAの呼び出しは、引数pをスタックに積
んでからモジュールAを直接呼び出す。
【0006】
【発明が解決しようとする課題】プロトタイピングの方
法を用いたソフトウェア開発過程では、出力コードの実
行速度よりも、とにかく短期間での開発が目的となるこ
とがある。このとき、既存のモジュールがオブジェクト
コードレベルで再利用可能であれば、再コンパイルしな
いで済むので、この目的に有利である。
法を用いたソフトウェア開発過程では、出力コードの実
行速度よりも、とにかく短期間での開発が目的となるこ
とがある。このとき、既存のモジュールがオブジェクト
コードレベルで再利用可能であれば、再コンパイルしな
いで済むので、この目的に有利である。
【0007】ところで上記従来の方法では、外部変数を
アクセスするときに、モジュールのレベル情報を必要と
する。モジュールのレベル情報は、他のモジュールとの
関係から決められるので、モジュールを再利用する際
や、プログラムのデバッグ時にモジュールのレベルが変
更される場合は、新たにレベル計算をする必要がある。
このような場合、通常は再コンパイルする必要がある。
つまり、モジュールの本体に実質的な変更がなくても、
モジュールの構成が変更されると、従来の方法では再コ
ンパイルする必要があった。このため従来の方法では、
再コンパイルすることなしに、任意のモジュールをオブ
ジェクトコードレベルで再利用することができない。
アクセスするときに、モジュールのレベル情報を必要と
する。モジュールのレベル情報は、他のモジュールとの
関係から決められるので、モジュールを再利用する際
や、プログラムのデバッグ時にモジュールのレベルが変
更される場合は、新たにレベル計算をする必要がある。
このような場合、通常は再コンパイルする必要がある。
つまり、モジュールの本体に実質的な変更がなくても、
モジュールの構成が変更されると、従来の方法では再コ
ンパイルする必要があった。このため従来の方法では、
再コンパイルすることなしに、任意のモジュールをオブ
ジェクトコードレベルで再利用することができない。
【0008】また従来の方法のように、再利用モジュー
ルが外部モジュールを呼び出すときに、モジュールを直
接呼び出すのであれば、呼び出す外部モジュールが変わ
ったときに(ただし、呼び出す外部モジュールの名前は
異なることがあるが、外部仕様は同じ)、呼び出し先を
変更しなければならず、やはり、この場合も呼び出す側
の再利用モジュールを再コンパイルする必要がある。
ルが外部モジュールを呼び出すときに、モジュールを直
接呼び出すのであれば、呼び出す外部モジュールが変わ
ったときに(ただし、呼び出す外部モジュールの名前は
異なることがあるが、外部仕様は同じ)、呼び出し先を
変更しなければならず、やはり、この場合も呼び出す側
の再利用モジュールを再コンパイルする必要がある。
【0009】本発明はかかる事情に鑑みて成されたもの
であり、再コンパイルすることなしに任意のモジュール
をオブジェクトコードレベルで再利用できるモジュール
のコンパイル方法およびコンパイル装置を提供すること
を目的とする。
であり、再コンパイルすることなしに任意のモジュール
をオブジェクトコードレベルで再利用できるモジュール
のコンパイル方法およびコンパイル装置を提供すること
を目的とする。
【0010】
【課題を解決するための手段】請求項1の発明は、ソー
スプログラムのモジュールを機械言語に翻訳するに際し
て、各モジュール毎にモジュールが呼び出す外部モジュ
ールやアクセスする外部変数を検出する外部関係検出ス
テップと、この外部関係検出ステップで検出した情報を
参照して各局所モジュールが呼び出す外部モジュールの
コールアドレスやアクセスする外部変数のアドレスが格
納された外部結合情報領域を各局所モジュール毎にモジ
ュールの活性レコードに追加する再利用化コード生成ス
テップとを実行することを特徴としている。
スプログラムのモジュールを機械言語に翻訳するに際し
て、各モジュール毎にモジュールが呼び出す外部モジュ
ールやアクセスする外部変数を検出する外部関係検出ス
テップと、この外部関係検出ステップで検出した情報を
参照して各局所モジュールが呼び出す外部モジュールの
コールアドレスやアクセスする外部変数のアドレスが格
納された外部結合情報領域を各局所モジュール毎にモジ
ュールの活性レコードに追加する再利用化コード生成ス
テップとを実行することを特徴としている。
【0011】請求項2の発明は、各モジュール毎にモジ
ュールが呼び出す外部モジュールやアクセスする外部変
数を検出する外部関係検出手段と、この外部関係検出手
段により検出された情報であるインタフェース情報と資
源結合情報とを記憶する外部仕様情報保持手段と、この
外部仕様情報保持手段に記憶された情報を参照して各局
所モジュールが呼び出す外部モジュールのコールアドレ
スやアクセスする外部変数のアドレスが格納された外部
結合情報領域を各局所モジュール毎にモジュールの活性
レコードに追加する再利用化コード生成手段とを備えた
ことを特徴としている。
ュールが呼び出す外部モジュールやアクセスする外部変
数を検出する外部関係検出手段と、この外部関係検出手
段により検出された情報であるインタフェース情報と資
源結合情報とを記憶する外部仕様情報保持手段と、この
外部仕様情報保持手段に記憶された情報を参照して各局
所モジュールが呼び出す外部モジュールのコールアドレ
スやアクセスする外部変数のアドレスが格納された外部
結合情報領域を各局所モジュール毎にモジュールの活性
レコードに追加する再利用化コード生成手段とを備えた
ことを特徴としている。
【0012】請求項3の発明は、各モジュール毎にモジ
ュールが呼び出す外部モジュールやアクセスする外部変
数を検出する外部関係検出手段と、この外部関係検出手
段により検出された情報であるインタフェース情報と資
源結合情報とを記憶する外部仕様情報保持手段と、この
外部仕様情報保持手段に記憶された情報を参照して各局
所モジュールが呼び出す外部モジュールのコールアドレ
スやアクセスする外部変数のアドレスが格納された外部
結合情報領域を各局所モジュール毎にモジュールの活性
レコードに追加する再利用化コード生成手段と、モジュ
ールを再利用しないコード生成を行なう非再利用化コー
ド生成手段と、前記再利用化コード生成手段と前記非再
利用化コード生成手段とを選択的に作動状態にする再利
用化翻訳切り換え手段とを備えたことを特徴としてい
る。
ュールが呼び出す外部モジュールやアクセスする外部変
数を検出する外部関係検出手段と、この外部関係検出手
段により検出された情報であるインタフェース情報と資
源結合情報とを記憶する外部仕様情報保持手段と、この
外部仕様情報保持手段に記憶された情報を参照して各局
所モジュールが呼び出す外部モジュールのコールアドレ
スやアクセスする外部変数のアドレスが格納された外部
結合情報領域を各局所モジュール毎にモジュールの活性
レコードに追加する再利用化コード生成手段と、モジュ
ールを再利用しないコード生成を行なう非再利用化コー
ド生成手段と、前記再利用化コード生成手段と前記非再
利用化コード生成手段とを選択的に作動状態にする再利
用化翻訳切り換え手段とを備えたことを特徴としてい
る。
【0013】
【作用】請求項1の発明においては、ソースプログラム
のモジュールを機械言語に翻訳するに際して、外部関係
検出ステップで、各モジュール毎にモジュールが呼び出
す外部モジュールやアクセスする外部変数を検出し、再
利用化コード生成ステップで、外部関係検出ステップで
検出した情報を参照して、各局所モジュールが呼び出す
外部モジュールのコールアドレスやアクセスする外部変
数のアドレスが格納された外部結合情報領域を、各局所
モジュール毎にモジュールの活性レコードに追加する。
のモジュールを機械言語に翻訳するに際して、外部関係
検出ステップで、各モジュール毎にモジュールが呼び出
す外部モジュールやアクセスする外部変数を検出し、再
利用化コード生成ステップで、外部関係検出ステップで
検出した情報を参照して、各局所モジュールが呼び出す
外部モジュールのコールアドレスやアクセスする外部変
数のアドレスが格納された外部結合情報領域を、各局所
モジュール毎にモジュールの活性レコードに追加する。
【0014】請求項2の発明において、外部関係検出手
段は、各モジュール毎にモジュールが呼び出す外部モジ
ュールやアクセスする外部変数を検出する。外部仕様情
報保持手段は、外部関係検出手段により検出された情報
であるインタフェース情報と資源結合情報とを記憶す
る。再利用化コード生成手段は、外部仕様情報保持手段
に記憶された情報を参照して、各局所モジュールが呼び
出す外部モジュールのコールアドレスやアクセスする外
部変数のアドレスが格納された外部結合情報領域を、各
局所モジュール毎にモジュールの活性レコードに追加す
る。
段は、各モジュール毎にモジュールが呼び出す外部モジ
ュールやアクセスする外部変数を検出する。外部仕様情
報保持手段は、外部関係検出手段により検出された情報
であるインタフェース情報と資源結合情報とを記憶す
る。再利用化コード生成手段は、外部仕様情報保持手段
に記憶された情報を参照して、各局所モジュールが呼び
出す外部モジュールのコールアドレスやアクセスする外
部変数のアドレスが格納された外部結合情報領域を、各
局所モジュール毎にモジュールの活性レコードに追加す
る。
【0015】請求項3の発明において、外部関係検出手
段は、各モジュール毎にモジュールが呼び出す外部モジ
ュールやアクセスする外部変数を検出する。外部仕様情
報保持手段は、外部関係検出手段により検出された情報
であるインタフェース情報と資源結合情報とを記憶す
る。再利用化コード生成手段は、外部仕様情報保持手段
に記憶された情報を参照して、各局所モジュールが呼び
出す外部モジュールのコールアドレスやアクセスする外
部変数のアドレスが格納された外部結合情報領域を、各
局所モジュール毎に、モジュールの活性レコードに追加
する。非再利用化コード生成手段は、モジュールを再利
用しないコード生成を行なう。再利用化翻訳切り換え手
段は、再利用化コード生成手段と非再利用化コード生成
手段とを選択的に作動状態にする。
段は、各モジュール毎にモジュールが呼び出す外部モジ
ュールやアクセスする外部変数を検出する。外部仕様情
報保持手段は、外部関係検出手段により検出された情報
であるインタフェース情報と資源結合情報とを記憶す
る。再利用化コード生成手段は、外部仕様情報保持手段
に記憶された情報を参照して、各局所モジュールが呼び
出す外部モジュールのコールアドレスやアクセスする外
部変数のアドレスが格納された外部結合情報領域を、各
局所モジュール毎に、モジュールの活性レコードに追加
する。非再利用化コード生成手段は、モジュールを再利
用しないコード生成を行なう。再利用化翻訳切り換え手
段は、再利用化コード生成手段と非再利用化コード生成
手段とを選択的に作動状態にする。
【0016】
【実施例】以下、本発明の実施例を図面を用いて詳細に
説明する。図1は本発明の一実施例におけるモジュール
のコンパイル装置を備えたコンパイラのブロック図で、
このコンパイラは、構文解析部1と、各モジュール毎に
設けられた外部仕様情報保持手段2と、コード生成部3
とにより構成されている。構文解析部1には、外部関係
検出部5が設置されており、外部仕様情報保持手段2に
は、インターフェース情報部6と、資源結合情報部7と
が設置されている。コード生成部3には、再利用化翻訳
切り換え部8と、再利用化コード生成部9と、非再利用
化コード生成部10とが設置されている。構文解析部1
は、主にモジュール単位での文法チェックや中間言語へ
の変換を行なう。コード生成部3は、主に中間コードを
機械言語に変換する。外部関係検出部5は、モジュール
毎に、呼び出す外部モジュールの仕様やアクセスする外
部変数の仕様や引数の仕様などの情報を検出し、さらに
局所モジュールがどのような外部モジュールや変数をア
クセスするかを検出し、外部仕様情報保持手段2に情報
を登録する。インターフェース情報部6は、モジュール
毎に、呼び出す外部モジュールの仕様やアクセスする外
部変数の仕様や引数の仕様などの情報を保持する。資源
結合情報部7は、局所モジュールに対して、どのような
外部モジュールや変数をアクセスさせるかという資源の
割り当て状況を保持する。再利用化翻訳切り換え部8
は、再利用化コード生成部9と非再利用化コード生成部
10との処理を切り換え、任意のモジュールのオブジェ
クトコードを再利用可能な形でコンパイルするのか、あ
るいは従来通りのコンパイルをするのかの切り換えを行
なう。再利用化コード生成部9は、外部仕様情報保持手
段2の内容を参照して、各モジュールの活性レコードに
局所モジュールの資源割当を行う領域を付加し、その内
容を設定するオブジェクトコードを出力する。非再利用
化コード生成部10は、外部仕様情報保持手段2の内容
を参照して、一括して入力されたソースプログラムに対
して、モジュール間のレベル情報を算出すると共に、外
部変数や外部モジュールの連結状況を検出して、従来通
りの活性レコードを構成するオブジェクトコードを出力
する。なお実際には、構文解析部1およびコード生成部
3は、上記処理部以外の多くの処理部が設置されている
が、本発明の要旨とは直接関係がなく、しかも周知であ
るので説明を省略する。さらに実際には、上記構成に最
適化部が加わるが、本発明の要旨とは直接関係がなく、
しかも周知であるので説明を省略する。
説明する。図1は本発明の一実施例におけるモジュール
のコンパイル装置を備えたコンパイラのブロック図で、
このコンパイラは、構文解析部1と、各モジュール毎に
設けられた外部仕様情報保持手段2と、コード生成部3
とにより構成されている。構文解析部1には、外部関係
検出部5が設置されており、外部仕様情報保持手段2に
は、インターフェース情報部6と、資源結合情報部7と
が設置されている。コード生成部3には、再利用化翻訳
切り換え部8と、再利用化コード生成部9と、非再利用
化コード生成部10とが設置されている。構文解析部1
は、主にモジュール単位での文法チェックや中間言語へ
の変換を行なう。コード生成部3は、主に中間コードを
機械言語に変換する。外部関係検出部5は、モジュール
毎に、呼び出す外部モジュールの仕様やアクセスする外
部変数の仕様や引数の仕様などの情報を検出し、さらに
局所モジュールがどのような外部モジュールや変数をア
クセスするかを検出し、外部仕様情報保持手段2に情報
を登録する。インターフェース情報部6は、モジュール
毎に、呼び出す外部モジュールの仕様やアクセスする外
部変数の仕様や引数の仕様などの情報を保持する。資源
結合情報部7は、局所モジュールに対して、どのような
外部モジュールや変数をアクセスさせるかという資源の
割り当て状況を保持する。再利用化翻訳切り換え部8
は、再利用化コード生成部9と非再利用化コード生成部
10との処理を切り換え、任意のモジュールのオブジェ
クトコードを再利用可能な形でコンパイルするのか、あ
るいは従来通りのコンパイルをするのかの切り換えを行
なう。再利用化コード生成部9は、外部仕様情報保持手
段2の内容を参照して、各モジュールの活性レコードに
局所モジュールの資源割当を行う領域を付加し、その内
容を設定するオブジェクトコードを出力する。非再利用
化コード生成部10は、外部仕様情報保持手段2の内容
を参照して、一括して入力されたソースプログラムに対
して、モジュール間のレベル情報を算出すると共に、外
部変数や外部モジュールの連結状況を検出して、従来通
りの活性レコードを構成するオブジェクトコードを出力
する。なお実際には、構文解析部1およびコード生成部
3は、上記処理部以外の多くの処理部が設置されている
が、本発明の要旨とは直接関係がなく、しかも周知であ
るので説明を省略する。さらに実際には、上記構成に最
適化部が加わるが、本発明の要旨とは直接関係がなく、
しかも周知であるので説明を省略する。
【0017】次に動作を説明する。ここでは、図6のプ
ログラムに対して、図4のようにユーザが追加記述した
プログラムをコンパイルする例について述べる。まず構
文解析部1の外部関係検出部5は、図4のようにユーザ
が記述したソースに対して、モジュール毎に、呼び出す
外部モジュールの仕様やアクセスする外部変数の仕様や
引数の仕様などの情報を検出し、さらに局所モジュール
がどのような外部モジュールや変数をアクセスするかを
検出して、各モジュール毎の外部仕様情報保持手段2に
図2のような情報を登録する。例えばモジュールCの外
部仕様情報保持手段2のインターフェース情報部6に
は、外部変数x1と、外部モジュールDおよびその形態
(変数の場合は型、モジュールの場合は戻り値の型、引
数の並びとその型)と、引数cpおよびその形態(型、
変数引数、値引数など)が登録される。またモジュール
Dの外部仕様情報保持手段2のインターフェース情報部
6には、外部変数yが登録される。他のモジュールの外
部仕様情報保持手段2のインターフェース情報部6にも
同様に、図2のような情報が登録される。なお、モジュ
ールCから呼び出されるモジュールAのような再帰的な
呼び出しになっているものは、モジュールCの中で局所
的にモジュールAが定義されたものとして扱う。また、
例えばモジュールBの外部仕様情報保持手段2の資源結
合情報部7には、局所モジュールCに対して、モジュー
ルCの外部変数x1および外部モジュールDをそれぞれ
モジュールBの変数ov1およびモジュールBの局所モ
ジュールDに結合させることを示すように、さらに局所
モジュールDに対して、モジュールDの外部変数yをモ
ジュールBの変数yに結合させることを示すように、情
報が登録される。他のモジュールの外部仕様情報保持手
段2の資源結合情報部7にも同様に、図2のような情報
が登録される。
ログラムに対して、図4のようにユーザが追加記述した
プログラムをコンパイルする例について述べる。まず構
文解析部1の外部関係検出部5は、図4のようにユーザ
が記述したソースに対して、モジュール毎に、呼び出す
外部モジュールの仕様やアクセスする外部変数の仕様や
引数の仕様などの情報を検出し、さらに局所モジュール
がどのような外部モジュールや変数をアクセスするかを
検出して、各モジュール毎の外部仕様情報保持手段2に
図2のような情報を登録する。例えばモジュールCの外
部仕様情報保持手段2のインターフェース情報部6に
は、外部変数x1と、外部モジュールDおよびその形態
(変数の場合は型、モジュールの場合は戻り値の型、引
数の並びとその型)と、引数cpおよびその形態(型、
変数引数、値引数など)が登録される。またモジュール
Dの外部仕様情報保持手段2のインターフェース情報部
6には、外部変数yが登録される。他のモジュールの外
部仕様情報保持手段2のインターフェース情報部6にも
同様に、図2のような情報が登録される。なお、モジュ
ールCから呼び出されるモジュールAのような再帰的な
呼び出しになっているものは、モジュールCの中で局所
的にモジュールAが定義されたものとして扱う。また、
例えばモジュールBの外部仕様情報保持手段2の資源結
合情報部7には、局所モジュールCに対して、モジュー
ルCの外部変数x1および外部モジュールDをそれぞれ
モジュールBの変数ov1およびモジュールBの局所モ
ジュールDに結合させることを示すように、さらに局所
モジュールDに対して、モジュールDの外部変数yをモ
ジュールBの変数yに結合させることを示すように、情
報が登録される。他のモジュールの外部仕様情報保持手
段2の資源結合情報部7にも同様に、図2のような情報
が登録される。
【0018】いま、コード生成部3の再利用化翻訳切り
換え部8により再利用化コード生成部9が選択されてい
るものとする。再利用化コード生成部9は、外部仕様情
報保持手段2の内容を参照して、図4のプログラムにお
いてモジュールBからモジュールCを呼び出したとき
に、モジュールA,B,C毎に図3のような活性レコー
ドがスタック上に形成されるようにコード生成する。例
えばモジュールCから外部変数x1へのアクセスは、モ
ジュールBから呼び出し時に引き渡されるポインタOP
C11をベースにして、それからのオフセット値を加え
た番地の内容から外部変数Xのアドレス12を得て成さ
れる。ここでポインタOPCは、モジュールBの活性レ
コード中にある局所モジュールCの外部結合情報領域の
ベースポインタである。外部モジュールDのコールアド
レス13も同様に、ポインタOPCからのオフセット値
を加えた番地の内容から得られる。特に、モジュールC
でモジュールDを呼び出すときに、モジュールBの活性
レコード中にある局所モジュールDの外部結合情報領域
のポインタOPDもまた、ポインタOPCからのオフセ
ット値を加えた番地の内容14から取り出し、そして、
これをモジュールDの活性レコードに引き渡してからモ
ジュールDを呼び出す。このようにするのは、モジュー
ルの呼び出し方式を統一するためであり、各外部結合情
報領域の外部モジュールをコールするための情報には、
外部モジュールのコールアドレスの他に、その外部結合
情報領域のベースポインタがある。さらに、モジュール
が再利用される状況を考えると、1つのプログラム中の
複数箇所で使用される場合は、この外部結合情報領域が
別々に作られ、適当なベースポインタが設定される。他
のモジュールの外部変数についても同様に行われる。ま
た、モジュールBの活性レコード中にある局所モジュー
ルC,Dの各外部結合情報領域は、モジュールBが呼び
出されてモジュールB本体の実行が始まる前に設定され
る。特にモジュールCの外部変数と結合するモジュール
Aの外部変数x1のアドレスは、モジュールAがモジュ
ールBを呼び出したときに引き渡すポインタOPB15
(これは、モジュールAの活性レコード中にある局所モ
ジュールBの外部結合情報領域のポインタOPBのコピ
ーである)にオフセット値(この場合は0)を加えるこ
とによって得られる。そして、モジュールBの活性レコ
ード中の局所モジュールCの外部結合情報領域の設定時
に、この変数x1のアドレスがコピーされる。また、各
モジュールの外部仕様情報保持手段2の内容は、コンパ
イル時に決定されるものであるので、各モジュールの外
部結合情報領域のベースポインタからのオフセット値も
また、コンパイル時に決定することができる。
換え部8により再利用化コード生成部9が選択されてい
るものとする。再利用化コード生成部9は、外部仕様情
報保持手段2の内容を参照して、図4のプログラムにお
いてモジュールBからモジュールCを呼び出したとき
に、モジュールA,B,C毎に図3のような活性レコー
ドがスタック上に形成されるようにコード生成する。例
えばモジュールCから外部変数x1へのアクセスは、モ
ジュールBから呼び出し時に引き渡されるポインタOP
C11をベースにして、それからのオフセット値を加え
た番地の内容から外部変数Xのアドレス12を得て成さ
れる。ここでポインタOPCは、モジュールBの活性レ
コード中にある局所モジュールCの外部結合情報領域の
ベースポインタである。外部モジュールDのコールアド
レス13も同様に、ポインタOPCからのオフセット値
を加えた番地の内容から得られる。特に、モジュールC
でモジュールDを呼び出すときに、モジュールBの活性
レコード中にある局所モジュールDの外部結合情報領域
のポインタOPDもまた、ポインタOPCからのオフセ
ット値を加えた番地の内容14から取り出し、そして、
これをモジュールDの活性レコードに引き渡してからモ
ジュールDを呼び出す。このようにするのは、モジュー
ルの呼び出し方式を統一するためであり、各外部結合情
報領域の外部モジュールをコールするための情報には、
外部モジュールのコールアドレスの他に、その外部結合
情報領域のベースポインタがある。さらに、モジュール
が再利用される状況を考えると、1つのプログラム中の
複数箇所で使用される場合は、この外部結合情報領域が
別々に作られ、適当なベースポインタが設定される。他
のモジュールの外部変数についても同様に行われる。ま
た、モジュールBの活性レコード中にある局所モジュー
ルC,Dの各外部結合情報領域は、モジュールBが呼び
出されてモジュールB本体の実行が始まる前に設定され
る。特にモジュールCの外部変数と結合するモジュール
Aの外部変数x1のアドレスは、モジュールAがモジュ
ールBを呼び出したときに引き渡すポインタOPB15
(これは、モジュールAの活性レコード中にある局所モ
ジュールBの外部結合情報領域のポインタOPBのコピ
ーである)にオフセット値(この場合は0)を加えるこ
とによって得られる。そして、モジュールBの活性レコ
ード中の局所モジュールCの外部結合情報領域の設定時
に、この変数x1のアドレスがコピーされる。また、各
モジュールの外部仕様情報保持手段2の内容は、コンパ
イル時に決定されるものであるので、各モジュールの外
部結合情報領域のベースポインタからのオフセット値も
また、コンパイル時に決定することができる。
【0019】ところで、オブジェクトコードレベルで再
利用することが可能となるようにコンパイルされたオブ
ジェクトコードは、モジュール本体の実行に移るまでの
オーバヘッドが、従来のコンパイル方法により得られる
オジェクトコードより大きい。したがって開発の最終段
階では、ソースコード全体を従来方法により一括して再
コンパイルするほうが都合がよい。そこで、ユーザが例
えばコンパイル・オプションを操作して、再利用化翻訳
切り換え部8により非再利用化コード生成部10を選択
させる。これにより、任意のモジュールのオブジェクト
コードを再利用可能な形で、モジュールの活性レコード
を構成するオブジェクトコードを出力する再利用化コー
ド生成部9は作動せず、従来通りの活性レコードとディ
スプレイとを構成するオブジェクトコードを出力する非
再利用化コード生成部10が作動する。
利用することが可能となるようにコンパイルされたオブ
ジェクトコードは、モジュール本体の実行に移るまでの
オーバヘッドが、従来のコンパイル方法により得られる
オジェクトコードより大きい。したがって開発の最終段
階では、ソースコード全体を従来方法により一括して再
コンパイルするほうが都合がよい。そこで、ユーザが例
えばコンパイル・オプションを操作して、再利用化翻訳
切り換え部8により非再利用化コード生成部10を選択
させる。これにより、任意のモジュールのオブジェクト
コードを再利用可能な形で、モジュールの活性レコード
を構成するオブジェクトコードを出力する再利用化コー
ド生成部9は作動せず、従来通りの活性レコードとディ
スプレイとを構成するオブジェクトコードを出力する非
再利用化コード生成部10が作動する。
【0020】このように、外部モジュールの呼び出しは
外部結合情報領域を参照して間接的にモジュールを呼び
出し、外部変数へのアクセスも外部結合情報領域を参照
して間接的にアクセスするようにコンパイルするので、
任意のモジュールのオブジェクトコードレベルでの再利
用が可能となる。
外部結合情報領域を参照して間接的にモジュールを呼び
出し、外部変数へのアクセスも外部結合情報領域を参照
して間接的にアクセスするようにコンパイルするので、
任意のモジュールのオブジェクトコードレベルでの再利
用が可能となる。
【0021】
【発明の効果】以上説明したように本発明によれば、ソ
ースプログラムのモジュールを機械言語に翻訳するに際
して、各モジュール毎にモジュールが呼び出す外部モジ
ュールやアクセスする外部変数を検出し、検出した情報
を参照して各局所モジュールが呼び出す外部モジュール
のコールアドレスやアクセスする外部変数のアドレスが
格納された外部結合情報領域を各局所モジュール毎にモ
ジュールの活性レコードに追加するので、外部モジュー
ルの呼び出しは外部結合情報領域を参照して間接的にモ
ジュールを呼び出し、外部変数へのアクセスも外部結合
情報領域を参照して間接的にアクセスするようにコンパ
イルできることから、任意のモジュールのオブジェクト
コードレベルでの再利用が可能となり、プログラム開発
を短期間で行うことができる。
ースプログラムのモジュールを機械言語に翻訳するに際
して、各モジュール毎にモジュールが呼び出す外部モジ
ュールやアクセスする外部変数を検出し、検出した情報
を参照して各局所モジュールが呼び出す外部モジュール
のコールアドレスやアクセスする外部変数のアドレスが
格納された外部結合情報領域を各局所モジュール毎にモ
ジュールの活性レコードに追加するので、外部モジュー
ルの呼び出しは外部結合情報領域を参照して間接的にモ
ジュールを呼び出し、外部変数へのアクセスも外部結合
情報領域を参照して間接的にアクセスするようにコンパ
イルできることから、任意のモジュールのオブジェクト
コードレベルでの再利用が可能となり、プログラム開発
を短期間で行うことができる。
【0022】また従来のコンパイル方法に切り換え可能
に構成すれば、開発の終了段階において実行効率のよい
オブジェクトコードを出力できる。
に構成すれば、開発の終了段階において実行効率のよい
オブジェクトコードを出力できる。
【図1】本発明の一実施例におけるモジュールのコンパ
イル装置を備えたコンパイラのブロック図である。
イル装置を備えたコンパイラのブロック図である。
【図2】外部仕様情報保持手段の内容の説明図である。
【図3】スタック上の活性レコードの説明図である。
【図4】図6のソースプログラムに必要な情報を付加し
たソースプログラムの説明図である。
たソースプログラムの説明図である。
【図5】従来のモジュールのコンパイル方法におけるデ
ィスプレイとスタック上の活性レコードとの説明図であ
る。
ィスプレイとスタック上の活性レコードとの説明図であ
る。
【図6】図5の活性レコードを生成するプログラムの説
明図である。
明図である。
1 構文解析部
2 外部仕様情報保持手段
3 コード生成部
5 外部関係検出部
6 インターフェース情報部
7 資源結合情報部
8 再利用化翻訳切り換え部
9 再利用化コード生成部
10 非再利用化コード生成部
Claims (3)
- 【請求項1】 ソースプログラムのモジュールを機械言
語に翻訳するに際して、各モジュール毎にモジュールが
呼び出す外部モジュールやアクセスする外部変数を検出
する外部関係検出ステップと、この外部関係検出ステッ
プで検出した情報を参照して各局所モジュールが呼び出
す外部モジュールのコールアドレスやアクセスする外部
変数のアドレスが格納された外部結合情報領域を各局所
モジュール毎にモジュールの活性レコードに追加する再
利用化コード生成ステップとを実行することを特徴とす
るモジュールのコンパイル方法。 - 【請求項2】 各モジュール毎にモジュールが呼び出す
外部モジュールやアクセスする外部変数を検出する外部
関係検出手段と、この外部関係検出手段により検出され
た情報であるインタフェース情報と資源結合情報とを記
憶する外部仕様情報保持手段と、この外部仕様情報保持
手段に記憶された情報を参照して各局所モジュールが呼
び出す外部モジュールのコールアドレスやアクセスする
外部変数のアドレスが格納された外部結合情報領域を各
局所モジュール毎にモジュールの活性レコードに追加す
る再利用化コード生成手段とを備えたことを特徴とする
モジュールのコンパイル装置。 - 【請求項3】 各モジュール毎にモジュールが呼び出す
外部モジュールやアクセスする外部変数を検出する外部
関係検出手段と、この外部関係検出手段により検出され
た情報であるインタフェース情報と資源結合情報とを記
憶する外部仕様情報保持手段と、この外部仕様情報保持
手段に記憶された情報を参照して各局所モジュールが呼
び出す外部モジュールのコールアドレスやアクセスする
外部変数のアドレスが格納された外部結合情報領域を各
局所モジュール毎にモジュールの活性レコードに追加す
る再利用化コード生成手段と、モジュールを再利用しな
いコード生成を行なう非再利用化コード生成手段と、前
記再利用化コード生成手段と前記非再利用化コード生成
手段とを選択的に作動状態にする再利用化翻訳切り換え
手段とを備えたことを特徴とするモジュールのコンパイ
ル装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP17373091A JPH0520093A (ja) | 1991-07-15 | 1991-07-15 | モジユールのコンパイル方法およびコンパイル装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP17373091A JPH0520093A (ja) | 1991-07-15 | 1991-07-15 | モジユールのコンパイル方法およびコンパイル装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH0520093A true JPH0520093A (ja) | 1993-01-29 |
Family
ID=15966078
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP17373091A Pending JPH0520093A (ja) | 1991-07-15 | 1991-07-15 | モジユールのコンパイル方法およびコンパイル装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH0520093A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5558873A (en) * | 1994-06-21 | 1996-09-24 | Kimberly-Clark Corporation | Soft tissue containing glycerin and quaternary ammonium compounds |
US5601871A (en) * | 1995-02-06 | 1997-02-11 | Krzysik; Duane G. | Soft treated uncreped throughdried tissue |
US5650218A (en) * | 1995-02-06 | 1997-07-22 | Kimberly-Clark Corporation | Soft treated tissue |
US5885697A (en) * | 1996-12-17 | 1999-03-23 | Kimberly-Clark Worldwide, Inc. | Soft treated tissue |
-
1991
- 1991-07-15 JP JP17373091A patent/JPH0520093A/ja active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5558873A (en) * | 1994-06-21 | 1996-09-24 | Kimberly-Clark Corporation | Soft tissue containing glycerin and quaternary ammonium compounds |
US5601871A (en) * | 1995-02-06 | 1997-02-11 | Krzysik; Duane G. | Soft treated uncreped throughdried tissue |
US5614293A (en) * | 1995-02-06 | 1997-03-25 | Kimberly-Clark Corporation | Soft treated uncreped throughdried tissue |
US5650218A (en) * | 1995-02-06 | 1997-07-22 | Kimberly-Clark Corporation | Soft treated tissue |
US5665426A (en) * | 1995-02-06 | 1997-09-09 | Kimberly-Clark Corporation | Soft treated tissue |
US5885697A (en) * | 1996-12-17 | 1999-03-23 | Kimberly-Clark Worldwide, Inc. | Soft treated tissue |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5586328A (en) | Module dependency based incremental compiler and method | |
JP2811990B2 (ja) | プログラム処理装置及びプログラム処理方法 | |
US5361351A (en) | System and method for supporting run-time data type identification of objects within a computer program | |
US7120898B2 (en) | Intermediate representation for multiple exception handling models | |
US6314560B1 (en) | Method and apparatus for a translation system that aggressively optimizes and preserves full synchronous exception state | |
USRE38104E1 (en) | Method and apparatus for resolving data references in generated code | |
US7171649B1 (en) | Optimizing safe downcasting in an object-oriented programming language | |
JPH05257709A (ja) | 並列化判別方法およびそれを用いた並列化支援方法 | |
KR960035260A (ko) | 소프트웨어 매크로 호출내에 검출된 에러의 위치를 표시하기 위한 방법 및 장치 | |
JPH01306923A (ja) | 異種言語間連絡方式 | |
US20020062478A1 (en) | Compiler for compiling source programs in an object-oriented programming language | |
CN113220326B (zh) | 智能合约升级方法及区块链系统 | |
US20050246677A1 (en) | Native method invocation (NMI) custom marshalling stub service | |
JPH0520093A (ja) | モジユールのコンパイル方法およびコンパイル装置 | |
JPH01277934A (ja) | パラメータリスト参照方法の切換え方式 | |
JP3327674B2 (ja) | プログラム翻訳装置及び方法 | |
JP3682050B2 (ja) | 組込みソフトウェア開発装置 | |
JPH0683597A (ja) | オブジェクト指向プログラム開発装置およびオブジェクト指向プログラム開発方法 | |
KR101024707B1 (ko) | 바이트코드-투-씨 어헤드-오브-타임 컴파일러를 위한 해석기 호출 방법 | |
Lin | An LLVM-Based Binary Translator Framework, Demonstrated With RISC-V | |
Bruni et al. | Benzo: Reflective glue for low-level programming | |
CN114707124B (zh) | 基于代码虚拟化的.net平台代码保护方法和系统 | |
Avdicaušević et al. | Experimental aspect-oriented language-AspectCOOL | |
JP2002132502A (ja) | 言語機能解釈による分散オブジェクト自動生成システム及び方法 | |
JPH09179738A (ja) | オブジェクト指向言語処理方法及び処理装置 |