JPH046019B2 - - Google Patents
Info
- Publication number
- JPH046019B2 JPH046019B2 JP28012385A JP28012385A JPH046019B2 JP H046019 B2 JPH046019 B2 JP H046019B2 JP 28012385 A JP28012385 A JP 28012385A JP 28012385 A JP28012385 A JP 28012385A JP H046019 B2 JPH046019 B2 JP H046019B2
- Authority
- JP
- Japan
- Prior art keywords
- undefined
- item
- statement
- intermediate statement
- inspection
- 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.)
- Expired
Links
- 238000007689 inspection Methods 0.000 claims description 35
- 238000012360 testing method Methods 0.000 claims description 8
- 238000003672 processing method Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 9
- 238000004458 analytical method Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000000034 method Methods 0.000 description 4
- 230000014509 gene expression Effects 0.000 description 2
- 238000003745 diagnosis Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
Landscapes
- Devices For Executing Special Programs (AREA)
Description
【発明の詳細な説明】
〔概要〕
コンパイラ処理時に中間言票に基づいて未定義
項目を判定し、検査用の中間言票を挿入して未定
義項目検査用のロードモジユールを作成し、実行
時に未定義項目を検出したときエラー警告を行な
う。
項目を判定し、検査用の中間言票を挿入して未定
義項目検査用のロードモジユールを作成し、実行
時に未定義項目を検出したときエラー警告を行な
う。
本発明は、データ処理装置における
FORTRAN等の高級言語で記述されたソースプ
ログラムのコンパイラ処理方式に関するものであ
り、特にソースプログラム中の未定義項目を検出
するプログラムエラー診断技術に関する。
FORTRAN等の高級言語で記述されたソースプ
ログラムのコンパイラ処理方式に関するものであ
り、特にソースプログラム中の未定義項目を検出
するプログラムエラー診断技術に関する。
一般に、プログラムが何らかの演算を含んでい
る場合、その演算の各項目はそれぞれプログラム
中で定義されていることが必要である。演算項目
が未定義であれば、その演算を実行することがで
きない。たとえば関数の引数が変数である場合に
は、その引数の値が決定していなければ、その関
数の演算を実行することはできない。
る場合、その演算の各項目はそれぞれプログラム
中で定義されていることが必要である。演算項目
が未定義であれば、その演算を実行することがで
きない。たとえば関数の引数が変数である場合に
は、その引数の値が決定していなければ、その関
数の演算を実行することはできない。
従来は、ソースプログラムのコンパイラ処理に
おいて、このような未定義項目の検出が行なわれ
ており、未定義項目がある場合には、実行時にエ
ラー警告の診断メツセージが出力されるようにし
ているのが普通である。次に未定義項目を含むプ
ログラムの1例を示す。
おいて、このような未定義項目の検出が行なわれ
ており、未定義項目がある場合には、実行時にエ
ラー警告の診断メツセージが出力されるようにし
ているのが普通である。次に未定義項目を含むプ
ログラムの1例を示す。
READ*、ITEM
IF(ITEM.EQ.0)AVAL=1.0
BVAL=AVAL+200.0 ……
END
このときITEMに入力した数値が0以外なら
ば、AVALの値は未定義である。未定義の
AVALをで使用するとBVALを不安となる。
よつてAVALが未定義のままを実行する場合、
警告の診断メツセージを出力する。
ば、AVALの値は未定義である。未定義の
AVALをで使用するとBVALを不安となる。
よつてAVALが未定義のままを実行する場合、
警告の診断メツセージを出力する。
このため従来は、第6図に示すように、コンパ
イラ処理の際、ソースプログラムの解析処理中で
未定義項目の探査を行ない、未定義項目があると
き未定義項目検査用の中間言票を含む中間言票列
を出力していた。
イラ処理の際、ソースプログラムの解析処理中で
未定義項目の探査を行ない、未定義項目があると
き未定義項目検査用の中間言票を含む中間言票列
を出力していた。
中間言票は2項演算形式、すなわち2つの入力
オペランドと、その間で行なう演算操作(オペレ
ーシヨン)の種別と、演算結果のオペランドとを
表示する。中間言票形式の1例を第7図に示す。
オペランドと、その間で行なう演算操作(オペレ
ーシヨン)の種別と、演算結果のオペランドとを
表示する。中間言票形式の1例を第7図に示す。
第7図において、TCODEは言票コードを表わ
し、OP−1、OP−2、OP−3はそれぞれ第1、
第2、第3のオペランドを表わす。この形式は、
OP−2、OP−3との間にTCODEで示される演
算操作を施し、その結果をOP−3とすることを
示している。たとえばソースプログラム“A=B
−C”の中間言票は、 となる。これは、OP−1のAにOP−2のBから
OP−3のCを減算した結果を代入する操作を表
わす。
し、OP−1、OP−2、OP−3はそれぞれ第1、
第2、第3のオペランドを表わす。この形式は、
OP−2、OP−3との間にTCODEで示される演
算操作を施し、その結果をOP−3とすることを
示している。たとえばソースプログラム“A=B
−C”の中間言票は、 となる。これは、OP−1のAにOP−2のBから
OP−3のCを減算した結果を代入する操作を表
わす。
ここでOP−2のBまたは、OP−3のCが変数
である場合には、未定義項目と判定し、この中間
言票の前に、実行時に未定義であるか否かを検出
するロードモジユールを作成するための未定義項
目検査用中間言票を挿入する。
である場合には、未定義項目と判定し、この中間
言票の前に、実行時に未定義であるか否かを検出
するロードモジユールを作成するための未定義項
目検査用中間言票を挿入する。
しかし、FORTRANコンパイラにおいて、上
記のような実行時に未定義である項目を検査でき
るロードモジユールを作成する場合には、従来そ
の項目がその文で定義されているかあるいは参照
されているかをソースのみに依存して識別してお
り、文の前後関係や種別等の多くの条件を考慮す
るため、かなりの困難があつた。
記のような実行時に未定義である項目を検査でき
るロードモジユールを作成する場合には、従来そ
の項目がその文で定義されているかあるいは参照
されているかをソースのみに依存して識別してお
り、文の前後関係や種別等の多くの条件を考慮す
るため、かなりの困難があつた。
たとえば、代入文の右辺は検査すべきである
が、左辺は検査すべきでないこと、あるいは組込
み関係LENを除く組込み関数の実引数は検査す
べきであるが、外部手続きの実引数は検査すべき
でないこと、演算のオペラントやIF文の演算式
に現われた実体を検査すべきこと、等々の多くの
条件を考慮しなければならなかつた。
が、左辺は検査すべきでないこと、あるいは組込
み関係LENを除く組込み関数の実引数は検査す
べきであるが、外部手続きの実引数は検査すべき
でないこと、演算のオペラントやIF文の演算式
に現われた実体を検査すべきこと、等々の多くの
条件を考慮しなければならなかつた。
第8図に、前記したプログラム例について、こ
のようなソースプログラム解析処理を行なつた結
果を示す。
のようなソースプログラム解析処理を行なつた結
果を示す。
従来のコンパイラ処理では、未定義項目の識別
をすべてソースプログラムに依存して行なつてい
るため、複雑な処理を伴い、重複または欠落を生
じる可能性が高く、論理性、信頼性に欠け、バグ
を包含する可能性があつた。
をすべてソースプログラムに依存して行なつてい
るため、複雑な処理を伴い、重複または欠落を生
じる可能性が高く、論理性、信頼性に欠け、バグ
を包含する可能性があつた。
本発明は、コンパイラ処理時の未定義項目検査
を、ソースプログラムに直接依存して行なうので
はなく、ソースプログラム解析により生成された
中間言票に依存して行なうことにより、未定義項
目の検査を容易確実にしたものである。すなわ
ち、中間言票では、演算の種別ごとにオペランド
が対応づけられているため、検査が必要なオペラ
ンドの選択が容易である点を利用するものであ
る。
を、ソースプログラムに直接依存して行なうので
はなく、ソースプログラム解析により生成された
中間言票に依存して行なうことにより、未定義項
目の検査を容易確実にしたものである。すなわ
ち、中間言票では、演算の種別ごとにオペランド
が対応づけられているため、検査が必要なオペラ
ンドの選択が容易である点を利用するものであ
る。
第1図に、本発明の原理的構成を示す。
図において、10はデータ処理装置、11はソ
ースプログラムフアイル、12はコンパイラ処理
部、13は第1中間言票フアイル、14は第2中
間言票フアイル、15はオブジエクトフアイル、
121はソースプログラム解析部、122は検査
項目テーブル、123は未定義項目検査部、12
4はコード生成部である。
ースプログラムフアイル、12はコンパイラ処理
部、13は第1中間言票フアイル、14は第2中
間言票フアイル、15はオブジエクトフアイル、
121はソースプログラム解析部、122は検査
項目テーブル、123は未定義項目検査部、12
4はコード生成部である。
ソースプログラムフアイル11からソースプロ
グラムがコンパイラ処理部に読み込まれると、そ
のソースプログラム解析部121において字句解
析、構文解析を行ない、記号表等の制御表を作成
するとともに、中間言票列を生成し、第1中間言
票フアイル13に格納する。この段階では未定義
項目の探査は行なわず、したがつて、未定義項目
検査用の中間言票の挿入も行なわれない。
グラムがコンパイラ処理部に読み込まれると、そ
のソースプログラム解析部121において字句解
析、構文解析を行ない、記号表等の制御表を作成
するとともに、中間言票列を生成し、第1中間言
票フアイル13に格納する。この段階では未定義
項目の探査は行なわず、したがつて、未定義項目
検査用の中間言票の挿入も行なわれない。
中間言票は、演算操作(オペレーシヨン)の種
別を表わす言票コードTCODEと演算項目とオペ
ランドOP−1、OP−2、OP−3で構成される。
別を表わす言票コードTCODEと演算項目とオペ
ランドOP−1、OP−2、OP−3で構成される。
検査項目テーブル122は、中間言票の言票コ
ードTCODEの種別ごとに未定義項目の検査の
要/不要を示したテーブルであり、一種の辞書的
機能を果す。
ードTCODEの種別ごとに未定義項目の検査の
要/不要を示したテーブルであり、一種の辞書的
機能を果す。
第2図は、検査項目テーブル122の構成例を
示したものであり、言票コードTCODEごとに、
第2オペランドOP−2と第3オペランドOP−3
とがそれぞれ未定義検査対象となるか否かを○、
×で表わしている。ここで、第1オペランドOP
−1が示されていないのは、第1オペランドOP
−1が演算結果のオペランドであつて、未定義に
はなりえないからである。
示したものであり、言票コードTCODEごとに、
第2オペランドOP−2と第3オペランドOP−3
とがそれぞれ未定義検査対象となるか否かを○、
×で表わしている。ここで、第1オペランドOP
−1が示されていないのは、第1オペランドOP
−1が演算結果のオペランドであつて、未定義に
はなりえないからである。
未定義項目検査部123は、第1中間言票フア
イル13から中間言票列を読み出し、個々の中間
言票ごとに検査項目テーブル122を参照し、未
定義項目の検査が必要な項目(オペランド)を摘
出し、それについて定義の有無を検査する。
イル13から中間言票列を読み出し、個々の中間
言票ごとに検査項目テーブル122を参照し、未
定義項目の検査が必要な項目(オペランド)を摘
出し、それについて定義の有無を検査する。
未定義項目検査部123は、検査の結果、未定
義であることが識別された場合、その中間言票の
直前に、実行時における未定義項目検査用の中間
言票を挿入して、第2中間言票フアイル14に出
力する。
義であることが識別された場合、その中間言票の
直前に、実行時における未定義項目検査用の中間
言票を挿入して、第2中間言票フアイル14に出
力する。
このようにして、第1中間言票フアイル13に
格納されている中間言票列の全てについて未定義
項目検査が行なわれ、未定義項目を含む各中間言
票の直前に未定義項目検査用の中間言票を含む中
間言票列が第2中間言票フアイル14に格納され
る。
格納されている中間言票列の全てについて未定義
項目検査が行なわれ、未定義項目を含む各中間言
票の直前に未定義項目検査用の中間言票を含む中
間言票列が第2中間言票フアイル14に格納され
る。
次にコード生成部124は、第2中間言票フア
イル14の中間言票列に基づいてコードを生成
し、各種のテーブルとともに、オブジエクトをオ
ブジエクトフアイル15に出力する。
イル14の中間言票列に基づいてコードを生成
し、各種のテーブルとともに、オブジエクトをオ
ブジエクトフアイル15に出力する。
本発明においては、中間言票に基づいて未定義
検査対象の項目(オペランド)を選択しているた
め、検査対象項目を確実にかつ効率的に絞ること
ができ、無駄な重複や検査や欠落が生じる可能性
を小さくすることができる。
検査対象の項目(オペランド)を選択しているた
め、検査対象項目を確実にかつ効率的に絞ること
ができ、無駄な重複や検査や欠落が生じる可能性
を小さくすることができる。
なお未定義検査の対象が文字型の変数、配列要
素又は部分列であるときには、ソース解析後では
検査に必要な情報が得られないため、上記の方法
を適用することができない。そこでこの場合は、
ソースの解析中に、値を渡す特定の中間言票を出
力する時、その実体を未定義検査の対象とする。
これは、特定の中間言票が出力されるかどうかだ
けに依存し、ソースには依存しない。
素又は部分列であるときには、ソース解析後では
検査に必要な情報が得られないため、上記の方法
を適用することができない。そこでこの場合は、
ソースの解析中に、値を渡す特定の中間言票を出
力する時、その実体を未定義検査の対象とする。
これは、特定の中間言票が出力されるかどうかだ
けに依存し、ソースには依存しない。
第3図は、前述したプログラム例
READ*、ITEM
IF(ITEM.EQ.0)AVAL=1.0
BVAL=AVAL+200.0 ……
END
に本発明を適用したときの実施例を示す。なお図
中に示されている参照番号は、第1図におけるも
のがそのまま使用されている。
中に示されている参照番号は、第1図におけるも
のがそのまま使用されている。
コンパイラ処理部12のソースプログラム解析
部121は、ソースプログラム中の演算式 BVAL=AVAL+200.0 を解析し、加算(TCODE=ADD)の中間言票
を出力する。
部121は、ソースプログラム中の演算式 BVAL=AVAL+200.0 を解析し、加算(TCODE=ADD)の中間言票
を出力する。
この結果、第1中間言票フアイル13には、
TCODE OP−1 OP−2 OP−3
‖ ‖ ‖ ‖
ADD BVAL AVAL 200.0
が格納される。
次に、未定義項目検査部123は、第1中間言
票フアイル13から上記の中間言票を読み出し
て、言票コードTCODE=ADDを識別し、これ
を用いて検査項目テーブル122を参照して、
TCODE=ADDのエントリの情報から、第2お
よび第3のオペランドOP−2、OP−3が検査対
象項目であることを知る。しかし、この場合OP
−3は定数(=200.0)であり、明らかに値が決
定しているので、変数であるOP−2を未定義項
目と判定し、未定義項目検査用の中間言票を挿入
する。この場合、未定義項目検査用の中間言票の
言票コードTCODEは、UNDEF(未定義)であ
る。
票フアイル13から上記の中間言票を読み出し
て、言票コードTCODE=ADDを識別し、これ
を用いて検査項目テーブル122を参照して、
TCODE=ADDのエントリの情報から、第2お
よび第3のオペランドOP−2、OP−3が検査対
象項目であることを知る。しかし、この場合OP
−3は定数(=200.0)であり、明らかに値が決
定しているので、変数であるOP−2を未定義項
目と判定し、未定義項目検査用の中間言票を挿入
する。この場合、未定義項目検査用の中間言票の
言票コードTCODEは、UNDEF(未定義)であ
る。
このようにして、未定義項目検査部123から
は、第2中間言票フアイル14内に図示されてい
る1対の中間言票が出力される。
は、第2中間言票フアイル14内に図示されてい
る1対の中間言票が出力される。
ところで、未定義項目が配列、部分列または文
字型変数の場合には、必要な情報がソースプログ
ラムの解析中でないと得られないため、この段階
で、次のように未定義項目検査用の中間言票を出
力する。
字型変数の場合には、必要な情報がソースプログ
ラムの解析中でないと得られないため、この段階
で、次のように未定義項目検査用の中間言票を出
力する。
未定義項目が配列要素の場合には、配列要素
の値を引用する中間言票と、アドレスを引用す
る中間言票とがあるので、ソース解析中、配列
要素の値を引用する中間言票を出力するとき、
同時に未定義項目検査用言票コードをもつ中間
言票を出力する。
の値を引用する中間言票と、アドレスを引用す
る中間言票とがあるので、ソース解析中、配列
要素の値を引用する中間言票を出力するとき、
同時に未定義項目検査用言票コードをもつ中間
言票を出力する。
未定義項目が部分列、文字変数の場合には、
文字部分列の値を引用する中間言票と、アドレ
スを引用する中間言票があるので、ソース解析
中、文字部分列の値を引用する中間言票を出力
するとき、未定義項目検査用の中間言票を出力
する。
文字部分列の値を引用する中間言票と、アドレ
スを引用する中間言票があるので、ソース解析
中、文字部分列の値を引用する中間言票を出力
するとき、未定義項目検査用の中間言票を出力
する。
第4図は、以上の処理を行なうためにソースプ
ログラム解析部を変形した実施例を示す。
ログラム解析部を変形した実施例を示す。
第5図のaは、次のプログラム例
REAL ARY(5)
READ*、ITEM
IF(ITEM.EQ.0)ARY(3)=1.0
BBB=ARY(3)+200.0
END
について第4図のソースプログラム解析部により
解析を行なつた結果を示す。また第5図の(b)は、
本実施例と対照させるために、従来方式のソース
に依存して未定義項目検査用の中間言票を出力す
る処理を行なつた場合の結果を示す。
解析を行なつた結果を示す。また第5図の(b)は、
本実施例と対照させるために、従来方式のソース
に依存して未定義項目検査用の中間言票を出力す
る処理を行なつた場合の結果を示す。
本発明によれば、FORTRANコンパイラ等の
処理において、未定義項目検査用の中間言票挿入
を適確に行なうことができるため、重複や欠落の
ない効率的な診断処理を可能にする。
処理において、未定義項目検査用の中間言票挿入
を適確に行なうことができるため、重複や欠落の
ない効率的な診断処理を可能にする。
第1図は本発明の原理的構成を示す概念図、第
2図は検査項目テーブルの説明図、第3図は本発
明の1実施例の構成図、第4図は第3図における
ソースプログラム解析部の実施例構成図、第5図
の(a)および(b)はそれぞれ本発明と従来例とにおけ
るソースプログラム解析部の処理例を示す説明
図、第6図は未定義項目検査用中間言票出力処理
の説明図、第7図は中間言票形式の説明図、第8
図は従来のソースプログラム解析処理例の説明図
である。 第1図中、10:データ処理装置、11:ソー
スプログラムフアイル、12:コンパイラ処理
部、121:ソースプログラム解析部、122:
検査項目テーブル、123:未定義項目検査部、
124:コード生成部。
2図は検査項目テーブルの説明図、第3図は本発
明の1実施例の構成図、第4図は第3図における
ソースプログラム解析部の実施例構成図、第5図
の(a)および(b)はそれぞれ本発明と従来例とにおけ
るソースプログラム解析部の処理例を示す説明
図、第6図は未定義項目検査用中間言票出力処理
の説明図、第7図は中間言票形式の説明図、第8
図は従来のソースプログラム解析処理例の説明図
である。 第1図中、10:データ処理装置、11:ソー
スプログラムフアイル、12:コンパイラ処理
部、121:ソースプログラム解析部、122:
検査項目テーブル、123:未定義項目検査部、
124:コード生成部。
Claims (1)
- 【特許請求の範囲】 1 コンパイラ処理を行なうデータ処理装置にお
いて、ソースプログラムを解析し、演算操作種別
とその演算項目とからなる中間言票を作成するソ
ースプログラム解析部121と、 中間言票の演算操作種別ごとに、その演算項目
が未定義項目の検査を要するか否かを表わす情報
が登録された検査項目テーブル122と、 ソースプログラム解析部121が作成した中間
言票ごとにその演算操作種別により検査項目テー
ブル122を参照し、未定義検査を要する演算項
目を選択して、それについて定義の有無を調べ、
未定義であれば当該中間言票の前に、実行時に未
定義項目検査を行なう中間言票を挿入する未定義
項目検査部123とをそなえ、 未定義項目検査部123から出力された中間言
票列に基づいてオブジエクトを生成することを特
徴とするコンパイラ処理方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP28012385A JPS62138932A (ja) | 1985-12-12 | 1985-12-12 | コンパイラ処理方式 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP28012385A JPS62138932A (ja) | 1985-12-12 | 1985-12-12 | コンパイラ処理方式 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPS62138932A JPS62138932A (ja) | 1987-06-22 |
JPH046019B2 true JPH046019B2 (ja) | 1992-02-04 |
Family
ID=17620653
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP28012385A Granted JPS62138932A (ja) | 1985-12-12 | 1985-12-12 | コンパイラ処理方式 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPS62138932A (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH03105628A (ja) * | 1989-09-20 | 1991-05-02 | Fujitsu Ltd | 未定義変数引用検査処理方法 |
-
1985
- 1985-12-12 JP JP28012385A patent/JPS62138932A/ja active Granted
Also Published As
Publication number | Publication date |
---|---|
JPS62138932A (ja) | 1987-06-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5132972A (en) | Assembly language programming potential error detection scheme sensing apparent inconsistency with a previous operation | |
CN109359055B (zh) | 一种数据测试的方法和设备 | |
US5822589A (en) | Method for locating errors in a computer program | |
JPH046019B2 (ja) | ||
JP3094475B2 (ja) | プログラム検証方法 | |
JPH10293683A (ja) | プログラムの比較解析装置、プログラムの比較解析方法、及びプログラムの比較解析プログラムを記録した機械読み取り可能な記録媒体 | |
JPH01177165A (ja) | 配列の定義/引用関係検査方式 | |
JPH1031584A (ja) | ソフトウエアの検証自動化装置 | |
JPH08272623A (ja) | プログラム解析装置及びプログラム解析方法 | |
JP2728504B2 (ja) | 入力命令文検査装置 | |
Liberty | Sams Teach Yourself C++ in 10 Minutes | |
JP3165105B2 (ja) | プログラムのトレーサ、コンパイラ及びリンカー | |
JPS60179847A (ja) | 実配列および仮配列間の整合性チエツク方式 | |
JP3167386B2 (ja) | プログラム自動並列化方法 | |
JPH03260865A (ja) | ベクトル化処理方式 | |
EP0526054A2 (en) | Monitoring execution of a computer program to provide test coverage analysis | |
KR0168929B1 (ko) | 칠 전위처리기의 전위처리 방법 | |
JPH0340137A (ja) | 組込み手続き実行時のアーギュメントの値の正当性の検査に対する範囲指定方式 | |
JPH01261737A (ja) | 言語プロセッサの検査自動管理方式 | |
JP3047418B2 (ja) | ベクトル化処理方式 | |
JPH04205355A (ja) | プログラム変数の使用検査装置 | |
JPH04162149A (ja) | 電子計算機 | |
JPS62118448A (ja) | 不定値参照の検出方式 | |
JP2001147832A (ja) | ソースプログラム対応表示方式 | |
JPH05197589A (ja) | テストプログラム自動生成方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
LAPS | Cancellation because of no payment of annual fees |