JPH0439734A - プログラム言語翻訳処理方式 - Google Patents
プログラム言語翻訳処理方式Info
- Publication number
- JPH0439734A JPH0439734A JP14616190A JP14616190A JPH0439734A JP H0439734 A JPH0439734 A JP H0439734A JP 14616190 A JP14616190 A JP 14616190A JP 14616190 A JP14616190 A JP 14616190A JP H0439734 A JPH0439734 A JP H0439734A
- Authority
- JP
- Japan
- Prior art keywords
- definition
- information
- name
- module
- external name
- 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)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
目 次
概要
産業上の利用分野
従来の技術
発明が解決しようとする課題 (第1図)課題を解決す
るための手段 作 用 実 施 例 (第2図〜第5図) 発明の効果 概 要 プログラム言語翻訳処理方式に関し、 翻訳処理の高速化、高効率化を目的とし、ソースモジュ
ール内に記述されているが定義されていない外部名のそ
れぞれのモジュール内におけるオフセット値を抽出し、
該当するモジュール名と関連づけて参照情報とし、ソー
スモジュール内に定義されている外部名の定義位置のそ
れぞれのモジュール内にふけるオフセット値をそれぞれ
抽出し、該当するモジュール名と関連づけて定義情報と
し、前8己参照情報の外部名毎に前記定義情報を検索し
て、該定義情報の対応する位置をインデックス情報とし
て求め、2回目以後の翻訳処理時ニ、外部名が追加され
ているときには、前記参照情報又は定義情報に該追加さ
れた外部名についての参照情報又は定義情報を追加する
とともに、該追加された外部名についてのインデックス
情報を求め、外部名のモジュール内におけるオフセット
値が変更されているときには、前記参照情報又は定義情
報の対応する箇所のみを更新するようにし、前記参照情
報、定義情報及びインデックス情報に基づき、外部名の
定義番地を導出するように構成する。
るための手段 作 用 実 施 例 (第2図〜第5図) 発明の効果 概 要 プログラム言語翻訳処理方式に関し、 翻訳処理の高速化、高効率化を目的とし、ソースモジュ
ール内に記述されているが定義されていない外部名のそ
れぞれのモジュール内におけるオフセット値を抽出し、
該当するモジュール名と関連づけて参照情報とし、ソー
スモジュール内に定義されている外部名の定義位置のそ
れぞれのモジュール内にふけるオフセット値をそれぞれ
抽出し、該当するモジュール名と関連づけて定義情報と
し、前8己参照情報の外部名毎に前記定義情報を検索し
て、該定義情報の対応する位置をインデックス情報とし
て求め、2回目以後の翻訳処理時ニ、外部名が追加され
ているときには、前記参照情報又は定義情報に該追加さ
れた外部名についての参照情報又は定義情報を追加する
とともに、該追加された外部名についてのインデックス
情報を求め、外部名のモジュール内におけるオフセット
値が変更されているときには、前記参照情報又は定義情
報の対応する箇所のみを更新するようにし、前記参照情
報、定義情報及びインデックス情報に基づき、外部名の
定義番地を導出するように構成する。
産業上の利用分野
本発明はプログラム言語で記述されたソース(原始)プ
ログラムを実行形式のプログラムに変換するためのプロ
グラム言語翻訳処理方式に関する。
ログラムを実行形式のプログラムに変換するためのプロ
グラム言語翻訳処理方式に関する。
プログラム言語(ソース言語)で記述されたソースプロ
グラムを、実在する計算機の上で実行させるためには、
その目的計算機が実行できる形式のプログラムに、予め
変換しておかなければならない。この処理は、一般にソ
ース言語で記述された複数のソースモジュールをそれぞ
れ文法に従って解析し、この解析データから各ソースモ
ジュールと意味の等価なオブジェクトモジネールを生成
しく以下、このような処理をコンパイルという)、これ
ら各オブジェクトモジュールをリンケージエディタによ
りリンケージすることにより、目的計算機上で直接実行
できる形式の一つのロードモジュールとするものである
。
グラムを、実在する計算機の上で実行させるためには、
その目的計算機が実行できる形式のプログラムに、予め
変換しておかなければならない。この処理は、一般にソ
ース言語で記述された複数のソースモジュールをそれぞ
れ文法に従って解析し、この解析データから各ソースモ
ジュールと意味の等価なオブジェクトモジネールを生成
しく以下、このような処理をコンパイルという)、これ
ら各オブジェクトモジュールをリンケージエディタによ
りリンケージすることにより、目的計算機上で直接実行
できる形式の一つのロードモジュールとするものである
。
このようなプログラム言語翻訳処理においては、ソース
モジュールに修正があった場合には、該当するソースモ
ジュールについて再度コンパイルを実施し、この新たな
オブジェクトモジュールを交えてリンケージを再度行う
必要がある。特にプログラムの大規模化に伴いこれらの
処理に長時間を要するようになってきているた袷、その
処理効率の向上が要望されている。
モジュールに修正があった場合には、該当するソースモ
ジュールについて再度コンパイルを実施し、この新たな
オブジェクトモジュールを交えてリンケージを再度行う
必要がある。特にプログラムの大規模化に伴いこれらの
処理に長時間を要するようになってきているた袷、その
処理効率の向上が要望されている。
従来の技術
各ソースモジュール間に渡って使用される変数等の名前
は、各ソースモジュールのうちのいずれか一つにおいて
定義されている。従って、−のソースモジュール内に記
述されているが、当該−のソースモジュールではなく他
のソースモジュール内において定義されている場合があ
る(本願明細中においては、このような変数等の名前を
外部名と称する)。一方、翻訳処理は、修正の容易化等
のために一般にモジュール単位で実施され、リンケージ
に至るまでは各モジュールの独立性が保たれている。従
って、コンパイルを実施しているソースモジュール内に
他のソースモジュールに定義されている変数等が存在す
る場合には、外部名に関しての定義番地等は未解決のま
まオブジェクトモジュールとして8力されることになる
。
は、各ソースモジュールのうちのいずれか一つにおいて
定義されている。従って、−のソースモジュール内に記
述されているが、当該−のソースモジュールではなく他
のソースモジュール内において定義されている場合があ
る(本願明細中においては、このような変数等の名前を
外部名と称する)。一方、翻訳処理は、修正の容易化等
のために一般にモジュール単位で実施され、リンケージ
に至るまでは各モジュールの独立性が保たれている。従
って、コンパイルを実施しているソースモジュール内に
他のソースモジュールに定義されている変数等が存在す
る場合には、外部名に関しての定義番地等は未解決のま
まオブジェクトモジュールとして8力されることになる
。
そして、この未解決な外部名は、リンケージ処理におい
て、他のモジュールを探索することにより当該外部名が
定義されているモジュールを特定し、該モジュールの割
り当て番地と、該定義の該モジュール内におけるオフセ
ット値に基づき、定義番地を導出し、参照箇所に設定す
ることにより解決される。
て、他のモジュールを探索することにより当該外部名が
定義されているモジュールを特定し、該モジュールの割
り当て番地と、該定義の該モジュール内におけるオフセ
ット値に基づき、定義番地を導出し、参照箇所に設定す
ることにより解決される。
従来は、上述のリンケージ処理において、人力されたモ
ジュールの結合を実施しながら、上記の外部名に関する
探索等を実施して、最終的に目的計算機上で実行できる
ロードモジュールを生成している。そして、プログラム
の保守や機能の追加等によりソースモジュールに修正が
生じた場合には、外部名を定義しているモジュールの割
り付は位置が変わったり、モジュール内での外部名を定
義している相対位置が変更になるので、リンケージ処理
において、再度全モジュールに渡って、外部名の定義箇
所の探索処理を実施しなければならない。
ジュールの結合を実施しながら、上記の外部名に関する
探索等を実施して、最終的に目的計算機上で実行できる
ロードモジュールを生成している。そして、プログラム
の保守や機能の追加等によりソースモジュールに修正が
生じた場合には、外部名を定義しているモジュールの割
り付は位置が変わったり、モジュール内での外部名を定
義している相対位置が変更になるので、リンケージ処理
において、再度全モジュールに渡って、外部名の定義箇
所の探索処理を実施しなければならない。
発明が解決しようとする課題
しかし、上述の外部名が定義されているモジコールの探
索、及び該モジュール内での定義位置の探索処理に要す
る時間は、プログラムが大規模化すると外部名の数も増
大するため、指数関数的に増大することになり、リンケ
ージ処理に長時間を要するという問題がある。そして、
この探索処理を含むリンケージ処理は、デバッグ等によ
りソースモジュールに修正が生じる度に毎回実施される
ものであるから、非常に効率が悪い。
索、及び該モジュール内での定義位置の探索処理に要す
る時間は、プログラムが大規模化すると外部名の数も増
大するため、指数関数的に増大することになり、リンケ
ージ処理に長時間を要するという問題がある。そして、
この探索処理を含むリンケージ処理は、デバッグ等によ
りソースモジュールに修正が生じる度に毎回実施される
ものであるから、非常に効率が悪い。
本発明はこのような点に鑑みてなされたものであり、プ
ログラム言語翻訳処理の高速化、高効率化を図ることを
目的としている。
ログラム言語翻訳処理の高速化、高効率化を図ることを
目的としている。
課題を解決するための手段
第1図は本発明の詳細な説明するための図である。本発
明方式は、複数のソースモジュール1をそれぞれコンパ
イラ2によりコンパイルしてオブジェクトモジュール3
とし、これらオブジェクトモジュール3をリンケージエ
ディタ4でリンケージして、目的計算機上で直接実行で
きるロードモジュール5とするプログラム言語の翻訳処
理方式であり、以下のような機能を備えている。
明方式は、複数のソースモジュール1をそれぞれコンパ
イラ2によりコンパイルしてオブジェクトモジュール3
とし、これらオブジェクトモジュール3をリンケージエ
ディタ4でリンケージして、目的計算機上で直接実行で
きるロードモジュール5とするプログラム言語の翻訳処
理方式であり、以下のような機能を備えている。
コンパイラ2は、字句、構文解析等を行う翻訳機能6等
の他に、コンパイル時に、ソースモジュール1内に記述
されているが定義されていない外部名(参照外部名)の
該モジュール1内におけるオフセット値をそれぞれ抽出
し、該当するモジュール名と関連づけて参照情報7とし
、これを記憶手段に格納する参照情報抽出機能と、ソー
スモジュール1内に定義されている外部名(定義外部名
)の該定義位置の該モジュール1内におけるオフセット
値をそれぞれ抽出し、該当するモジュール名と関連づけ
て定義情報9とし、これを記憶手段に格納する定義情報
抽出機能とからなる外部名定義/参照情報抽出機能10
を備えている。
の他に、コンパイル時に、ソースモジュール1内に記述
されているが定義されていない外部名(参照外部名)の
該モジュール1内におけるオフセット値をそれぞれ抽出
し、該当するモジュール名と関連づけて参照情報7とし
、これを記憶手段に格納する参照情報抽出機能と、ソー
スモジュール1内に定義されている外部名(定義外部名
)の該定義位置の該モジュール1内におけるオフセット
値をそれぞれ抽出し、該当するモジュール名と関連づけ
て定義情報9とし、これを記憶手段に格納する定義情報
抽出機能とからなる外部名定義/参照情報抽出機能10
を備えている。
そして、外部名定義/参照関係テーブル更新機能11を
備えており、この外部名室1m/参照関係テーブル更新
機能11は、前記参照情報7の各参照外部名に基づき定
義情報9内の対応する定義外部名を探索し、該定義情報
9内における該当する位置をそれぞれインデックス情報
として求め、これら参照情報、インデックス情報、及び
定義情報を外部名定義/参照関係テーブル12として記
憶手段に格納するものである。さらに、この外部名定義
/参照関係テーブル更新機能11は、ソースモジュール
1の修正等による2回目以後の翻訳処理時に、外部名が
追加されているときには、外部名定義/参照関係テーブ
ル12内の参照情報及び該当する場合には定義情報に該
追加された外部名についての前記参照情報及び該当する
場合には定義情報を追加するとともに、該追加された外
部名についてのインデックス情報を求め、外部名又はそ
の定義位置のモジュール内におけるオフセット値が変更
されている場合には、外部名定義/参照関係テーブル1
2内の参照情報又は定義情報の対応する箇所のみを更新
するものである。
備えており、この外部名室1m/参照関係テーブル更新
機能11は、前記参照情報7の各参照外部名に基づき定
義情報9内の対応する定義外部名を探索し、該定義情報
9内における該当する位置をそれぞれインデックス情報
として求め、これら参照情報、インデックス情報、及び
定義情報を外部名定義/参照関係テーブル12として記
憶手段に格納するものである。さらに、この外部名定義
/参照関係テーブル更新機能11は、ソースモジュール
1の修正等による2回目以後の翻訳処理時に、外部名が
追加されているときには、外部名定義/参照関係テーブ
ル12内の参照情報及び該当する場合には定義情報に該
追加された外部名についての前記参照情報及び該当する
場合には定義情報を追加するとともに、該追加された外
部名についてのインデックス情報を求め、外部名又はそ
の定義位置のモジュール内におけるオフセット値が変更
されている場合には、外部名定義/参照関係テーブル1
2内の参照情報又は定義情報の対応する箇所のみを更新
するものである。
リンケージエディタ4は、この外部名定義/参照関係テ
ーブル12に基づき、参照外部名の定義番地を導出し、
対応する位置に該定義番地を埋ぬ込み、その他の必要な
処理を実施して、最終的に目的計算機上で実行できるロ
ードモジュールを生成する。
ーブル12に基づき、参照外部名の定義番地を導出し、
対応する位置に該定義番地を埋ぬ込み、その他の必要な
処理を実施して、最終的に目的計算機上で実行できるロ
ードモジュールを生成する。
作 用
1回目の翻訳処理において、抽出した参照情報と定義情
報との間の対応関係を探索し、これをインデックス情報
として保持し、2回目以後の翻訳処理においては、外部
名が追加された場合に、この追加された外部名について
の探索処理のみを行い、インデックス情報が設定されて
いる外部名についての探索処理は実施しないようにして
いる。
報との間の対応関係を探索し、これをインデックス情報
として保持し、2回目以後の翻訳処理においては、外部
名が追加された場合に、この追加された外部名について
の探索処理のみを行い、インデックス情報が設定されて
いる外部名についての探索処理は実施しないようにして
いる。
従って、従来のように、全ての外部名について毎回探索
処理を実施するものと異なり、処理に要する時間を大幅
に短縮することができる。尚、外部名の記述位置が変更
された場合には、該当する参照情報と定義情報の対応関
係が変化することはないので、参照情報又は定義情報の
該当するモジュール内におけるオフセット値のみを更新
するだけで良い。
処理を実施するものと異なり、処理に要する時間を大幅
に短縮することができる。尚、外部名の記述位置が変更
された場合には、該当する参照情報と定義情報の対応関
係が変化することはないので、参照情報又は定義情報の
該当するモジュール内におけるオフセット値のみを更新
するだけで良い。
実 施 例
以下、本発明の実施例を図面に基づいて詳細に説明する
。
。
第2図は第1図における外部名定1m/参照関係テーブ
ル12の具体例の説明図である。この外部名窓II/参
照関係テーブル12は、各モジュール(モジュールA、
B、C,・・・)用参照テーブル15、及び定義テーブ
ル16から構成されている。
ル12の具体例の説明図である。この外部名窓II/参
照関係テーブル12は、各モジュール(モジュールA、
B、C,・・・)用参照テーブル15、及び定義テーブ
ル16から構成されている。
参照テーブル15は、参照している外部名を示す参照外
部名(*1)、参照している箇所くモジュールの先頭か
らの相対値)を示す参照オフセ−/ )値(*2)、及
び定義テーブル16の外部名に対応して設定されている
シーケンス番号(*4)を示す定義テーブルインデック
ス(*3)から構成される。
部名(*1)、参照している箇所くモジュールの先頭か
らの相対値)を示す参照オフセ−/ )値(*2)、及
び定義テーブル16の外部名に対応して設定されている
シーケンス番号(*4)を示す定義テーブルインデック
ス(*3)から構成される。
定義テーブル16は定義している外部名のこのテーブル
内における登録順序を示すシーケンス番号(*4)、定
義している外部名を示す定義外部名(*5)、外部名の
定義を行っているモジュール名を示す定義モジュール名
(*6)、及び定義している箇所(モジュールの先頭か
らの相対値)を示す定義オフセット値(*7)から構成
される。
内における登録順序を示すシーケンス番号(*4)、定
義している外部名を示す定義外部名(*5)、外部名の
定義を行っているモジュール名を示す定義モジュール名
(*6)、及び定義している箇所(モジュールの先頭か
らの相対値)を示す定義オフセット値(*7)から構成
される。
参照テーブル15の参照外部名(*1)及び参照オフセ
ット値(*2)は、第1図の外部名定義/参照情報抽出
機能10により抽出された外部名参照情報7に対応し、
この参照情報7を各モジュール毎にその内容をそのまま
設定したものであり、定義テーブル16の定義外部名(
$5>、定義モジュール名(*6)、及び定義オフセッ
ト値(*7)は、第1図の外部名定義/参照情報抽出機
能10により抽出された外部名定義情報9に対応し、そ
の内容をそのまま設定したものである。
ット値(*2)は、第1図の外部名定義/参照情報抽出
機能10により抽出された外部名参照情報7に対応し、
この参照情報7を各モジュール毎にその内容をそのまま
設定したものであり、定義テーブル16の定義外部名(
$5>、定義モジュール名(*6)、及び定義オフセッ
ト値(*7)は、第1図の外部名定義/参照情報抽出機
能10により抽出された外部名定義情報9に対応し、そ
の内容をそのまま設定したものである。
参照テーブル15の定義テーブルインデックス(*3)
は、外部名定義/参照関係テーブル更新機能11により
、探索され求められたインデックス情報に相当し、第2
図中の矢印で示されている如く、定義テーブル16との
対応関係を明らかにしているものである。
は、外部名定義/参照関係テーブル更新機能11により
、探索され求められたインデックス情報に相当し、第2
図中の矢印で示されている如く、定義テーブル16との
対応関係を明らかにしているものである。
同図において、例えば、参照外部名rejは、モジュー
ルA内のオフセラ)r32Jの位置に記述されており、
この外部名reJは、モジュールCのオフセラ)r12
Jの位置に定義されていることがわかる。
ルA内のオフセラ)r32Jの位置に記述されており、
この外部名reJは、モジュールCのオフセラ)r12
Jの位置に定義されていることがわかる。
第3図は第1図における外部名定義/参照関係テーブル
更新機能11による処理を示すフローチャートである。
更新機能11による処理を示すフローチャートである。
この処理は大きく分けて定義テーブル16の更新(a)
と、参照テーブル15の更新(b)の2つの処理からな
る。
と、参照テーブル15の更新(b)の2つの処理からな
る。
まず、(a)図を参照すると、定義外部名の追加がある
か否かを判定しくステップ301) 、追加がある場合
には、追加された全ての外部名定義情報を定義テーブル
16に追加する(ステップ302)。さらに、定義箇所
のオフセット値に変更があるか否かを判定しくステップ
303〉、変更がある場合には、定義テーブル16の該
当する外部名のオフセット値を変更して(ステップ30
4)、この処理を終了する。
か否かを判定しくステップ301) 、追加がある場合
には、追加された全ての外部名定義情報を定義テーブル
16に追加する(ステップ302)。さらに、定義箇所
のオフセット値に変更があるか否かを判定しくステップ
303〉、変更がある場合には、定義テーブル16の該
当する外部名のオフセット値を変更して(ステップ30
4)、この処理を終了する。
次いで、(b)図を参照すると、参照外部名の追加があ
るか否かを判定しくステップ305)、追加がある場合
には、追加された外部名参照情報を該当モジュール用の
参照テーブル15に追加登録するとともに、対応する外
部名を定義テーブル16から探し出し、インデックス情
報を設定する(ステップ306)。そして、参照外部名
のオフセット値に変更があるか否かを判定しくステップ
307)、変更がある場合には、該当モジュール用の参
照テーブルの該当するオフセット値を変更して(ステッ
プ308)、この処理を終了する。
るか否かを判定しくステップ305)、追加がある場合
には、追加された外部名参照情報を該当モジュール用の
参照テーブル15に追加登録するとともに、対応する外
部名を定義テーブル16から探し出し、インデックス情
報を設定する(ステップ306)。そして、参照外部名
のオフセット値に変更があるか否かを判定しくステップ
307)、変更がある場合には、該当モジュール用の参
照テーブルの該当するオフセット値を変更して(ステッ
プ308)、この処理を終了する。
尚、初回翻訳時には、全ての定義外部名、参照外部名が
追加であるから、上記ステップ301.302、及びス
テップ305.306のみの実施となる。
追加であるから、上記ステップ301.302、及びス
テップ305.306のみの実施となる。
以下、第4図及び第5図を参照して一連の処理を具体的
に説明する。第4図はソースモジュールの言己述内容の
一例であり、(a)は修正前のモジュールAの内容を、
(b)は修正後のモジュールAの内容を示している。図
中、rEXTERN」はこのモジュール内で参照してい
る外部名を示し、rENTRY、はこのモジュール内で
外部名を定義していることを示し、rDCLJは変数等
の名前の定義を示している。また、枠線外の数字はモジ
ュール内のオフセット値(このモジュールの先頭アドレ
スからの相対アドレス)を示し、(b)図中のr +’
1jij Jで示されている部分は、修正された箇所を
示している。
に説明する。第4図はソースモジュールの言己述内容の
一例であり、(a)は修正前のモジュールAの内容を、
(b)は修正後のモジュールAの内容を示している。図
中、rEXTERN」はこのモジュール内で参照してい
る外部名を示し、rENTRY、はこのモジュール内で
外部名を定義していることを示し、rDCLJは変数等
の名前の定義を示している。また、枠線外の数字はモジ
ュール内のオフセット値(このモジュールの先頭アドレ
スからの相対アドレス)を示し、(b)図中のr +’
1jij Jで示されている部分は、修正された箇所を
示している。
然して、修正前のモジュールAを含むソースモジュール
がコンパイラ21ごよりコンパイルされ、コンパイラ2
の外部名定義/参照情報抽出機能10により、それぞれ
のモジュール毎に、参照外部名、参照オフセット値から
なる外部名参照情報7、及び定義外部名、定義モジュー
ル塩、定義オフセット値からなる外部名定義情報9が生
成される。
がコンパイラ21ごよりコンパイルされ、コンパイラ2
の外部名定義/参照情報抽出機能10により、それぞれ
のモジュール毎に、参照外部名、参照オフセット値から
なる外部名参照情報7、及び定義外部名、定義モジュー
ル塩、定義オフセット値からなる外部名定義情報9が生
成される。
次いで、外部名定義/参照関係テーブル更新機能11に
より、外部名定義情報9から順次、定義外部名に対応す
る情報が取り出され、シーケンス番号が付加されて、定
義テーブルが生成される。
より、外部名定義情報9から順次、定義外部名に対応す
る情報が取り出され、シーケンス番号が付加されて、定
義テーブルが生成される。
この定義テーブルは第5図の(a)に示されるような内
容のものである。例えば、第4図(a)の定義外部名「
x」については、定義モジュール名は「A」、定義オフ
セット値は「40」となっている。
容のものである。例えば、第4図(a)の定義外部名「
x」については、定義モジュール名は「A」、定義オフ
セット値は「40」となっている。
さらに、外部名定義/参照関係テーブル更新機能11に
より、外部名参照情報7から順次、参照外部名に対応す
る情報が取り出されるとともに、この参照外部名に対応
する定義チー°プルの定義外部名が順次(あるいは、所
定の規則に従って)比較・探索され、そのシーケンス番
号がインデックスとして付加されて、各モジュール毎に
参照テーブルが生成される。モジュールAに対応する参
照テーブルは第5図(b)に示されるような内容のもの
である。即ち、モジュールA内では、モジュールA内に
は定義されていない参照外部名としてm、r、p、pの
4つがあり、これらのオフセット値、及び探索処理によ
り求められた定義テーブルのシーケンス番号に対応する
定義テーブルインデックスが設定されている。例えば、
参照外部名「m」について見てみると、そのオフセット
値はrloo、、+、インデックスは「2」であり、こ
のインデックスから定義テーブルのシーケンス番号「2
」をたどって、外部名「m」はモジュールBのオフセッ
ト値「12」の位置に定義されていることがただちに導
ける。
より、外部名参照情報7から順次、参照外部名に対応す
る情報が取り出されるとともに、この参照外部名に対応
する定義チー°プルの定義外部名が順次(あるいは、所
定の規則に従って)比較・探索され、そのシーケンス番
号がインデックスとして付加されて、各モジュール毎に
参照テーブルが生成される。モジュールAに対応する参
照テーブルは第5図(b)に示されるような内容のもの
である。即ち、モジュールA内では、モジュールA内に
は定義されていない参照外部名としてm、r、p、pの
4つがあり、これらのオフセット値、及び探索処理によ
り求められた定義テーブルのシーケンス番号に対応する
定義テーブルインデックスが設定されている。例えば、
参照外部名「m」について見てみると、そのオフセット
値はrloo、、+、インデックスは「2」であり、こ
のインデックスから定義テーブルのシーケンス番号「2
」をたどって、外部名「m」はモジュールBのオフセッ
ト値「12」の位置に定義されていることがただちに導
ける。
このような参照テーブル、定義テーブルからなる外部名
定義/参照関係テーブル12に基づきリンケージエディ
タ4によりリンケージ処理が実施され、ロードモジュー
ルが生成される。
定義/参照関係テーブル12に基づきリンケージエディ
タ4によりリンケージ処理が実施され、ロードモジュー
ルが生成される。
次いで、モジュールAが修正された場合の処理について
説明する。
説明する。
修正後のモジュールAがコンパイラ2によりコンパイル
され、コンパイラ2の外部名定義/参照情報抽出機能1
0により、モジュールAに対応した外部名参照情報7、
及び外部名定義情報9が生成される。
され、コンパイラ2の外部名定義/参照情報抽出機能1
0により、モジュールAに対応した外部名参照情報7、
及び外部名定義情報9が生成される。
次いで、外部名定義/参照関係テーブル更新機能11に
より、外部名定義情報9の外部名のうち、追加された外
部名に対応した情報が取り出され、前回作成された定義
テーブルの各情報の後部に順次追加される。即ち、第4
図(b)の■で示す欄の定義外部名「y」が追加された
ものであるから、第5図(C)に示されるように定義テ
ーブルのシーケンス番号「10」 (■で示す欄)にこ
れに関する情報が追加される。
より、外部名定義情報9の外部名のうち、追加された外
部名に対応した情報が取り出され、前回作成された定義
テーブルの各情報の後部に順次追加される。即ち、第4
図(b)の■で示す欄の定義外部名「y」が追加された
ものであるから、第5図(C)に示されるように定義テ
ーブルのシーケンス番号「10」 (■で示す欄)にこ
れに関する情報が追加される。
また、定義外部名のオフセット値が変更になっている場
合には、定義テーブルの該当するオフセット値が変更さ
れる。即ち、第4図(b)の■で示す欄の定義外部名「
x」はそのオフセット値が「40」→「44」に変更さ
れているから、第5図(C)に示されるように、シーケ
ンス番号「1」 (■で示す欄)のオフセット値が「4
4」に変更される。
合には、定義テーブルの該当するオフセット値が変更さ
れる。即ち、第4図(b)の■で示す欄の定義外部名「
x」はそのオフセット値が「40」→「44」に変更さ
れているから、第5図(C)に示されるように、シーケ
ンス番号「1」 (■で示す欄)のオフセット値が「4
4」に変更される。
そして、外部名定義/参照関係テーブル更新機能11に
より、外部名参照情報7の参照外部名のうち、追加され
た外部名に対応した情報が取り出され、前回作成された
モジュールAの参照テーブルの各情報の後部に追加され
る。即ち、第4図(b)の■で示す欄の参照外部名「r
」が追加されたものであるから、この参照外部名に対応
する定義テーブルの定義外部名が探索され、そのシーケ
ンス番号がインデックスとして付加されて、第5図(d
)の■で示す欄に示されるように、参照外部名rrJに
ついてのオフセット値「208」及びインデックス「7
」が追加される。
より、外部名参照情報7の参照外部名のうち、追加され
た外部名に対応した情報が取り出され、前回作成された
モジュールAの参照テーブルの各情報の後部に追加され
る。即ち、第4図(b)の■で示す欄の参照外部名「r
」が追加されたものであるから、この参照外部名に対応
する定義テーブルの定義外部名が探索され、そのシーケ
ンス番号がインデックスとして付加されて、第5図(d
)の■で示す欄に示されるように、参照外部名rrJに
ついてのオフセット値「208」及びインデックス「7
」が追加される。
また、外部名定義/参照関係テーブル更新機能11によ
り、外部名参照情報7のうちオフセット値が変更された
参照外部名の該変更後のオフセット値が取り出され、参
照テーブルの該当するオフセット値が変更される。即ち
、第4図(b)の■で示す欄の参照外部名「m」がその
オフセット値が「100」→「104」に変更されたも
のであるから、第5図(d)の■で示す欄に示されるよ
うに、モジコールA用参照テーブルの参照外部名「m」
についてのオフセット値がr104」に変更される。
り、外部名参照情報7のうちオフセット値が変更された
参照外部名の該変更後のオフセット値が取り出され、参
照テーブルの該当するオフセット値が変更される。即ち
、第4図(b)の■で示す欄の参照外部名「m」がその
オフセット値が「100」→「104」に変更されたも
のであるから、第5図(d)の■で示す欄に示されるよ
うに、モジコールA用参照テーブルの参照外部名「m」
についてのオフセット値がr104」に変更される。
上述したような処理を経て生成された外部名定義/参照
関係テーブルに基づいて、リンケージエディタ4により
ロードモジュールが生成される。
関係テーブルに基づいて、リンケージエディタ4により
ロードモジュールが生成される。
上述したように、2回目以後の翻訳処理においては、追
加又は変更になった外部名についての処理のみを行うよ
うにしており、かつ、変更になった外部名については、
その定義箇所を探索する処理も実施しないようにしてい
るから、従来の如く、毎回全ての外部名についての探索
処理を実施するものと比較して、その処理時間が大幅に
短縮される。
加又は変更になった外部名についての処理のみを行うよ
うにしており、かつ、変更になった外部名については、
その定義箇所を探索する処理も実施しないようにしてい
るから、従来の如く、毎回全ての外部名についての探索
処理を実施するものと比較して、その処理時間が大幅に
短縮される。
発明の効果
本発明は以上詳述したように構成したから、プログラム
の大規模化等により外部名の数が増大しても、2回目以
後の翻訳処理においては、外部名の定義箇所を探索する
処理に要する時間が短いから、リンケージに要する時間
が大幅に短縮され、翻訳処理の効率を大幅に向上するこ
とができるという効果を奏する。
の大規模化等により外部名の数が増大しても、2回目以
後の翻訳処理においては、外部名の定義箇所を探索する
処理に要する時間が短いから、リンケージに要する時間
が大幅に短縮され、翻訳処理の効率を大幅に向上するこ
とができるという効果を奏する。
第1図は本発明の原理図、
第2図は外部名定義/参照関係テーブルの内容を示す図
、 第3図は外部名定義/参照関係テーブル更新機能による
処理を示すフローチャート、 第4図はソースモジュールの具体例を示す図であり、(
a)は修正前のソースモジュールの記述内容、(b)は
修正後のソースモジュールの記述内容を示す図である。 第5図は定義テーブル及び参照テーブルの内容の具体例
を示す図であり、(a)は修正前のソースモジュールに
ついての定義テーブルの内容、(b)は修正前のソース
モジュールについての参照テーブル内容、(C)は修正
後のソースモジュールについての定義テーブルの内容、
(d)は修正後のソースモジュールについての参照テー
ブルの内容を示す図である。 1・・・ソースモジュール、 2・・・コンパイラ、 3・・・オブジェクトモジュール、 4・・・リンケージエディタ、 5・・・ロードモジュール、 7・・・外部名参照情報、 9・・・外部名定義情報、 10・・・外部名定義/参照情報抽出機能、11・・・
外部名定義/参照関係テーブル更新機能、12・・・外
部名定義/参照関係テーブル。 黒 逢 圓 第1図 (b) 修正後のモジコール^ 、刈4埋の具体例 第4図
、 第3図は外部名定義/参照関係テーブル更新機能による
処理を示すフローチャート、 第4図はソースモジュールの具体例を示す図であり、(
a)は修正前のソースモジュールの記述内容、(b)は
修正後のソースモジュールの記述内容を示す図である。 第5図は定義テーブル及び参照テーブルの内容の具体例
を示す図であり、(a)は修正前のソースモジュールに
ついての定義テーブルの内容、(b)は修正前のソース
モジュールについての参照テーブル内容、(C)は修正
後のソースモジュールについての定義テーブルの内容、
(d)は修正後のソースモジュールについての参照テー
ブルの内容を示す図である。 1・・・ソースモジュール、 2・・・コンパイラ、 3・・・オブジェクトモジュール、 4・・・リンケージエディタ、 5・・・ロードモジュール、 7・・・外部名参照情報、 9・・・外部名定義情報、 10・・・外部名定義/参照情報抽出機能、11・・・
外部名定義/参照関係テーブル更新機能、12・・・外
部名定義/参照関係テーブル。 黒 逢 圓 第1図 (b) 修正後のモジコール^ 、刈4埋の具体例 第4図
Claims (1)
- 【特許請求の範囲】 複数のソースモジュール(1)をコンパイルしてそれぞ
れオブジェクトモジュール(3)とし、これらオブジェ
クトモジュール(3)をリンケージして、目的計算機上
で直接実行できるロードモジュール(5)とするプログ
ラム言語翻訳処理方式において、ソースモジュール(1
)内に記述されているが定義されていない外部名のモジ
ュール内におけるオフセット値を抽出し、該当するモジ
ュール名と関連づけて参照情報(7)とし、 ソースモジュール(1)内に定義されている外部名の該
定義位置のモジュール内におけるオフセット値を抽出し
、該当するモジュール名と関連づけて定義情報(9)と
し、 前記参照情報(7)の外部名毎に前記定義情報(9)を
検索して、該定義情報(9)の対応する位置をインデッ
クス情報として求め、 2回目以後の翻訳処理時に、外部名が追加されていると
きには、前記参照情報(7)又は定義情報(9)に該追
加された外部名についての参照情報(7)又は定義情報
(9)を追加するとともに、該追加された外部名につい
てのインデックス情報を求め、外部名のモジュール内に
おけるオフセット値が変更されているときには、前記参
照情報(7)又は定義情報(9)の対応する箇所のみを
更新するようにし、 前記参照情報(7)、定義情報(9)及びインデックス
情報に基づき、外部名の定義番地を導出するようにした
ことを特徴とするプログラム言語翻訳処理方式。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP14616190A JPH0439734A (ja) | 1990-06-06 | 1990-06-06 | プログラム言語翻訳処理方式 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP14616190A JPH0439734A (ja) | 1990-06-06 | 1990-06-06 | プログラム言語翻訳処理方式 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH0439734A true JPH0439734A (ja) | 1992-02-10 |
Family
ID=15401513
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP14616190A Pending JPH0439734A (ja) | 1990-06-06 | 1990-06-06 | プログラム言語翻訳処理方式 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH0439734A (ja) |
-
1990
- 1990-06-06 JP JP14616190A patent/JPH0439734A/ja active Pending
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| EP0413486A2 (en) | Message processing system | |
| JPH0630066B2 (ja) | テーブル型言語翻訳方法 | |
| US20040010780A1 (en) | Method and apparatus for approximate generation of source code cross-reference information | |
| JPH0439734A (ja) | プログラム言語翻訳処理方式 | |
| JPH08194611A (ja) | プログラム修正による影響範囲を解析する装置 | |
| JPH11272475A (ja) | 非リエントラントプログラムの自動リエントラント化方法及びシステム | |
| CN120276726A (zh) | 数据处理方法、装置、电子设备及可读介质 | |
| JPH0695890A (ja) | コンパイラにおける名前置換方式 | |
| JPH10214194A (ja) | クラス定義取り込み方式 | |
| JPH06175858A (ja) | プログラム翻訳装置 | |
| JP2000132405A (ja) | インライン展開処理装置及び方法 | |
| JPH04270422A (ja) | プリコンパイル処理方式 | |
| JPH06222913A (ja) | プログラム解析装置 | |
| JPS6326730A (ja) | プログラム修正方式 | |
| JPH01129326A (ja) | プログラム連結方式 | |
| JPH06236261A (ja) | 手続き型言語プログラム・コンポーネントの分離方式 | |
| JPH04153737A (ja) | コンパイル更新情報出力方式 | |
| JPH0561687A (ja) | コンパイラの処理方式 | |
| JPH06332683A (ja) | テーブルリンク装置 | |
| Tarutin | The programming of cross-assemblers on the ES-computer with the use of standard macroassembler | |
| JPS6375837A (ja) | プログラミング言語の予約語追加に対する互換性維持の為の予約語管理方式 | |
| JPH09146766A (ja) | クラス構造変更方法 | |
| JPS6391741A (ja) | テ−ブルアクセス方式 | |
| JPH05100866A (ja) | コンパイル・リンク方式 | |
| JPH03212738A (ja) | 関数呼び出し方式 |