JPH03105628A - 未定義変数引用検査処理方法 - Google Patents
未定義変数引用検査処理方法Info
- Publication number
- JPH03105628A JPH03105628A JP24458289A JP24458289A JPH03105628A JP H03105628 A JPH03105628 A JP H03105628A JP 24458289 A JP24458289 A JP 24458289A JP 24458289 A JP24458289 A JP 24458289A JP H03105628 A JPH03105628 A JP H03105628A
- Authority
- JP
- Japan
- Prior art keywords
- variable
- library
- undefined
- management table
- registered
- 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 3
- 238000007689 inspection Methods 0.000 title abstract description 14
- 238000000034 method Methods 0.000 claims abstract description 14
- 238000012360 testing method Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。
め要約のデータは記録されません。
Description
【発明の詳細な説明】
〔概要〕
実行時に未定義変数の引用検査を行うことができる言語
仕様を持つFORTRAN等の計算機言語を翻訳するコ
ンパイラを備えた計算機システムにおける未定義変数引
用検査処理方法に関し.余分なライブラリ呼び出しの回
数を削減し,翻訳されたプログラムの実行スピードを向
上させることを目的とし. 変数が値の定義される位置で使用されているとき.その
変数を管理テーブルに登録する処理過程と,変数が引用
されているとき,その変数が管理テーブルに登録済みで
あるかどうかを調べ.登録済みであれば,未定義変数引
用検査用のライブラリの呼び出しを不要とし,登録され
ていないときにのみ.未定義変数引用検査用のライブラ
リを呼び出すオブジェクトプログラムを生成する処理過
程とを備えるように構威する。
仕様を持つFORTRAN等の計算機言語を翻訳するコ
ンパイラを備えた計算機システムにおける未定義変数引
用検査処理方法に関し.余分なライブラリ呼び出しの回
数を削減し,翻訳されたプログラムの実行スピードを向
上させることを目的とし. 変数が値の定義される位置で使用されているとき.その
変数を管理テーブルに登録する処理過程と,変数が引用
されているとき,その変数が管理テーブルに登録済みで
あるかどうかを調べ.登録済みであれば,未定義変数引
用検査用のライブラリの呼び出しを不要とし,登録され
ていないときにのみ.未定義変数引用検査用のライブラ
リを呼び出すオブジェクトプログラムを生成する処理過
程とを備えるように構威する。
本発明は.実行時に未定義変数の引用検査を行うことが
できる言語仕様を持つFORTRAN等の計算機言語を
翻訳するコンパイラを備えた計算機システムにおける未
定義変数引用検査処理方法に関する. 〔従来の技術〕 FORTRANコンパイラ等では,デバッグ(DEBU
G)オプションにより,添字の検査,未定義変数の検出
,・・・など.各種の動作確認が可能なオブジェクトプ
ログラムを生成することができるようになっている. 従来,このデバッグオプシッンのサブパラメタで未定義
変数の検出が指定された場合,コンパイラ内の処理機構
として,未定義変数引用検査(以下,UNDEF検査と
いう)の管理機構を持たないため,オブジェクトプログ
ラムでは,未定義検査対象の変数に対して.必ずUND
EF検査用のライブラリを呼び出すようにしていた.〔
発明が解決しようとする課題〕 従来技術では,各変数に対して,常にUNDEF検査用
ライブラリを呼び出しているので.そのライブラリ呼び
出しのためのオーバヘッドが大きく,実行スピードが遅
いという問題があった.本発明は上記問題点の解決を図
り,余分なライブラリ呼び出しの回数を削減し,翻訳さ
れたプログラムの実行スピードを向上させることを目的
としている. 〔課題を解決するための手段〕 第l図は本発明の構戒例を示す。
できる言語仕様を持つFORTRAN等の計算機言語を
翻訳するコンパイラを備えた計算機システムにおける未
定義変数引用検査処理方法に関する. 〔従来の技術〕 FORTRANコンパイラ等では,デバッグ(DEBU
G)オプションにより,添字の検査,未定義変数の検出
,・・・など.各種の動作確認が可能なオブジェクトプ
ログラムを生成することができるようになっている. 従来,このデバッグオプシッンのサブパラメタで未定義
変数の検出が指定された場合,コンパイラ内の処理機構
として,未定義変数引用検査(以下,UNDEF検査と
いう)の管理機構を持たないため,オブジェクトプログ
ラムでは,未定義検査対象の変数に対して.必ずUND
EF検査用のライブラリを呼び出すようにしていた.〔
発明が解決しようとする課題〕 従来技術では,各変数に対して,常にUNDEF検査用
ライブラリを呼び出しているので.そのライブラリ呼び
出しのためのオーバヘッドが大きく,実行スピードが遅
いという問題があった.本発明は上記問題点の解決を図
り,余分なライブラリ呼び出しの回数を削減し,翻訳さ
れたプログラムの実行スピードを向上させることを目的
としている. 〔課題を解決するための手段〕 第l図は本発明の構戒例を示す。
第1図において,11は人力装置,12は翻訳対象とな
るソースプログラム,13はCPUおよびメモリなどか
らなる処理装置,14はソースプログラムl2を機械語
に翻訳するコンパイラ,l5はコンパイラ14が使用す
る作業領域.16は定義されている変数を記憶する管理
テーブル,17は翻訳結果の機械語命令などからなるオ
ブジェクトプログラム.18は未定義変数の引用検査を
行うUNDEF検査用ライブラリ,PIおよびP2はコ
ンパイラl4によるUNDEF検査の管理のための処理
過程を表す. UNDEF検査のデバッグオプシヲンが指定されて,コ
ンパイラ14が起動された場合,本発明では.コンパイ
ラl4は,次の処理を行う.処理過程PIにより,現在
注目している中間テキスト化されたソースプログラム1
2中の変数について,その変数が値の定義される位置で
使用されているかどうかを調べる.そして.定義される
位置で使用されているとき.その変数を,コンパイラ1
4の作業領域l5中に設けた管理テーブル16に登録す
る。
るソースプログラム,13はCPUおよびメモリなどか
らなる処理装置,14はソースプログラムl2を機械語
に翻訳するコンパイラ,l5はコンパイラ14が使用す
る作業領域.16は定義されている変数を記憶する管理
テーブル,17は翻訳結果の機械語命令などからなるオ
ブジェクトプログラム.18は未定義変数の引用検査を
行うUNDEF検査用ライブラリ,PIおよびP2はコ
ンパイラl4によるUNDEF検査の管理のための処理
過程を表す. UNDEF検査のデバッグオプシヲンが指定されて,コ
ンパイラ14が起動された場合,本発明では.コンパイ
ラl4は,次の処理を行う.処理過程PIにより,現在
注目している中間テキスト化されたソースプログラム1
2中の変数について,その変数が値の定義される位置で
使用されているかどうかを調べる.そして.定義される
位置で使用されているとき.その変数を,コンパイラ1
4の作業領域l5中に設けた管理テーブル16に登録す
る。
変数が値の定義される位置ではなく,引用される位置で
使用されているとき,処理過程P2により,その変数が
管理テーブル16に登録済みであるかどうかを調べる,
登録済みであれば,未定義変数の引用検査用のためのU
NDEF検査用ライブラリ1日の呼び出しを不要とし,
登録されていないときにのみ,UNDEF検査用ライブ
ラリ18を呼び出すオブジェクトプログラム17を生或
する. 〔作用〕 従来技術では,UNDEF検査の対象となるすべての変
数について.毎回.オブジェクトプログラム17の中か
ら,UNDEF検査用ライブラリ18を呼び出すように
.ライブラリの呼び出し命令をオブジェクトプログラム
l7中に組み込んでいた. これに対し,本発明では,同じ翻訳単位中に定義されて
いる変数については.コンパイラl4による翻訳処理時
に検査し,UNDEF検査用ライブラリ18の呼び出し
を行わないオブジェクトプロクラム17を生或するので
,オブジェクトプログラムl7の実行スピードが向上す
る。
使用されているとき,処理過程P2により,その変数が
管理テーブル16に登録済みであるかどうかを調べる,
登録済みであれば,未定義変数の引用検査用のためのU
NDEF検査用ライブラリ1日の呼び出しを不要とし,
登録されていないときにのみ,UNDEF検査用ライブ
ラリ18を呼び出すオブジェクトプログラム17を生或
する. 〔作用〕 従来技術では,UNDEF検査の対象となるすべての変
数について.毎回.オブジェクトプログラム17の中か
ら,UNDEF検査用ライブラリ18を呼び出すように
.ライブラリの呼び出し命令をオブジェクトプログラム
l7中に組み込んでいた. これに対し,本発明では,同じ翻訳単位中に定義されて
いる変数については.コンパイラl4による翻訳処理時
に検査し,UNDEF検査用ライブラリ18の呼び出し
を行わないオブジェクトプロクラム17を生或するので
,オブジェクトプログラムl7の実行スピードが向上す
る。
第2図は本発明の実施例で使用する管理テーブルの構戒
例,第3図は本発明の実施例によるONDEF検査の管
理処理フローを示す. 値が定義されている変数を管理するために,例えば第2
図に示すような管理テーブル16A.16B,・・・を
使用する.各管理テーブル16A,16B,・・・は,
各変数の変数記憶域20A,20B,・・・を指すポイ
ンタと,次の管理テーブルへの連鎖のポインタとを記憶
するようになっている.ある変数が,管理テーブルに登
録済みであるか否かは.検査の対象となっている入力変
数のポインタが.各管理テーブルにおける変数のポイン
タと一致するかどうかで調べることができる.第1図に
示すコンパイラl4におけるUNDEF検査のための管
理ルーチンによる処理は.例えば第3図に示すように行
われる.以下の説明における■〜■は.第3図に示す処
理■〜■に対応する. ■ 管理ルーチンへの入力変数が,テキストの構文にお
けるどの位置で使用されているかを調べる. ■ 入力変数が,値の定義される位置で使用されている
とき.処理■へ,値の定義ではなく,引用であるとき,
処理■へ移る. ■ 入力変数が.管理テーブルに登録済みであるかどう
かを調べる.なお,登録済みの検査は,後述する処理■
〜■と同じ処理内容である。登録済みであれば,処理を
終了し,υNDEF検査の管理ルーチンから抜け出す. ■ 未登録である場合.作業領域内に管理テーブルを設
けて,その入力変数を登録する.その後.処理を終了す
る. ■ 入力変数が引用である場合,登録済みであるかどう
かを調べるために,管理テーブルへのポインタを得る. ■ 変数へのポインタから,入力変数と登録済みの変数
が,同じ変数であるかどうかを調べる.同じ変数であれ
ば,入力変数は登録済みであるので.そのまま処理を終
了する. ■ 同じ変数でない場合,次の管理テーブルを調べるた
めに.管理テーブルの連鎖があるかどうかを判定する.
連鎖がある場合,処理■へ戻り.その連鎖から.次の管
理テーブルのポインタを得る.連鎖がない場合,入力変
数は未登録と判断する. ■ 入力変数が未登録の場合.第1図に示すUNDEF
検査用ライブラリ18を呼び出すようにする. 以下,具体例に従って.処理の例を説明する.ソースプ
ログラムのテキスト中において, UNDEF検査の対
象となるものは,例えば,以下のものである. 関係式 代入文 入出力文 実変数に現れた式 (例l) ■ A冒l ■ B−A このようなプログラムの場合は,以下のようになる. ■ 変数Aは.代入文の左辺であるので.未定義になる
ことはない.そこで,変数Aが未定義ではないことを示
すために.管理テーブルに八の名前もしくはその記憶域
へのポインタを登録する. ■ 変数Bは,代入文の左辺であるので.未定義になる
ことはない.そこで,変数Bが未定義ではないことを示
すために,管理テーブルにBの名前もしくはその記憶域
へのポインタを登録する.この式における変数Aは,代
入文の右辺にある.そこで.既に管理テーブルに変数A
が登録されているかを検索する.検索の結果,この例で
は,変数Aは.既に登録されている(値が定義されてい
る)ので,UNDEF検査の対象とはせず.第1図に示
すUNDEF検査用ライブラリ18の呼び出しは行わな
い. (例2) ■ A=B ■ B−1 ■ C−B このようなプログラムの場合は,以下のようになる. ■ 変数Aは,代入文の左辺であるので,未定義になる
ことはない.そこで,変数Aが未定義ではないことを示
すために,管理テーブルにAの名前もしくはその記憶域
へのポインタを登録する.変数Bは,代入文の右辺にあ
る。そこで,既に管理テーブルに変数Bが登録されてい
るかを検索する.検索の結果.変数Bは,登録されてい
ない.すなわち2値が未定義である。したがって,UN
DEF検査の対象となり,第1図に示すUNDEF検査
用ライブラリ18を呼び出すことにする. ■ 変数Bは,代入文の左辺であるので,未定義になる
ことはない.そこで.変数Bが未定義ではないことを示
すために.管理テーブルにBの名前もしくはその記憶域
へのポインタを登録する. ■ 変数Cは,代入文の左辺であるので,未定義になる
ことはない。そこで,変数Cが未定義ではないことを示
すために.管理テーブルにCの名前もしくはその記憶域
へのポインタを登録する。この式における変数Bは,代
入文の右辺にある.そこで9既に管理テーブルに変数B
が登録されているかを検索する.検索の結果,変数Bは
.既に登録されている(値が定義されている)ので,U
NDEF検査の対象とはせず,第1図に示すUNDEF
検査用ライブラリ18の呼び出しは行わない. なお,第1図に示すUNDEF検査用ライブラリ18内
の処理については.従来と同様でよく,未定義変数の検
査,エラー処理などを行うが.周知であるので,内部処
理についての詳細な説明は省略する. 〔発明の効果〕 以上説明したように.本発明によれば,余分なライブラ
リ呼び出しの回数を削減し,翻訳されたプログラムの実
行スピードを向上させることが可能になる。
例,第3図は本発明の実施例によるONDEF検査の管
理処理フローを示す. 値が定義されている変数を管理するために,例えば第2
図に示すような管理テーブル16A.16B,・・・を
使用する.各管理テーブル16A,16B,・・・は,
各変数の変数記憶域20A,20B,・・・を指すポイ
ンタと,次の管理テーブルへの連鎖のポインタとを記憶
するようになっている.ある変数が,管理テーブルに登
録済みであるか否かは.検査の対象となっている入力変
数のポインタが.各管理テーブルにおける変数のポイン
タと一致するかどうかで調べることができる.第1図に
示すコンパイラl4におけるUNDEF検査のための管
理ルーチンによる処理は.例えば第3図に示すように行
われる.以下の説明における■〜■は.第3図に示す処
理■〜■に対応する. ■ 管理ルーチンへの入力変数が,テキストの構文にお
けるどの位置で使用されているかを調べる. ■ 入力変数が,値の定義される位置で使用されている
とき.処理■へ,値の定義ではなく,引用であるとき,
処理■へ移る. ■ 入力変数が.管理テーブルに登録済みであるかどう
かを調べる.なお,登録済みの検査は,後述する処理■
〜■と同じ処理内容である。登録済みであれば,処理を
終了し,υNDEF検査の管理ルーチンから抜け出す. ■ 未登録である場合.作業領域内に管理テーブルを設
けて,その入力変数を登録する.その後.処理を終了す
る. ■ 入力変数が引用である場合,登録済みであるかどう
かを調べるために,管理テーブルへのポインタを得る. ■ 変数へのポインタから,入力変数と登録済みの変数
が,同じ変数であるかどうかを調べる.同じ変数であれ
ば,入力変数は登録済みであるので.そのまま処理を終
了する. ■ 同じ変数でない場合,次の管理テーブルを調べるた
めに.管理テーブルの連鎖があるかどうかを判定する.
連鎖がある場合,処理■へ戻り.その連鎖から.次の管
理テーブルのポインタを得る.連鎖がない場合,入力変
数は未登録と判断する. ■ 入力変数が未登録の場合.第1図に示すUNDEF
検査用ライブラリ18を呼び出すようにする. 以下,具体例に従って.処理の例を説明する.ソースプ
ログラムのテキスト中において, UNDEF検査の対
象となるものは,例えば,以下のものである. 関係式 代入文 入出力文 実変数に現れた式 (例l) ■ A冒l ■ B−A このようなプログラムの場合は,以下のようになる. ■ 変数Aは.代入文の左辺であるので.未定義になる
ことはない.そこで,変数Aが未定義ではないことを示
すために.管理テーブルに八の名前もしくはその記憶域
へのポインタを登録する. ■ 変数Bは,代入文の左辺であるので.未定義になる
ことはない.そこで,変数Bが未定義ではないことを示
すために,管理テーブルにBの名前もしくはその記憶域
へのポインタを登録する.この式における変数Aは,代
入文の右辺にある.そこで.既に管理テーブルに変数A
が登録されているかを検索する.検索の結果,この例で
は,変数Aは.既に登録されている(値が定義されてい
る)ので,UNDEF検査の対象とはせず.第1図に示
すUNDEF検査用ライブラリ18の呼び出しは行わな
い. (例2) ■ A=B ■ B−1 ■ C−B このようなプログラムの場合は,以下のようになる. ■ 変数Aは,代入文の左辺であるので,未定義になる
ことはない.そこで,変数Aが未定義ではないことを示
すために,管理テーブルにAの名前もしくはその記憶域
へのポインタを登録する.変数Bは,代入文の右辺にあ
る。そこで,既に管理テーブルに変数Bが登録されてい
るかを検索する.検索の結果.変数Bは,登録されてい
ない.すなわち2値が未定義である。したがって,UN
DEF検査の対象となり,第1図に示すUNDEF検査
用ライブラリ18を呼び出すことにする. ■ 変数Bは,代入文の左辺であるので,未定義になる
ことはない.そこで.変数Bが未定義ではないことを示
すために.管理テーブルにBの名前もしくはその記憶域
へのポインタを登録する. ■ 変数Cは,代入文の左辺であるので,未定義になる
ことはない。そこで,変数Cが未定義ではないことを示
すために.管理テーブルにCの名前もしくはその記憶域
へのポインタを登録する。この式における変数Bは,代
入文の右辺にある.そこで9既に管理テーブルに変数B
が登録されているかを検索する.検索の結果,変数Bは
.既に登録されている(値が定義されている)ので,U
NDEF検査の対象とはせず,第1図に示すUNDEF
検査用ライブラリ18の呼び出しは行わない. なお,第1図に示すUNDEF検査用ライブラリ18内
の処理については.従来と同様でよく,未定義変数の検
査,エラー処理などを行うが.周知であるので,内部処
理についての詳細な説明は省略する. 〔発明の効果〕 以上説明したように.本発明によれば,余分なライブラ
リ呼び出しの回数を削減し,翻訳されたプログラムの実
行スピードを向上させることが可能になる。
第1図は本発明の構戒例.
第2図は本発明の実施例で使用する管理テーブルの構戒
例, 第3図は本発明の実施例によるUNDEF検査の管理処
理フローを示す.
例, 第3図は本発明の実施例によるUNDEF検査の管理処
理フローを示す.
Claims (1)
- 【特許請求の範囲】 実行時に未定義変数の引用検査を行うことができる言語
仕様を持つ計算機言語を翻訳するコンパイラ(14)を
備えた計算機システムにおける未定義変数引用検査処理
方法において、 変数が値の定義される位置で使用されているとき、その
変数を管理テーブル(16)に登録する処理過程(P1
)と、 変数が引用されているとき、その変数が管理テーブル(
16)に登録済みであるかどうかを調べ、登録済みであ
れば、未定義変数引用検査用のライブラリ(18)の呼
び出しを不要とし、登録されていないときにのみ、未定
義変数引用検査用のライブラリ(18)を呼び出すオブ
ジェクトプログラム(17)を生成する処理過程(P2
)と を備えたことを特徴とする未定義変数引用検査処理方法
。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP24458289A JPH03105628A (ja) | 1989-09-20 | 1989-09-20 | 未定義変数引用検査処理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP24458289A JPH03105628A (ja) | 1989-09-20 | 1989-09-20 | 未定義変数引用検査処理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH03105628A true JPH03105628A (ja) | 1991-05-02 |
Family
ID=17120867
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP24458289A Pending JPH03105628A (ja) | 1989-09-20 | 1989-09-20 | 未定義変数引用検査処理方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH03105628A (ja) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62138932A (ja) * | 1985-12-12 | 1987-06-22 | Fujitsu Ltd | コンパイラ処理方式 |
-
1989
- 1989-09-20 JP JP24458289A patent/JPH03105628A/ja active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS62138932A (ja) * | 1985-12-12 | 1987-06-22 | Fujitsu Ltd | コンパイラ処理方式 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Naik et al. | Effective static deadlock detection | |
Patenaude et al. | Extending software quality assessment techniques to java systems | |
US8266608B2 (en) | Post-compile instrumentation of object code for generating execution trace data | |
Petters et al. | Making worst case execution time analysis for hard real-time tasks on state of the art processors feasible | |
US10902129B2 (en) | Method for detecting vulnerabilities in software | |
US7552425B2 (en) | Implementing enhanced compiled breakpoint analysis | |
JP6316120B2 (ja) | テストケース生成システム及びテストケースを記録した記録媒体 | |
CN103559123A (zh) | 基于VxWorks操作系统的函数调用栈分析方法及装置 | |
Hariri et al. | Srciror: A toolset for mutation testing of c source code and llvm intermediate representation | |
Liang et al. | MLSA: a static bugs analysis tool based on LLVM IR | |
JPH03188535A (ja) | プログラム・エラー検出方法 | |
Novikov et al. | The approach to finding errors in program code based on static analysis methodology | |
CN116089302A (zh) | 一种针对Rust编程语言中UNSAFE代码片段缺陷的检测方法 | |
US5822589A (en) | Method for locating errors in a computer program | |
JPH03105628A (ja) | 未定義変数引用検査処理方法 | |
US20050050524A1 (en) | Generating software test information | |
JPH01177165A (ja) | 配列の定義/引用関係検査方式 | |
Fink et al. | An interface language between specifications and testing | |
JPH0520093A (ja) | モジユールのコンパイル方法およびコンパイル装置 | |
Szalaya et al. | Symbol Clustering: Resolving ambiguous symbol references of large-scale C/C++ projects based on linkage information | |
JP3213792B2 (ja) | 論理シミュレ−ション検証方式 | |
JPH03182935A (ja) | プログラム間静的解析装置 | |
US7627859B2 (en) | Method for configuring non-script language library files to be run as scripts | |
Suchert et al. | Check for updates STAMP-Rust: Language and Performance Comparison to C on Transactional Benchmarks | |
JPH01154256A (ja) | プログラムのエラー位置検出方法 |