JPS62138932A - コンパイラ処理方式 - Google Patents

コンパイラ処理方式

Info

Publication number
JPS62138932A
JPS62138932A JP28012385A JP28012385A JPS62138932A JP S62138932 A JPS62138932 A JP S62138932A JP 28012385 A JP28012385 A JP 28012385A JP 28012385 A JP28012385 A JP 28012385A JP S62138932 A JPS62138932 A JP S62138932A
Authority
JP
Japan
Prior art keywords
undefined
item
inspection
intermediate document
source program
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.)
Granted
Application number
JP28012385A
Other languages
English (en)
Other versions
JPH046019B2 (ja
Inventor
Mie Unate
宇那手 美恵
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 JP28012385A priority Critical patent/JPS62138932A/ja
Publication of JPS62138932A publication Critical patent/JPS62138932A/ja
Publication of JPH046019B2 publication Critical patent/JPH046019B2/ja
Granted legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 〔概要〕 コンパイラ処理時に中間言票に基づいて未定義項目を判
定し、検査用の中間言票を挿入して未定義項目検査用の
ロードモジュールを作成し、実行時に未定義項目を検出
したときエラー警告を行な〔産業上の利用分野〕 本発明は、データ処理装置におけるFORTRAN等の
高級言語で記述されたソースプログラムのコンパイラ処
理方式に関するものであり、特にソースプログラム中の
未定義項目を検出するプログラムエラー診新技術に関す
る。
〔従来の技術〕
一般に、プログラムが何らかの演算を含んでいる場合、
その演算の各項目はそれぞれプログラム中で定義されて
いることが必要である。演算項目が未定義であれば、そ
の演算を実行することができない。たとえば関数の引数
が変数である場合には、その引数の値が決定していなけ
れば、その関数の演算を実行することはできない。
従来は、ソースプログラムのコンパイラ処理において、
このような未定義項目の検出が行なわれており、未定義
項目がある場合には、実行時にエラー警告の診断メツセ
ージが出力されるようにしているのが普通である。次に
未定義項目を含むプログラムの1例を示す。
〔例)READ*、ITEM 1F (ITEM、EQ、0)AVAL=1.0BVA
L==AVAL+200.0   ・・・・・・・・・
■ND このときI TEMに入力した数値が0以外ならば、A
VALの値は未定義である。未定義のAVALを■で使
用するとBVALも不定となる。よってAVALが未定
義のまま■を実行する場合。
警告の診断メツセージを出力する。
このため従来は、第6図に示すように、コンパイラ処理
の際、ソースプログラムの解析処理中で未定義項目の探
査を行ない、未定義項目があるとき未定義項目検査用の
中間言葉を含む中間言葉列を出力していた。
中間言葉は2項演算形式、すなわち2つの入力オペラン
ドと、その間で行なう演算操作(オペレーション)の種
別と、演算結果のオペランドとを表示する。中間言葉形
式の1例を第7図に示す。
第7図において、TCODEは言葉コードを表わし、0
P−1,0P−2,0P−3はそれぞれ第1.第2.第
3のオペランドを表わす。この形式は、0P−2,0P
−3との間にTCODEで示される演算操作を施し、そ
の結果を0P−3とすることを示している。たとえばソ
ースプログラム″A=B−C″の中間言葉は。
TC’ODE  0P−10P−20P−311II 
      II       IIとなる。これは、
0P−1のAに0P−2のBがら0P−3のCを減算し
た結果を代入する操作を表わす。
、:、、:で0P−1)Bまたは、0P−3(7)Cが
変数である場合には、未定義項目と判定し、この中間言
葉の前に、実行時に未定義であるが否かを検出するロー
ドモジュールを作成するための未定義項目検査用中間言
葉を挿入する。
しかし、FORTRANコンパイラにおいて。
上記のような実行時に未定義である項目を検査できるロ
ードモジュールを作成する場合には、従来その項目がそ
の文で定義されているがあるいは参照されているかをソ
ースのみに依存して識別しており1文の前後関係や種別
等の多くの条件を考慮するため、かなりの困難があった
たとえば2代入文の右辺は検査すべきであるが。
左辺は検査すべきでないこと、あるいは組込み関数LE
Nを除く組込み関数の実引数は検査すべきであるが、外
部手続きの実引数は検査すべきでないこと、演算のオペ
ランドやIF文の演算式に現われた実体を検査すべきこ
と2等々の多くの条件を考慮しなければならなかった。
第8図に、前2記したプログラム例について、このよう
なソースプログラム解析処理を行なった結果を示す。
〔発明が解決しようとする問題点〕
従来のコンパイラ処理では、未定義項目の識別をすべて
ソースプログラムに依存して行なっているため、複雑な
処理を伴い1重複または欠落を生じる可能性が高く、論
理性、信頬性に欠け、バグを包含する可能性があった。
〔問題点を解決するための手段〕
本発明は、コンパイラ処理時の未定義項目検査を、ソー
スプログラムに直接依存して行なうのではな(、ソース
プログラム解析により生成された中間言葉に依存して行
なうことにより、未定義項目の検査を容易確実にしたも
のである。すなわち1巾間言票では、演算の種別ごとに
オペランドが対応づけられているため、検査が必要なオ
ペランドの選択が容易である点を利用するものである。
第1図に1本発明の原理的構成を示す。
図において、10はデータ処理装置、11はソースプロ
グラムファイル、12はコンパイラ処理部、13は第1
中間言票ファイル、14は第2中間言票ファイル、15
はオブジェクトファイル。
121はソースプログラム解析部、122は検査項目テ
ーブル、123は未定義項目検査部、124はコード生
成部である。
ソースプログラムファイルIIからソースプログラムが
コンパイラ処理部に読み込まれると、そのソースプログ
ラム解析部121において字句解析、構文解析を行ない
、記号表等の制御表を作成するとともに、中間言葉列を
生成し、第1中間言票ファイル13に格納する。この段
階では未定義項目の探査は行なわず、したがって、未定
義項目検査用の中間言葉の挿入も行なわれない。
中間言葉は5演算操作(オペレーション)の種別を表わ
す言葉コードTCODEと演算項目のオペランド0P−
1,0P−2,0P−3で構成される。
検査項目テーブル122は、中間言葉の言葉コードTC
ODEの種別ごとに未定義項目の検査の要/不要を示し
たテーブルであり、一種の辞書的機能を果す。
第2図は、検査項目テーブル122の構成例を示したも
のであり、言葉コードTCODEごとに。
第2オペランド0P−2と第3オペランドoP−3とが
それぞれ未定義検査対象となるか否かを○。
×で表わしている。ここで、第1オペランドoP−1が
示されていないのは、第1オペランド0P−1が演算結
果のオペランドであって、未定義にはなりえないからで
ある。
未定義項目検査部123は、第1中間言票ファイル13
から中間言葉列を読み出し2個々の中間言葉ごとに検査
項目テーブル122を参照し、未定義項目の検査が必要
な項目(オペランド)を摘出し、それについて定義の有
無を検査する。
未定義項目検査部123は、検査の結果、未定義である
ことが識別された場合、その中間言葉の直前に、実行時
における未定義項目検査用の中間言葉を挿入して、第2
巾間言票ファイル14に出力する。
このようにして、第1中間言票ファイル13に格納され
ている中間言葉列の全てについて未定義項目検査が行な
われ5未定義項目を含む各中間言葉の直前に未定義項目
検査用の中間言葉を含む中間言葉列が第2中間言票ファ
イル14に格納される。
次にコード生成部124は、第2中間言票ファイルI4
の中間言葉列に基づいてコードを生成し。
各種のテーブルとともに、オブジェクトをオブジェクト
ファイル15に出力する。
〔作用〕
本発明においでは、中間言葉に基づいて未定義検査対象
の項目(オペランド)を選択しているため、検査対象項
目を確実にかつ効率的に絞ることができ、無駄な重複や
検査や欠落が生じる可能性を小さくすることができる。
なお未定義検査の対象が文字型の変数、配列要素又は部
分列であるときには、ソース解析後では検査に必要な情
報が得られないため、″上記の方法を適用することがで
きない。そこでこの場合は。
ソースの解析中に、値を渡す特定の中間言葉を出力する
時、その実体を未定義検査の対象とする。
これは、特定の中間言葉が出力されるかどうかだけに依
存し、ソースには依存しない。
〔実施例〕
第3図は、前述したプログラム例 READ*、ITEM IF (ITEM、EQ、O’)AVAL=1.0BV
AL=AVAL+200.0   −−−−−−−−−
■ND に本発明を適用したときの実施例を示す。なお図中に示
されている参照番号は、第1図におけるものがそのまま
使用されている。
コンパイラ処理部12のソースプログラム解析部121
は、ソースプログラム中の演算式■BVAL=AVAL
+200.0 をj1¥折し、加算(TCODE=ADD)の中間言誤
を出力する。
この結果、第1中間言票ファイル13には。
TCODE  0P−10P−20P−311II  
   II     IIA D D   B V A
 L  A V A L   200.0が格納される
次に、未定義項目検査部123は、第1中間言票ファイ
ル13から上記の中間言誤を読み出して。
言葉コードTCODE=ADDを識別し、これを用いて
検査項目テーブル122を参照して、 TCODE=A
DDのエントリの情報から、第2および第3のオペラン
ド0P−2,0P−3が検査対象項目であることを知る
。しかし、この場合0P−3は定数(=200.0)で
あり、明らかに値が決定しているので、変数である0P
−2を未定義項目と判定し、未定義項目検査用の中間言
誤を挿入する。この場合、未定義項目検査用の中間言誤
の言葉コードTCODEは、UNDEF (未定義)で
ある。
このようにして、未定義項目検査部123からは、第2
中間言票ファイル14内に図示されている1対の中間言
誤が出力される。
ところで、未定義項目が配列1部分列または文字型変数
の場合には、必要な情報がソースプログラムの解析中で
ないと得られないため、この段階で2次のように未定義
項目検査用の中間言誤を出力する。
■ 未定義項目が配列要素の場合には、配列要素の値を
引用する中間言誤と、アドレスを引用する中間言誤とが
あるので、ソース解析中、配列要素の値を引用する中間
言誤を出力するとき。
同時に未定義項目検査用言票コードをもつ中間言誤を出
力する。
■ 未定義項目が部分列1文字変数の場合には。
文字部分列の値を引用する中間言誤と2アドレスを引用
する中間言誤があるので、ソース解析中1文字部分列の
値を引用する中間言誤を出力するとき、未定義項目検査
用の中間言誤を出力する。
第4図は5以上の処理を行なうためにソースプログラム
解析部を変形した実施例を示す。
第5図の(alは1次のプログラム例 REAL      ARY (5) READ   *、   ITEM I F (ITEM、EQ、0)ARY(3)=1.0
BBB=ARY(3)+200.0 ND について第4図のソースプログラム解析部により解析を
行なった結果を示す。また第5図の(b)は。
本実施例と対照させるために、従来方式のソースに依存
して未定義項目検査用の中間言誤を出力する処理を行な
った場合の結果を示す。
〔発明の効果〕
本発明によれば、FORTRANコンパイラ等の処理に
おいて、未定義項目検査用の中間言誤挿入を適確に行な
うことができるため2重複や欠落のない効率的な診断処
理を可能にする。
【図面の簡単な説明】
第1図は本発明の原理的構成を示す概念図、第2図は検
査項目テーブルの説明図、第3図は本発明の1実施例の
構成図、第4図は第3図におけるソースプログラム解析
部の実施例構成図、第5図の(alおよび(b)はそれ
ぞれ本発明と従来例とにおけるソースプログラム解析部
の処理例を示す説明図。 第6図は未定義項目検査用中間言誤出力処理の説明図、
第7図は中間言誤形式の説明図、第8図は従来のソース
プログラム解析処理例の説明図である。 第1図中 10:データ処理装置 11:ソースプログラムファイル l2:コンパイラ処理部 121:ソースプログラム解析部 122:検査項目テーブル 123:未定義項目検査部 124:コード生成部 特許出願人   富士通株式会社 代理人弁理士  長谷用 文 廣(外1名)9明り厘理
的構へ゛ 第 11!1 第 2 図 ソースフ107゛クヘ解打含νの実1壱Rim第 4 
図 ソースフ゛ロク”うA鼾)昨豐)のM埋イ)づ ((a
)ネイτa%、lb)ネ(東イ)づン第   5   

Claims (1)

  1. 【特許請求の範囲】 コンパイラ処理を行なうデータ処理装置において、ソー
    スプログラムを解析し、演算操作種別とその演算項目と
    からなる中間言票を作成するソースプログラム解析部(
    121)と、 中間言票の演算操作種別ごとに、その演算項目が未定義
    項目の検査を要するか否かを表わす情報が登録された検
    査項目テーブル(122)と、ソースプログラム解析部
    (121)が作成した中間言票ごとにその演算操作種別
    により検査項目テーブル(122)を参照し、未定義検
    査を要する演算項目を選択して、それについて定義の有
    無を調べ、未定義であれば当該中間言票の前に、実行時
    に未定義項目検査を行なう中間言票を挿入する未定義項
    目検査部(123)とをそなえ、未定義項目検査部(1
    23)から出力された中間言票列に基づいてオブジェク
    トを生成することを特徴とするコンパイラ処理方式。
JP28012385A 1985-12-12 1985-12-12 コンパイラ処理方式 Granted JPS62138932A (ja)

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 true JPS62138932A (ja) 1987-06-22
JPH046019B2 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)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03105628A (ja) * 1989-09-20 1991-05-02 Fujitsu Ltd 未定義変数引用検査処理方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03105628A (ja) * 1989-09-20 1991-05-02 Fujitsu Ltd 未定義変数引用検査処理方法

Also Published As

Publication number Publication date
JPH046019B2 (ja) 1992-02-04

Similar Documents

Publication Publication Date Title
Lämmel et al. Semi‐automatic grammar recovery
US8539475B2 (en) API backward compatibility checking
US9043759B1 (en) System and method for generating software unit tests simultaneously with API documentation
US9280442B1 (en) System and method for generating coverage reports for software unit tests
KR20200071413A (ko) 학습용 데이터 생성 장치, 소스 코드 오류 분석 장치 및 방법
JPS62138932A (ja) コンパイラ処理方式
Harrison et al. Fine control of demand in Haskell
Bülow Proof visualization for the lean 4 theorem prover
MacLennan The Synmac syntax macroprocessor: Introduction and manual, version 5
GB2509540A (en) Enterprise decision management
JPS59231649A (ja) コンパイルリスト出力処理方式
JPH08272623A (ja) プログラム解析装置及びプログラム解析方法
EP0526054A2 (en) Monitoring execution of a computer program to provide test coverage analysis
JPH1031584A (ja) ソフトウエアの検証自動化装置
JP2728504B2 (ja) 入力命令文検査装置
JPH01177165A (ja) 配列の定義/引用関係検査方式
Covington Some coding guidelines for Prolog
Baratta-Perez et al. Ada system dependency analyzer tool
GB2258063A (en) Monitoring execution of a computer program to provide profile analysis
JP3167386B2 (ja) プログラム自動並列化方法
Chisolm et al. The use of computer language compilers in legacy code migration
JP2005141406A (ja) コンパイラ検査システムおよび同プログラム
JPH03290740A (ja) テストデータ自動生成システム
CN111984243A (zh) 一种基于注解的通用安全检查及功能扩展方法及装置
JPS6170641A (ja) テストプログラム自動生成方法

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees