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

コンパイラ装置

Info

Publication number
JP2502128B2
JP2502128B2 JP63166533A JP16653388A JP2502128B2 JP 2502128 B2 JP2502128 B2 JP 2502128B2 JP 63166533 A JP63166533 A JP 63166533A JP 16653388 A JP16653388 A JP 16653388A JP 2502128 B2 JP2502128 B2 JP 2502128B2
Authority
JP
Japan
Prior art keywords
argument
area
value
processing
processing procedure
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 - Fee Related
Application number
JP63166533A
Other languages
English (en)
Other versions
JPH0215336A (ja
Inventor
誘二 辻森
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

Landscapes

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

Description

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

Claims (2)

    (57)【特許請求の範囲】
  1. 【請求項1】ソースプログラムからオブジェクトプログ
    ラムを生成するコンパイラ装置において, ソースプログラム中にある処理手続き内で,他の処理手
    続きが指定され,該他の処理手続きの引数として指定さ
    れている領域について,当該処理手続き内で指定されて
    いる複数の引数間で領域の重複があるか否かを判定する
    手段と, 前記判定する手段で重複する領域があると判定された場
    合に,前記重複する領域内の値について,前記他の処理
    手続きを呼び出した後の値が呼び出す前の値から変更さ
    れているかを判定する処理のためのオブジェクトと,変
    更されていると判定された場合にエラーメッセージを出
    力する処理を行うオブジェクトとを生成するオブジェク
    ト生成手段とを備えた ことを特徴とするコンパイラ装置。
  2. 【請求項2】前記オブジェクト生成手段が生成する前記
    重複する領域内の値が変更されているかを判定する処理
    のためのオブジェクトは, 前記他の処理手続きの引数として指定された領域の各引
    数ごとの大きさに応じた別の各引数が重複しない領域
    に,対応する引数の元の内容を複写する処理のコード
    と, 前記複写した別の領域を引数として,前記他の処理手続
    きを呼び出す処理のコードと, 前記呼び出した他の処理手続きからの復帰時に,前記他
    の処理手続きで引数として使用した領域内の値を,各引
    数ごとに対応する元の引数の領域に複写し,その複写後
    の元の引数の領域の値と前記他の処理手続きで引数とし
    て使用した領域内の値とを比較する処理のコードとを有
    する ことを特徴とする請求項1記載のコンパイラ装置。
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 JPH0215336A (ja) 1990-01-19
JP2502128B2 true 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)

Families Citing this family (1)

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

Family Cites Families (2)

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

Also Published As

Publication number Publication date
JPH0215336A (ja) 1990-01-19

Similar Documents

Publication Publication Date Title
JP2753500B2 (ja) 多重アーキテクチャ環境内で特にコードのデバッグを行う改良したソフトウェア・デバッグ・システムと方法
US5636366A (en) System and method for preserving instruction state-atomicity for translated program
US5613098A (en) Testing and debugging new Y architecture code on existing X architecture system by using an environment manager to switch between direct X code execution and simulated Y code execution
US20040268315A1 (en) System and method for processing breakpoint events in a child process generated by a parent process
US5680584A (en) Simulator system for code execution and debugging within a multi-architecture environment
Davidson et al. An overview of firmware engineering
JPH03188535A (ja) プログラム・エラー検出方法
JP2502128B2 (ja) コンパイラ装置
KR950012113B1 (ko) 멀티 아키텍춰 환경내의 다중 코드 실행 및 디버깅 시스템에서 코드 인터페이스 자케팅에 특히 적합한 크로스-도메인 명령 호출 및 데이타 참조를 검출하기 위한 시스템 및 방법
JP3102568B2 (ja) ソフトウエア開発装置
JPH0546444A (ja) ログ機能付きデバツカ
US7627859B2 (en) Method for configuring non-script language library files to be run as scripts
JPH0264826A (ja) マルチプロセッサプログラムデバッグ方式
Krukov et al. Debugging DVM programs
JPS6143347A (ja) ベクトル命令シミユレ−シヨン方法
JPS60167038A (ja) マイクロプロセツサ
JPH04324525A (ja) プログラム移植支援装置
JPS58169637A (ja) コンパイル処理方式
JPS6198455A (ja) デバイスシミユレ−ト方式
Krantz Ada development system technical and performance requirements (with rationale)
JPH0268631A (ja) コンパイラシステム
JPH0157375B2 (ja)
JPH02244337A (ja) データ処理装置の試験方式
JPH077347B2 (ja) 言語処理系における擬似入出力処理方式
JPS63223930A (ja) 専用プロセツサのプログラムのシミユレ−シヨン方式

Legal Events

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