JPH0215336A - コンパイラ装置 - Google Patents

コンパイラ装置

Info

Publication number
JPH0215336A
JPH0215336A JP63166533A JP16653388A JPH0215336A JP H0215336 A JPH0215336 A JP H0215336A JP 63166533 A JP63166533 A JP 63166533A JP 16653388 A JP16653388 A JP 16653388A JP H0215336 A JPH0215336 A JP H0215336A
Authority
JP
Japan
Prior art keywords
argument
processing
area
areas
value
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
JP63166533A
Other languages
English (en)
Other versions
JP2502128B2 (ja
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 JP63166533A priority Critical patent/JP2502128B2/ja
Publication of JPH0215336A publication Critical patent/JPH0215336A/ja
Application granted granted Critical
Publication of JP2502128B2 publication Critical patent/JP2502128B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Abstract

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

Description

【発明の詳細な説明】 〔概要〕 計算機言語であるFORTRAN等の処理系において、
これまで検出されていない重複引数の値の変更エラーを
、実行時に検出できるようにした重複引数の値変更エラ
ー検出処理方法に関し。
重複引数に関する文法エラーを実行時に自動検出し、プ
ログラムのデバッグを簡単に行うことができるようにす
ることを目的とし。
プログラムの!Il訳時に、プログラム中の処理手続き
の呼び出し文で、複数の引数が指定され、それらの領域
が重複する可能性があるときに、新たな領域を動的に確
保する処理と、その領域に、対応する引数の内容を複写
する処理と、その領域を引数として、指定された処理手
続きを呼び出す処理と、呼び出した処理手続きからの復
帰時に、呼び出した処理手続きに渡した領域の内容の比
較により、領域が重複する部分について値の変更がある
か否かを判定する処理と2重複する部分の値の変更があ
るとき、エラーメッセージを出力する処理とを、翻訳結
果であるオブジェクトに組み込むように構成する。
〔産業上の利用分野〕
本発明は、計算機言語であるFOI?TRAN等の処理
系において、これまで検出されていない重複引数の値の
変更エラーを、実行時に検出できるようにした重複引数
の値変更エラー検出処理方法に関する。
〔従来の技術] 第4図は従来技術の問題点説明図である。
計算機言語であるFORTRANでは、同し手続きの2
つの異なる仮引数と結合した実引数の間で5一部または
完全に重複する部分は1手続きの実行中は変更不可であ
る。例えば。
CΔLL  SUB (A (1)、A (3))とい
うような呼び出し文では、配列A (3) 、 A(4
)、・・・は、第2仮引数と結合された引数の一部であ
るため、第1仮引数を通して変更できないし、かつ第1
仮引数と結合された引数の一部であるため、第2仮引数
を通して変更できない。なおA (1) 、 A (2
)のデータは、第1仮引数を通して変更可能である。
もし3重複部分の変更を許した場合2次のような問題が
生しる。例えば、第4図に示すようにサブルーチン呼び
出しで、実引数間に重複する部分があるとき、これをサ
ブルーチン側では、同じデータとして意識することはで
きない。従ってA(3)のデータをB(3)としてロー
ドし1次にA(3)の領域にC(1)として書き込みの
アクセスを行い、さらにB(3)へアクセスするような
処理を行ったとすると、最適化のため、B(3)のデー
タがレジスフに保持されている場合などに、実際には同
じデータであるA(3)が。
B(3)とC(1)とで異なる扱いを受けるため。
データに矛盾が生じることになる。
従って、このような実引数の重複する部分を。
手続き引用で変更する記述は2文法エラーと規定してい
る。
しかしながら、2つの異なる仮引数と結合した実引数の
間で2重複する部分があっても、変更ではなく、参照す
るだけならば、データに矛盾が生しることはないため、
コンパイル時に、呼び出し側で文法エラーとすることは
できない。
また、仮引数側で9重複した範囲に対する値の設定時に
、エラーの検出を行うことも考えられるが、技術的に実
現が複雑になるだけではなく、仮引数側でさらに他の手
続きを引用し、その先で値が定義される場合などがあり
、特に、コンパイル単位が異なる場合などには、検出が
不可能である。
そのため、従来2文法エラーとは規定しているが、コン
パイル時にそのエラーを検出して、ユーザに提示するこ
とは行っていなかった。
〔発明が解決しようとする課題〕
以上のように1重複引数に関する値の変更があるプログ
ラムの実行結果は、コンパイラによる最適化のレベルに
よって異なることがあり、エラーと規定されているが、
それをコンパイル時に検出することができないため、ユ
ーザがこのような誤り個所を検出するのは、大変な労力
を要するという問題があった。
本発明は上記問題点の解決を図り1重複引数に関する文
法エラーを実行時に自動検出し、プログラムのデバッグ
を簡単に行うことができるような手段を堤供することを
目的としている。
〔課題を解決するための手段〕
第1図は本発明の原理説明図である。
第1図に松いて、10はF ORT RA N等の計算
機言語で記述されたソースプログラム、11はCPUお
よびメモリ等からなる処理装置、12はソースプログラ
ムIOを計算機が実行できるプログラムに翻訳するコン
パイラ、13はコンパイラ12の翻訳結果であるオブジ
ェクトプログラムを表す。
本発明では、コンパイラ12は、ソースプログラムIO
の翻訳(コンパイル)時に、プログラム中に他のT−続
きを引用する呼び出し文があると複数の引数があるかど
うかを判定し、複数の引数がある場合、さらにそれらの
領域が重複する可能性があるかどうかを調べる。そして
、領域が重複する可能性がある場合1次の処理PI−P
5を。
オブジェクトプログラム13中に組み込む。
fat  領域確保処理PI 各実引数の領域の大きさを調べ、その大きさの新たな領
域を動的に確保する。
(bl  引数複写処理P2 動的に確保した各領域に、対応する引数の内容を複写す
る。
(C1呼び出し7処理Y)3 動的に確保した領域を引数として、指定された処理手続
きを呼び出す。
(dl  値変更判定処FIP4 呼び出した処理手続きからの復帰時に、呼び出した処理
手続きに渡した領域の内容の比較により領域が重複する
部分について値の変更があるか否かを判定する。
(el  メツセージ出力処理P5 重複する部分の値の変更があるとき2エラーメツセージ
を出力する。
(fl  動的領域の解放 その後、必要に応じて動的に確保した各領域を解放し2
次の通常の処理へ移る。
これらの処[PI〜P5等は、オブジェクトプログラム
13から、所定のライブラリにあらかしめ用意されてい
る処理手続きを呼び出す形で、オブジェクトプログラム
13中にM−1込むようにしてもよい。
このオブジェクトプログラム13から性成したロードモ
ジュールを実行させることにより、もし。
同し手続きの2つの異なる仮引数と結合した実引数の間
で5重複する部分についての値の変更があれば、そのエ
ラーを指摘するメツセージが出力されることになる。
〔作用〕
本発明は、引用手続き中の仮引数を使用する側で、実引
数の重複する部分の値が変更されたときに、それを検出
するのではな(、エラーの検出個所の着眼点を変更し、
引数として重複する部分が引用手続きからの復帰時に、
変更されていないかどうかを検査することにより、この
誤りを検出するようにしたものである。
そのため、処理P1により、領域を動的に確保し、そこ
に実引数を複写して、引用手続きに渡し。
復帰してから、値の変更をチエツクする。従って。
仮引数を使用する側では、従来と同様の処理でよく、呼
び出し側と呼び出される側のコンパイル単f立が違って
も2問題なくエラーを検出することができる。
〔実施例〕
第2図は本発明の一実施例、第3図は本発明の一実施例
におけるコンパイラによる処理の例を示す。
例えば、第2図(イ)に示すようなFORTRANで記
述されたメインプログラム20と、そのメインプログラ
ム20から呼び出されるサブルーチン21があったとす
る。メインプログラム2゜では、配列A(5)の定義が
あり、CALL文でA <1) 、 A (3)を各々
実引数とするサブルーチン(SUB)21の呼び出しを
行っている。実引数の引き渡しでは、アドレス情報を渡
すので。
配列のうち、 A (3)〜A(5)が重複することに
なる。この部分の値が、サブルーチン21の呼び出しに
より、変更された場合、値の保証ができないので、エラ
ーとしなければならない。
サブルーチン21では、配列B、Cを仮引数として用い
ており1手続き中で、  B (3)の参照およびC(
1)の定義を行っている。
これを実行すると、第4図で説明したような問題が発生
するが、従来方法では、そのエラーを検出することはで
きなかった。本発明では、実行時に2例えば第2図(ロ
)に示すような処理によって、エラーが検出される。
第2図(ロ)に示す処理■〜■は、メインプログラム2
0のオブジェクトプログラム中に組み込まれる処理であ
って、これにより、実行時に1次の■〜■のような処理
が行われることになる。
■ 第1引数の大きさを求め、その大きさの領域500
1を動的に確保する。同様に、第2引数の大きさを求め
、その大きさの領域5002を動的に確保する。
■ 第1引数に指定されている要素(Δ(1)〜A (
5) )を、仮の変数5OOI  (1)〜5OOr(
5)の領域に複写する。また、第2引数に指定されてい
る要素(A(3)〜A (5) ”)を、仮の変数5O
O2(1)〜3002(3)の領域に複写する。
■ 第1引数として変数5OOI、第2引数として変数
3002を指定し、サブルーチンSUBを呼び出す。す
なわち、5ooiと8002の領域をそれぞれポイント
するパラメータリストPRMを作成し、そのパラメータ
リストPRMのアドレスを所定のレジスタに設定して、
サブルーチンSUBに分岐する。
■ サブルーチンSUBから制御が戻されたならば、5
OOIの領域の内容を1元の配列Aの領域に複写する。
また、5OO2の領域の内容を。
元の配列Aにおける対応する部分に複写する。
■ SOO1の領域の内容と、処理■で更新した配列へ
の内容とが一致するかしないかを判定する。一致しない
場合1重複部分についての値の変更があることになるの
で、エラーメツセージを出力し、CALL文の使用誤り
を通知する。
■ 動的に確保した5ootと3002の領域解放を行
い、復す11後の次の処理へ移る。
このように本実施例では、それぞれの引数を仮の変数(
生成した変数)に複写し、それを実引数として引用手続
きを呼び出し、その手続きからの復帰後1元の実引数に
返却する。このとき、範囲が重複しているならば、−度
返却した値が他方の変数の複写によって破壊されるので
、・この後。
元の実引数の値と、仮の変数(生成した変数)の値との
比較によって9誤りを検出することができる。
特に2本実施例では、復帰後に1元の実引数に仮の変数
をそれぞれ返却して、比較するようにしているので、ア
ルゴリズムが簡単であると共に重複していない部分につ
いて変更していても3重複部分についての変更がなけれ
ば1 エラーとはならないような処理が、少ないステッ
プで実現されている。第1引数および第2引数の領域の
どちらが大きい場合でも、単一のアルゴリズムでエラー
の検出を行うことができる。
本発明の一実施例によるコンパイラの処理は。
例えば第3図に示すfal〜(Qlのように行われる。
fal  構文解釈の結果により、現在処理する文が。
CALL文または関数引用のどちらかであるかどうかを
判定する。CALL文または関数引用でなければ、従来
と同様な処理を続ける。
+blCALL文または関数引用であれば2コンパイラ
起動時に、デバッグオプションが指定されているかどう
かを判定する。デバッグオプションが有効でなければ、
実行時の処理を高速化するため1本発明によるエラー検
出処理の組み込みを行わない。
fcl  実引数の並びの中で、同じ名前を持つ引数が
あるかどうかを判定する。同じ名前を持つ引数がある場
合、領域が重複する可能性があるので処理(elへ移る
+d+  実引数の並びの中で、領域が同じであること
を示すEQU I VALENCE属性を持つものがあ
るかどうかを判定する。なければ、従来と同様なCAL
L文または関数引用についてのオブジェクト展開を行う
。あれば1次の処理(elを実行する。
(+11  第2図(ロ)に示す処理■〜■を実行する
オブジェクト展開を行い、値変更エラー検出処理を組み
込む。
例えば7次のような記述を可能とした言語仕様を持つ計
算機言語処理でも、同様に本発明を適用することができ
る。
CALL  S[JB  (A(1:5)、A(3:9
))ここで、A(1:5)は、Ao)からA(5)まで
のデータ、A(3:9)は、A(3)からA(9)まで
のデータを引数とすることを示している。このCALL
文では、A(3)からA(5)までの領域が引数間で重
複していることになる。
以上の実施例では、2つの引数を持つ場合について説明
したが、3以上の引数を持つ場合についても、全く同様
に本発明を適用できることは言うまでもない。
〔発明の効果〕
以上説明したように9本発明によれば1重複引数の値の
変更に関するエラーを、ユーザ自身がプログラムリスト
を追いかけて、探し出す必要はなくなり、計算機言語に
対する高度な知識がなくても、簡単に検出できるように
なる。従って、デバッグ時間の短縮が可能になるととも
に、信十■性の高いプログラムを開発することができる
ようになる。
【図面の簡単な説明】
第1図は本発明の原理説明図 第2図は本発明の一実施例 第3図は本発明の一実施例におけるコンパイラによる処
理の例。 第4図は従来技術の問題点説明図を示す。 図中、10はソースプログラム、11は処理装置、12
はコンパイラ、13はオブジェクトプログラム、PI−
P5はオブジェクトプログラム中に組み込まれた処理を
表す。

Claims (1)

  1. 【特許請求の範囲】 他の処理手続きを呼び出すときに指定された複数の引数
    に対応する領域の一部または全部が重複する場合に、そ
    の重複する領域についての値の変更を禁止する言語仕様
    を持つ計算機言語の処理システムにおける重複引数の値
    変更エラー検出処理方法であって、 前記計算機言語で記述されたプログラム(10)の翻訳
    時に、プログラム中の処理手続きの呼び出し文で、複数
    の引数が指定され、それらの領域が重複する可能性があ
    るときに、以下の処理、 その領域に対応する新たな領域を動的に確保する処理(
    P1)と、 動的に確保した領域に、対応する引数の内容を複写する
    処理(P2)と、 動的に確保した領域を引数として、指定された処理手続
    きを呼び出す処理(P3)と、 呼び出した処理手続きからの復帰時に、呼び出した処理
    手続きに渡した領域の内容の比較により、領域が重複す
    る部分について値の変更があるか否かを判定する処理(
    P4)と、重複する部分の値の変更があるとき、エラー
    メッセージを出力する処理(P5)とを、 翻訳結果であるオブジェクトに組み込むことを特徴とす
    る重複引数の値変更エラー検出処理方法。
JP63166533A 1988-07-04 1988-07-04 コンパイラ装置 Expired - Fee Related JP2502128B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP63166533A JP2502128B2 (ja) 1988-07-04 1988-07-04 コンパイラ装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP63166533A JP2502128B2 (ja) 1988-07-04 1988-07-04 コンパイラ装置

Publications (2)

Publication Number Publication Date
JPH0215336A true JPH0215336A (ja) 1990-01-19
JP2502128B2 JP2502128B2 (ja) 1996-05-29

Family

ID=15833058

Family Applications (1)

Application Number Title Priority Date Filing Date
JP63166533A Expired - Fee Related JP2502128B2 (ja) 1988-07-04 1988-07-04 コンパイラ装置

Country Status (1)

Country Link
JP (1) JP2502128B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100829985B1 (ko) * 2006-10-02 2008-05-19 박재형 직선 이동장치용 안전장치

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6173054A (ja) * 1984-09-17 1986-04-15 メデイカル テクノロジ− コ−ポレ−シヨン 試料調整用小瓶
JPS62153725A (ja) * 1985-12-25 1987-07-08 アンドレアス・スツアバドス ペースト状試料物質用の検査容器

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6173054A (ja) * 1984-09-17 1986-04-15 メデイカル テクノロジ− コ−ポレ−シヨン 試料調整用小瓶
JPS62153725A (ja) * 1985-12-25 1987-07-08 アンドレアス・スツアバドス ペースト状試料物質用の検査容器

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100829985B1 (ko) * 2006-10-02 2008-05-19 박재형 직선 이동장치용 안전장치

Also Published As

Publication number Publication date
JP2502128B2 (ja) 1996-05-29

Similar Documents

Publication Publication Date Title
US6367068B1 (en) Dynamic parsing
JP2008546086A (ja) 共有リソースのためのアクセス協調を伴うプログラムコードを変換する方法および装置
JPH11242597A (ja) Javaバイトコードデータのフローグラフの生成方法
JPH06324881A (ja) メモリデータの重なり判定機能を備えたコンパイラ装置
JPH03188535A (ja) プログラム・エラー検出方法
Blanchard et al. Logic against ghosts: comparison of two proof approaches for a list module
JPH0215336A (ja) コンパイラ装置
JPS61145649A (ja) アドレスシラブル組合せ試験方式
CN108038014B (zh) 一种图像压缩多核并行容错方法、计算机、处理器
JP3196675B2 (ja) 言語処理方式
US20040225921A1 (en) Method and system of detecting invalid function calls between segments in generating a computer program
JP2002312167A (ja) 変数の値をコンピュータに算出させるためのプログラム、コンパイルプログラム、変数値確定方法およびプログラム生成方法
KR950012113B1 (ko) 멀티 아키텍춰 환경내의 다중 코드 실행 및 디버깅 시스템에서 코드 인터페이스 자케팅에 특히 적합한 크로스-도메인 명령 호출 및 데이타 참조를 검출하기 위한 시스템 및 방법
JPH01177165A (ja) 配列の定義/引用関係検査方式
JP3246668B2 (ja) 並列処理プログラムコンパイル装置
JP3095556B2 (ja) プロセッサ機構のオンライン試験方法
Luo et al. A formal semantic definition of DEVIL
JPH0355633A (ja) モジュール間インタフェイス検査装置
Robinson National software works: overview & status
JP3311761B2 (ja) 並列処理プログラムシミュレータ
JPH04324525A (ja) プログラム移植支援装置
JPH0279127A (ja) フォートラン・コンパイル処理方式
JPS6143347A (ja) ベクトル命令シミユレ−シヨン方法
Nakamura et al. Practical design assistance at register transfer level using a data path verifier
Krukov et al. Debugging DVM programs

Legal Events

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