JPH05204705A - 未定義変数検出処理方法 - Google Patents

未定義変数検出処理方法

Info

Publication number
JPH05204705A
JPH05204705A JP4015225A JP1522592A JPH05204705A JP H05204705 A JPH05204705 A JP H05204705A JP 4015225 A JP4015225 A JP 4015225A JP 1522592 A JP1522592 A JP 1522592A JP H05204705 A JPH05204705 A JP H05204705A
Authority
JP
Japan
Prior art keywords
variable
variables
undefined
block
library
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
JP4015225A
Other languages
English (en)
Inventor
Yuuji Tsujimori
誘二 辻森
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP4015225A priority Critical patent/JPH05204705A/ja
Publication of JPH05204705A publication Critical patent/JPH05204705A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【目的】ソースプログラム10をデバッグ用オブジェクト
プログラム12に翻訳するコンパイラ11における未定義変
数検出処理方法に関し,検査対象プログラムの実行性能
を向上させることを目的とする。 【構成】処理過程P1により,翻訳対象プログラム中の実
行制御の単位となるブロックB1,B2,…ごとに,検査が必
要な変数を抽出する。処理過程P2では,各ブロックごと
に抽出した変数を集め,検査が必要な変数をまとめて指
定して, 未定義変数の検査ライブラリ13を呼び出す命令
を,オブジェクトプログラム12における各ブロックの先
頭に挿入する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は,FORTRANプログ
ラムのデバッグなどにおいて,未定義変数の引用を高速
に検出できるようにしたコンパイラにおける未定義変数
検出処理方法に関する。
【0002】ソースプログラムをデバッグオプションを
選択してコンパイルすることにより,その翻訳結果の実
行によって,デバッグ情報を収集できるようにすること
が行われている。そのため,コンパイラは,デバッグオ
プション時に各種のプログラムの正当性を検査するライ
ブラリ呼び出しをプログラム中に挿入する。このような
プログラムの実行では,検査ライブラリの呼び出しによ
って実行時間が長くかかるので,その高速化が必要とさ
れる。
【0003】
【従来の技術】例えばFORTRANなどのプログラミ
ング言語では,未定義な変数(値を設定していない変
数)を引用してはならない。未定義な変数を引用した場
合,システムまたは動作環境によって,得られる結果が
変わってくるからである。そこで,デバッグオプション
を選択してコンパイルすることにより,次のような未定
義な変数の引用を検出する処理を,コンパイル結果に組
み込むことが行われている。
【0004】1)まず,プログラムの実行の直前で,変
数に特定の値を設定する。 2)変数の引用の直前で,未定義変数の検査ライブラリ
を呼び出し,そのライブラリでは,その変数が未定義な
値(特定の値を持った変数)の引用かどうかを検査し,
未定義な値であれば,診断メッセージを出力する。
【0005】図5は従来技術の説明図である。例えば,
図5の(イ)に示すFORTRANで記述されたソース
プログラム10を,未定義変数引用の検査を指定するデ
バッグオプションを選択してコンパイルすると,従来,
図5の(ロ)に示す内容を持つオブジェクトプログラム
12を生成していた。なお,(ロ)では,説明を分かり
やすくするためにソースイメージで表している。
【0006】オブジェクトプログラム12の動作は,次
のようになる。最初に,未定義状態を検出するための特
定の値を変数に設定するライブラリを呼び出す。ブロッ
ク(#001)では,READを実行するライブラリを
呼び出す。ブロック(#010)では,I=K+Lで引
用されている変数K,Lが未定義でないかを検査するた
めに,それぞれ未定義変数の検査ライブラリを呼び出
し,その後にI=K+Lの演算を実行する。また,A
(M)=Jで引用される変数J,Mについても未定義変
数の検査ライブラリを呼び出し,未定義でないかを検査
した後,配列Aへの代入を実行する。以降も同様であ
る。
【0007】以上のように,従来技術では,変数が引用
される直前で,各変数ごとに未定義変数の検査ライブラ
リを呼び出すようにしていた。
【0008】
【発明が解決しようとする課題】従来の方式では,以下
のような問題がある。 (1) ライブラリは呼び出されるたびにレジスタの退避な
どを行うので,その実行にかなりの時間がかかるが,従
来技術によると,変数の引用ごとにライブラリ呼び出し
が発生するので,ライブラリ呼び出しの回数が多くな
り,実行性能が極端に落ちる。
【0009】(2) 変数の引用のたびに,変数の値を参照
するライブラリ呼び出しを行うと,その変数の値を必ず
メモリに格納しなければならないので,レジスタだけで
変数の値を保持したり,後続の命令に伝播したりするこ
とができず,また,同じ形で何回も現れる共通式の削除
を実施することができない。
【0010】(3) 例えばFORTRANでは,ブロック
単位(図5の(ロ)に示すオブジェクトプログラム12
において,#nnnで示されている範囲)で,一度検査
すればよい変数であるにもかかわらず,複数回呼び出す
ことになり,無駄なライブラリ呼び出しにより性能が劣
化する。
【0011】本発明は上記問題点の解決を図り,未定義
変数の検出を,制御が渡される単位であるブロックの先
頭でまとめて行うことにより,検査ライブラリの呼び出
し回数を減らし,高速な実行を可能とすることを目的と
している。
【0012】
【課題を解決するための手段】図1は本発明の原理説明
図である。図1において,10はFORTRANなどの
高級言語で記述されたソースプログラム,11はコンパ
イラ,12は機械語に翻訳されたオブジェクトプログラ
ム,13はオブジェクトプログラム12から呼び出さ
れ,未定義変数引用の検査を行う未定義変数の検査ライ
ブラリを表す。
【0013】コンパイラ11は,未定義変数引用の検査
に関するデバッグオプションの選択により,ソースプロ
グラム10の翻訳を指示されると,未定義変数の検査ラ
イブラリ13を呼び出す命令を挿入したオブジェクトプ
ログラム12を生成する。この際に,本発明では次の処
理を行う。
【0014】処理過程P1により,ソースプログラム1
0の解析結果である中間コードを調べ,そのプログラム
中において実行制御の単位となるブロックB1,B2,
…ごとに,検査が必要な変数を抽出する。
【0015】そして,処理過程P2により,各ブロック
ごとに抽出した変数を集め,検査が必要な変数をまとめ
て指定する未定義変数の検査ライブラリ13を呼び出す
命令を,オブジェクトプログラム12における各ブロッ
クB1,B2,…の先頭に挿入する処理を行う。
【0016】
【作用】本発明では,分岐などにより実行制御が渡され
る単位をブロックとし,ブロックの途中で値の確定する
変数を引用しているために,先頭へまとめられない場合
を除き,未定義変数引用の検査を常にブロックの先頭で
まとめて行う。例えば,ブロックB1において,変数
A,B,Cの3つが引用(参照)されていたとすると,
その3個の変数をブロックB1の先頭でまとめて,一度
の未定義変数の検査ライブラリ13の呼び出しで,検査
を行う。
【0017】さらに,1つのブロック内で同じ変数が2
回引用されていても,未定義変数の検査ライブラリ13
の呼び出しを複数回行うことはしない。したがって,未
定義変数の検査ライブラリ13の呼び出し回数が非常に
少なくなる。
【0018】なお,未定義変数引用の検査でブロックの
先頭へまとめられない場合とは,以下のA(J)のよう
にブロックの途中で値が確定する場合である。
【0019】
【実施例】図2は本発明の実施例による処理構成ブロッ
ク図,図3は本発明の実施例によるオブジェクトプログ
ラムの生成例を示す図,図4は本発明の実施例のフロー
チャートである。
【0020】図2において,図1と同符号のものは図1
に示すものに対応する。20はCPUおよびメモリなど
からなり,コンパイラ11を動作させる処理装置であ
る。コンパイラ11において,構文解析部21は,ソー
スプログラム10を入力し,構文を解析するものであ
る。意味解析部22は,構文の解析結果から各字句の意
味を調べ,その解析結果を中間コードに変換する処理を
行うものである。
【0021】デバッグ用変換部23は,コンパイラ11
の起動時にデバッグオプションの選択指示があると,意
味解析部22の出力した中間コードを,デバッグ情報を
取得するための中間コードに変換するものである。本発
明は,特に,このデバッグ用変換部23が行う処理に関
連している。検査が必要な未定義変数を抽出するため
に,変数名記憶域24,25を用意する。変数名記憶域
24は,検査対象のブロック内で定義されている変数
名を記憶する領域で,変数名記憶域は,ブロック内で
値が参照されているため検査が必要な変数名を記憶する
領域である。
【0022】最適化部26は,重複した無駄な処理の削
除や共通式の統合などの最適化処理を行うものである。
コード生成部27は,最適化された中間コードをもとに
オブジェクトプログラム12を生成する処理を行うもの
である。
【0023】図3の(イ)は,ソースプログラム10の
例を示しており,図3の(ロ)は,それを翻訳したオブ
ジェクトプログラム12の内容をソースイメージで示し
ている。このプログラムは,FORTRAN言語で記述
されているが,他のプログラミング言語おいても同様に
本発明を適用することが可能である。
【0024】FORTRANでは,プログラム中の1,
10,20,30という文番号以外のところに実行制御
が渡ることはないので,文番号が付けられているところ
を各ブロックの先頭とする。
【0025】図3の(ロ)に示すように,最初に,未定
義状態を検出するための特定の値を変数に設定するライ
ブラリを呼び出す。各変数の領域に特定の値を設定して
おくことにより,後で未定義変数の検査ライブラリ13
が呼び出されたときに,未定義変数の検査ライブラリ1
3では,その特定の値が変更されているかどうかを調
べ,呼び出し時に未定義であるか定義済みであるかを判
定することができる。この特定の値を設定するライブラ
リの呼び出しについては,従来と同様である。
【0026】ブロック(#001)では,READを実
行するライブラリを呼び出す。ブロック(#010)で
は,I=K+Lで引用されている変数としてK,Lがあ
り,A(M)=Jで引用されている変数としてJ,Mが
ある。そこで,これらをまとめて,ブロックの先頭で未
定義変数の検査ライブラリ13を呼び出す。パラメータ
として,変数の個数と変数のリストを指定する。
【0027】ブロック(#020)でも,そのブロック
内で引用されている変数をまとめ,ブロックの先頭で未
定義変数の検査ライブラリ13の呼び出しを行う。ここ
では,変数M,変数A(M),変数N,変数Iが,一度
の未定義変数の検査ライブラリ13の呼び出しで検査さ
れることになる。
【0028】図2に示すデバッグ用変換部23における
本発明に関係する部分の処理は,例えば図4に示す(a)
〜(n) のようになっている。 (a) 実行制御の単位であるブロックを取り出す。
【0029】(b) ブロックが終了したならば,デバッグ
用への変換処理を終了する。 (c) ブロックを取り出すことができたならば,図4の
(ロ)に示す変数の抽出処理を実行する。抽出した変数
は,変数名記憶域に格納される。
【0030】(d) 検査が必要な変数を抽出したならば,
変数の個数と変数名記憶域に格納された情報をもと
に,未定義変数の検査ライブラリ13へのパラメタを作
成する。
【0031】(e) 現在処理中のブロックの先頭に,未定
義変数の検査ライブラリ13を呼び出す命令を挿入す
る。その後,処理(a) へ戻り,次のブロックの処理を行
う。 (f) 変数の抽出処理では,まず変数の個数を0に初期化
し,また変数名記憶域,をクリアする。
【0032】(g) 次にそのブロック内で引用されている
変数を,1つずつ順に取り出す。 (h) 取り出す変数がなくなったならば,変数の抽出処理
を終了する。 (i) 取り出した変数が値を参照しているものか,値を定
義しているものかを調べる。値を参照しているものであ
れば,処理(k) へ進む。
【0033】(j) 取り出した変数が値を定義しているも
のであれば,その変数名を定義された名前として記憶す
るために,変数名記憶域に格納する。その後,処理
(g) へ戻り,次の変数の処理に移る。
【0034】(k) 取り出した変数が値を参照しているも
のであれば,その変数が,変数名記憶域に,定義され
た名前として存在するかどうかを調べる。ブロック内で
既に定義された名前として,変数名記憶域に登録され
ていれば,その変数の検査は必要ないので,処理(g) へ
戻り,次の変数の処理に移る。
【0035】(l) その変数が既定義でなければ,既にそ
の変数が検査対象として変数記憶域に登録されている
かどうかを調べる。変数記憶域に登録されていれば,
重複検査の必要がないので,処理(g) へ戻り,次の変数
の処理に移る。
【0036】(m) 変数記憶域に登録されていなけれ
ば,検査対象の変数の個数に1を足す。 (n) 未定義変数引用の検査が必要な変数として,変数記
憶域に名前を登録する。その後,処理(g) へ戻り,次
の変数の処理に移る。
【0037】なお,従来の未定義変数の検査ライブラリ
13では,1回の呼び出しで1つの変数だけを検査して
いたが,本発明では,複数の変数の検査を行なえるよう
に,未定義変数の検査ライブラリ13のインタフェース
に以下の情報を追加する。
【0038】(1) 検査する変数の個数:n (2) 検査する変数の情報(n) 未定義変数の検査ライブラリ13では,検査する変数の
個数だけ変数情報を取り出して,その各々について従来
と同様な検査を行う。
【0039】
【発明の効果】以上説明したように,本発明によれば,
次のような効果がある。 (1) ライブラリ呼び出しの回数が減り,実行性能が向上
する。
【0040】(2) 検査する変数の個数が減り,実行性能
が向上する。 (3) 検査対象の変数はライブラリで参照されるが,その
位置が局所化されるので,共通式の削除(例えば図3に
示すA(M)の共通化)やレジスタの伝播などの最適化
が実施され,実行性能が向上する。
【図面の簡単な説明】
【図1】本発明の原理説明図である。
【図2】本発明の実施例による処理構成ブロック図であ
る。
【図3】本発明の実施例によるオブジェクトプログラム
の生成例を示す図である。
【図4】本発明の実施例のフローチャートである。
【図5】従来技術の説明図である。
【符号の説明】
10 ソースプログラム 11 コンパイラ 12 オブジェクトプログラム 13 未定義変数の検査ライブラリ P1〜P2 処理過程

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 ソースプログラム(10)をデバッグ用オブ
    ジェクトプログラム(12)に翻訳するコンパイラ(11)の処
    理方法であって,オブジェクトプログラム中に未定義変
    数の検査ライブラリ(13)を呼び出す命令を挿入すること
    により,未定義変数の引用に関する検査を行うオブジェ
    クトプログラムを生成する未定義変数検出処理方法にお
    いて,翻訳対象プログラム中の実行制御の単位となるブ
    ロック(B1,B2, …) ごとに,検査が必要な変数を抽出す
    る処理過程(P1)と,上記各ブロックごとに抽出した変数
    を集め,検査が必要な変数をまとめて指定する未定義変
    数の検査ライブラリを呼び出す命令を,オブジェクトプ
    ログラムにおける各ブロックの先頭に挿入する処理過程
    (P2)とを有することを特徴とする未定義変数検出処理方
    法。
JP4015225A 1992-01-30 1992-01-30 未定義変数検出処理方法 Pending JPH05204705A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP4015225A JPH05204705A (ja) 1992-01-30 1992-01-30 未定義変数検出処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP4015225A JPH05204705A (ja) 1992-01-30 1992-01-30 未定義変数検出処理方法

Publications (1)

Publication Number Publication Date
JPH05204705A true JPH05204705A (ja) 1993-08-13

Family

ID=11882930

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4015225A Pending JPH05204705A (ja) 1992-01-30 1992-01-30 未定義変数検出処理方法

Country Status (1)

Country Link
JP (1) JPH05204705A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08194624A (ja) * 1995-01-20 1996-07-30 Fujitsu Ltd 実行形式プログラム作成方法
JP2007249262A (ja) * 2006-03-13 2007-09-27 Nec Corp 配列範囲外アクセス検出方式及び方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08194624A (ja) * 1995-01-20 1996-07-30 Fujitsu Ltd 実行形式プログラム作成方法
JP2007249262A (ja) * 2006-03-13 2007-09-27 Nec Corp 配列範囲外アクセス検出方式及び方法

Similar Documents

Publication Publication Date Title
US5854924A (en) Static debugging tool and method
CN100385399C (zh) 用于多个异常处理模型的中间表示的方法和系统
US5142681A (en) APL-to-Fortran translators
US6085029A (en) Method using a computer for automatically instrumenting a computer program for dynamic debugging
US6412109B1 (en) Method for optimizing java bytecodes in the presence of try-catch blocks
US20090249307A1 (en) Program analysis apparatus, program analysis method, and program storage medium
US6467082B1 (en) Methods and apparatus for simulating external linkage points and control transfers in source translation systems
JPH05257709A (ja) 並列化判別方法およびそれを用いた並列化支援方法
WO1990001738A1 (en) Machine process for translating programs in binary machine language into another binary machine language
JPH0883185A (ja) コンパイラ
US20150020051A1 (en) Method and apparatus for automated conversion of software applications
CN113741869A (zh) 一种高性能的可变语法编程语言的构造方法
JPH05204705A (ja) 未定義変数検出処理方法
JP2002288004A (ja) プログラムソース処理装置、プログラムソース処理方法、およびプログラムソース処理プログラム
Grigorev et al. String-embedded language support in integrated development environment
JP3903514B2 (ja) 未定義変数検出の最適化コンパイラ装置
JPH02176938A (ja) 機械語命令最適化方式
Harmer et al. Transformations to Restructure and Re–engineer COBOL Programs
EP0252229B1 (en) Apl-to-fortran translator
JPH05120025A (ja) ソースプログラムのインライン展開方法
JPH0695890A (ja) コンパイラにおける名前置換方式
JP3323147B2 (ja) コンパイル装置、コンパイル方法およびコンパイラプログラムを記録した記録媒体
JPH11195011A (ja) 言語翻訳処理装置、言語翻訳処理方法、言語翻訳処理プログラムを記録した記録媒体
JPH0235349B2 (ja) Ruupunaihairetsushoribekutorukashorihoshiki
JP3141945B2 (ja) コンパイル装置

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 19990824