JPH0764800A - オブジェクトプログラム生成方法 - Google Patents

オブジェクトプログラム生成方法

Info

Publication number
JPH0764800A
JPH0764800A JP5210189A JP21018993A JPH0764800A JP H0764800 A JPH0764800 A JP H0764800A JP 5210189 A JP5210189 A JP 5210189A JP 21018993 A JP21018993 A JP 21018993A JP H0764800 A JPH0764800 A JP H0764800A
Authority
JP
Japan
Prior art keywords
area
procedure
identifier
frame
proc
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
JP5210189A
Other languages
English (en)
Inventor
Shinji Motokawa
真二 本川
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.)
Hitachi Ltd
Original Assignee
Hitachi 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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP5210189A priority Critical patent/JPH0764800A/ja
Publication of JPH0764800A publication Critical patent/JPH0764800A/ja
Pending legal-status Critical Current

Links

Landscapes

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

Abstract

(57)【要約】 【目的】フレーム領域に手続きの識別子を自動設定する
ことにより、スタックの内容の判別を容易にする。 【構成】ソースプログラム1の手続きPROC_Aのオブジェ
クトプログラムを作成する。このとき、手続きPROC_Aを
実行する場合に、スタック領域3の内に作成されるフレ
ーム領域32内に識別子321を設定するよう、コンパ
イラが自動的に手続きPROC_Aの識別名2151を定数領
域215と、フレーム領域生成時に識別子を設定する命
令を、命令領域212に設定する。 【効果】フレーム領域に手続きの識別子が自動的に設定
されることにより、スタック方式を用いて実行するプロ
グラムのデバック効率が向上する。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、高級言語のコンパイラ
の実行の際、目的プログラムの実行において、(1)手
続きの実行においてフレーム領域を利用するもの、
(2)テーブルがメモリ領域を取るもの、のプログラム
のデバック効率の向上に関する。
【0002】
【従来の技術】
(1)従来、PASCALや、Cなどの手続きを呼び出しプロ
グラムを実行する方式の高級言語に対して、プログラム
の記憶管理方式は、情報処理24巻4号(1983年)第4
42頁から第447頁において記載されているように、
手続きの実行時にフレームと呼ばれる記憶領域を、スタ
ックと呼ばれる動的記憶領域に割り当てる方式が用いら
れてきていた。以降、この方式をスタック方式と呼ぶ。
【0003】スタック方式は、後入れ先出し方式であ
り、手続きの呼び出しがある度に、スタック内にフレー
ム領域が作成され、手続きの実行が終了すると、その手
続きのフレーム領域を解放する。
【0004】この方式を用いたプログラムのデバックを
行うとき、スタック領域の情報を調べる必要がある場合
が存在する。スタックに作成されているフレームがどの
手続きのものであるのかを調査する場合、又は、ソース
プログラム上の特定の手続きのフレームを探しだす場
合、フレーム領域に設定されている制御情報の戻り先の
アドレスを順番に辿って得る情報と、ソースプログラム
より目的の手続きが呼び出される順番の回数を基にデバ
ックを行っていた。
【0005】しかし、この方式では、目的の手続き又
は、フレーム領域を見つけるまでの時間がかかる。
【0006】また、このような方法でデバックを行うの
を回避する方法として、手続き内の変数の実体の領域が
フレーム領域に設定されることを利用して、プログラマ
がプログラムをコーディングするとき、スタックの内容
を示す変数を作り、その変数に手続きを示す文字列を代
入する文を記述する方法がある。
【0007】なお、フレーム領域を利用したプログラム
のトレース方式の関連としては、マクロ呼び出しのトレ
ース方式(特開昭63−244141号公報)がある。
【0008】(2)従来、メモリ上のテーブルの内容を
調べる方式として、テーブルの先頭に、テーブルの名前
を表すフィールドをテーブルの一部の領域として取って
おき、テーブルの領域が作成されたとき、このフィール
ドに名前を代入する文をプログラム上に記述する方法が
ある。
【0009】
【発明が解決しようとする課題】
(1)上記従来技術の情報処理24巻4号(1983年)第
442頁から第447頁において記載されている方式で
は、デバックの方法の点について配慮がされておらず、
スタックの内容を調査するときに、目的の手続きのスタ
ック内のフレーム領域の場所及び、調査中のスタックの
場所にあるフレーム領域の手続きの判別に時間がかかる
という問題があった。
【0010】上記従来技術の手続きに手続きを示す文字
列を代入する変数を用いる方式では、デバックの方法が
プログラムをコーディングする段階で決まるため、デバ
ック時に必要と考えた場合、コーディングからやり直す
為、効率が悪いという問題がある。また、全ての手続き
にあらかじめこの方式のコーディングを行うと、プログ
ラマに負担がかかるという問題があった。
【0011】マクロ呼び出しのトレース方式(特開昭6
3−244141)では、マクロが実行時に呼び出され
ているかの判別は、スタック上のフレーム領域がどの手
続き(関数)に対応するかの判別が行われていなけれ
ば、デバックが出来ないものであり、この中では、どの
ようにスタック内のフレーム領域と手続き(関数)を対
応させるのかが判らないという、問題があった。
【0012】本発明の目的は、フレーム領域に手続きの
識別子をプログラマの負担を減らすため自動設定するこ
とにより、スタック方式を用いて実行するプログラムの
デバック効率が向上することにある。
【0013】(2)上記従来技術のでは、全てのテーブ
ルにあらかじめこの方式のコーディングを行うと、プロ
グラマに負担がかかることや、せっかくテーブル内にフ
ィールドを設けても名前を設定するコーディングを忘れ
るという問題があった。
【0014】本発明の目的は、テーブルの領域作成時に
テーブルの識別子領域を自動作成することを行い、この
領域にテーブルの識別子を自動設定することにより、プ
ログラムのデバック効率が向上することにある。
【0015】
【課題を解決するための手段】
(1)上記目的は、スタック方式を用いて実行するプロ
グラムのオブジェクトを生成するコンパイラに、手続き
のフレーム領域が作成されるオブジェクトが実行された
後、このフレーム領域の特定の場所に手続きの識別子を
設定するオブジェクトを作成する機能を追加し、プログ
ラムのデバックの時、フレーム領域内に手続きの識別子
を探索することにより達成される。
【0016】(2)上記目的は、コンパイラに、テーブ
ルとテーブルの識別子の領域を同時に作成し、作成され
た領域にこのテーブルの識別子を設定するオブジェクト
を生成する機能を追加し、デバックの時、テーブルの識
別子を探索することにより達成される。
【0017】
【作用】
(1)プログラムが実行されるとき、コンパイラが作成
したオブジェクトに従って、フレーム領域に手続きの識
別子が設定される。このことにより、プログラムをデバ
ックする場合のスタックの内容の調査は、手続きの識別
子で探索することにより、目的の手続きのスタック内の
フレーム領域の場所及び、調査中のスタックの場所にあ
るフレーム領域の手続きの判別が容易にできる。
【0018】(2)プログラムが実行されるとき、コン
パイラが作成したオブジェクトに従って、テーブルとテ
ーブルの識別子を合わせた領域にテーブルの識別子が設
定される。このことにより、プログラマがテーブルの領
域内にテーブルの識別子のフィールドを作成しテーブル
名を設定しなくても、テーブルの内容の判別が容易にで
きる。
【0019】
【実施例】以下本発明の一実施例について図面を用いて
説明する。
【0020】図1は本実施例の動作環境について説明す
る図である。プログラム1は、ソースプログラムに手続
きPROC_Aをもつプログラムである。ソース11は手続き
PROC_Aのコーディングを示し、ソース111は手続きPR
OC_Aの機能のコーディングを示し、ソース1111は手
続きPROC_Bを呼び出している文を示す。ソース12は手
続きPROC_Cのコーディングを示し、ソース121は、手
続きPROC_Aを呼び出している文を示す。
【0021】オブジェクトプログラム2は、プログラム
1からコンパイラが出力するコード領域である。コード
領域21はソース11の命令領域である。コード領域2
11は、手続きPROC_Aのフレーム領域の生成の命令領域
を示す。コード領域213は、ソース111の命令領域
を示す。コード領域214は、手続きPROC_Aのフレーム
領域の解放の命令領域を示す。コード領域215は手続
きPROC_Aの定数領域を示す。定数領域内の定数2151
は、手続きPROC_Aの識別名である。コード領域212
は、定数領域215内の手続きの識別名を示す定数21
51をフレーム領域の特定の場所へ転送する命令が設定
される領域である。
【0022】スタック領域3は、オブジェクトプログラ
ム2が実行時に作成するスタック領域である。フレーム
領域31は手続きPROC_Cのフレーム領域を示す。フレー
ム領域32は手続きPROC_Aのフレーム領域を示す。フレ
ーム領域33は手続きPROC_Bのフレーム領域を示す。こ
こでフレーム領域とは、手続きの引数及び内部変数を格
納するとともにコンパイラによって作成され作業用に使
用される領域である。初めに、スタック領域3にはフレ
ーム領域31、フレーム領域32、フレーム領域33の
いずれも存在しない。プログラム内で手続きPROC_Cが呼
び出されたとき、フレーム領域31が作成され、手続き
PROC_Cからソース121で手続きPROC_Aが呼び出された
とき、フレーム領域32が作成され、手続きPROC_Aから
ソース1111で手続きPROC_Bが呼び出されたとき、フ
レーム領域33が作成される。手続きPROC_Cのフレーム
領域31内の識別子311は、このフレームが手続きPR
OC_Cのフレームであることを表す識別子である。手続き
PROC_Aのフレーム領域32内の識別子321は、このフ
レームが手続きPROC_Aのフレームであることを表す識別
子である。手続きPROC_Bのフレーム領域33内の識別子
331は、このフレームが手続きPROC_Bのフレームであ
ることを表す識別子である。
【0023】識別子321は、コード領域21の実行中
に、フレーム領域32がスタック領域3に生成された
後、コード領域215の定数2151をフレーム領域3
2の特定の場所へ転送する命令により、フレーム領域3
2の内に識別子321を設定する。
【0024】図2にコンパイラの構成図を示す。ソース
プログラム1をコンパイラ4でコンパイルする。その
際、構文解析部41でプログラムに記述されている手続
きPROC_Aを解析するときに手続きの名前「PROC_A」の記
憶しておく。コード領域生成部42で、記憶しておいた
「PROC_A」の名前を手続きPROC_Aの定数部に設定し、こ
の定数PROC_Aを手続きPROC_Aが実行されるとき作成され
るフレーム領域内に転送する命令を生成し、図1の形式
のオブジェクトプログラム2を出力する。
【0025】本実施例によれば、スタック内のフレーム
がどの手続きに所属するものか、目的の手続きのスタッ
ク内のフレーム領域の場所を、手続きの識別子で探索す
ることにより、容易に判別ができる。
【0026】また、図3のように、手続きPROC_Cの識別
子511を変数ciの領域512、変数cjの領域513な
どの直前に取り、手続きPROC_Aの識別子521を変数ai
の領域522、変数ajの領域523などの直前に取る。
このようにフレーム領域の識別子を、変数領域の直前に
取ることにより、フレーム領域内の変数領域の場所を容
易に見つけることができる。
【0027】以下本発明の他の実地例について図面を用
いて説明する。
【0028】図4は本実施例の動作環境について説明す
る。プログラム6は、テーブルをメモリ上に取るプログ
ラムである。ソース61は手続きPROC_Bのコーディング
を示し、ソース611は、構造を持つ型b_recを表す宣
言のコーディングを示す。ソース612は、b_recの構
造を持つテーブルへのポインタ変数brを表す宣言のコー
ディングを示し、ソース613は、手続きPROC_Bの機能
のコーディングを示す。ソース6131は、型b_recの
構造を持つ領域を取るコーディングを示す。
【0029】オブジェクトプログラム7は、プログラム
6からコンパイラが出力するコード領域である。コード
領域71は、ソース61の命令領域を示す。コード領域
711は、ソース613の命令領域を示す。コード領域
7111は、テーブルとテーブルの識別子の領域を取る
命令を示し、コード領域7112は、識別子の領域に定
数領域の識別子を設定する命令が設定される領域であ
る。コード領域712は、手続きPROC_Bの定数領域を示
し、定数領域内の定数7121は、テーブルbrの識別子
を示す。
【0030】メモリ領域8は、テーブルとテーブルの識
別子の領域が取られる領域である。メモリ領域81は、
テーブルbrとテーブルbrの識別子を合わせた領域を示
し、メメモリ領域811は、テーブルbrの識別子の領域
を示す。メモリ領域812は、テーブルbrのfild1の値
を持つ領域を示す。メモリ領域813は、テーブルbrの
fild2の値を持つ領域を示す。
【0031】命令7111が実行された後で、命令71
12により、テーブルbrの識別子がメモリ領域811に
設定される。
【0032】図5にコンパイラの構成図を示す。ソース
プログラム6をコンパイラ9でコンパイルする。その
際、構文解析部91でプログラムに記述されている手続
きPROC_Bを解析するときにテーブルの名前「br」を記憶
しておく。コード領域生成部92で、記憶しておいたの
名前「br」を手続きPROC_Bの定数部に設定し、テーブル
brとテーブルbrの識別子の領域を同時に取る命令、この
定数「br」をテーブルとテーブルの識別子を合わせた領
域内に転送する命令を生成し、図4形式のオブジェクト
プログラム8を出力する。
【0033】本実施例によれば、テーブルの内容をテー
ブルの識別子で探索することにより、容易に解析するこ
とができる。また、プログラマのプログラミングの自由
度を増すために、本機能をコンパイル時のオプションで
指定して行う方式がある。
【0034】
【発明の効果】
(1)本発明によれば、プログラムのデバックのとき、
スタックの状態を調べるとき、自動的に設定される手続
きのフレームの識別子により、目的の手続きのスタック
内のフレーム領域の場所及び、調査中のスタックの場所
にあるフレーム領域の手続きの判別が容易にできるの
で、デバックの効率が向上する効果がある。
【0035】(2)本発明によれば、プログラムのデバ
ックのとき、テーブルの内容を調べるとき、自動的に設
定されるテーブルの識別子により、テーブルの内容の判
別が容易にできるので、デバックの効率が向上する効果
がある。
【図面の簡単な説明】
【図1】本発明の動作環境1。
【図2】コンパイラの処理1。
【図3】フレーム領域の識別子の位置。
【図4】本発明の動作環境2。
【図5】コンパイラの処理2。
【符号の説明】
1…スタック方式のソースプログラムに手続きPROC_Aを
もつプログラム、 11…手続きPROC_Aのコーディング、 111…手続きPROC_Aの機能のコーディング、 1111…手続きPROC_Bを呼び出す文、 12…手続きPROC_Cのコーディング、 121…手続きPROC_Aを呼び出す文、 2…プログラム1からコンパイラが出力するコード領
域、 21…ソース11の命令領域、 211…手続きPROC_Aのフレーム領域の生成の命令領
域、 212…フレーム領域に識別子を設定する命令が設定さ
れる領域、 213…ソース111の命令領域、 214…手続きPROC_Aのフレーム領域の解放の命令領
域、 215…手続きPROC_Aの定数領域、 2151…手続きPROC_Aの識別名、 22…ソース12の命令領域、 3…スタック領域、 31…手続きPROC_Cのフレーム領域、 311…手続きPROC_Cの識別子、 32…手続きPROC_Aのフレーム領域、 321…手続きPROC_Aの識別子、 33…手続きPROC_Bのフレーム領域、 331…手続きPROC_Bの識別子、 4…コンパイラ、 41…構文解析部、 42…コード生成部、 5…スタック領域、 51…手続きPROC_Cのフレーム領域、 511…手続きPROC_Cの識別子、 512…変数ciの領域、 513…変数cjの領域、 52…手続きPROC_Aのフレーム領域、 521…手続きPROC_Aの識別子、 522…変数aiの領域、 523…変数ajの領域、 53…手続きPROC_Bのフレーム領域、 531…手続きPROC_Bの識別子、 6…テーブルをメモリ上に取るプログラム、 61…手続きPROC_Bのコーディング、 611…構造を持つ型b_recを表す宣言のコーディン
グ、 612…b_recの構造を持つ領域を示す変数brを表す宣
言のコーディング 、 613…手続きPROC_Bの機能のコーディング、 6131…型b_recの構造を持つ領域を取るコーディン
グ 7…コンパイラが出力するコード領域、 71…ソース61の命令領域、 711…ソース613の命令領域、 7111…テーブルbrとテーブルbrの識別子の領域を取
る命令、 7112…定数7121をメモリ領域に設定する命令、 712…手続きPROC_Bの定数領域、 7121…テーブルbrの識別子、 8…テーブルとテーブルの識別子の領域が取られる領
域、 81…テーブルbrとテーブルbrの識別子の領域、 811…テーブルbrの識別子の領域、 812…テーブルbrのfild1の値を持つ領域、 813…テーブルbrのfild2の値を持つ領域、 9…コンパイラ、 91…構文解析部、 92…コード領域生成部。

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】高級言語で記述されたプログラムの手続き
    が、プログラムを実行する際、手続きの引数、内部変
    数、及び、コンパイラが作成する作業用の変数が使用す
    る領域と、この領域を制御するための情報を持つ領域を
    合わせ持った、フレームと呼ばれる領域を使用するオブ
    ジェクトを出力するコンパイラにおいて、フレームがス
    タック領域に割付けられる度に、フレーム内部に自動的
    に識別子を設定するオブジェクトを出力することを特徴
    とするオブジェクトプログラム生成方法。
JP5210189A 1993-08-25 1993-08-25 オブジェクトプログラム生成方法 Pending JPH0764800A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP5210189A JPH0764800A (ja) 1993-08-25 1993-08-25 オブジェクトプログラム生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5210189A JPH0764800A (ja) 1993-08-25 1993-08-25 オブジェクトプログラム生成方法

Publications (1)

Publication Number Publication Date
JPH0764800A true JPH0764800A (ja) 1995-03-10

Family

ID=16585263

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5210189A Pending JPH0764800A (ja) 1993-08-25 1993-08-25 オブジェクトプログラム生成方法

Country Status (1)

Country Link
JP (1) JPH0764800A (ja)

Similar Documents

Publication Publication Date Title
US5339424A (en) System and method for compiling and executing a computer program written in more than one programming language
US9274923B2 (en) System and method for stack crawl testing and caching
US5170465A (en) Incremental-scanning compiler for source-code development system
US5313387A (en) Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers
US8448152B2 (en) High-level language, architecture-independent probe program compiler
JPH09325901A (ja) デバッギングを実施する方法
EP0406028A2 (en) Incremental compiler for source code development system
US6256782B1 (en) Compile apparatus, compile method and computer-readable medium storing compiler
JPH0764800A (ja) オブジェクトプログラム生成方法
JP3327674B2 (ja) プログラム翻訳装置及び方法
JP2003216442A (ja) プログラム変換方法、これを用いたコンピュータ装置及びプログラム
JPS62214443A (ja) エミユレ−シヨン実行方法
Snyder Lazy debugging of lazy functional programs
JPH08272621A (ja) 動的メモリ領域を確保する関数呼出しの処理方法
JPH0510692B2 (ja)
JP2009515243A (ja) ホストコンピュータ上で実行可能なシミュレーションプログラムを生成する方法
JP2002073347A (ja) 例外処理方法及びコンパイラ
JPH0695890A (ja) コンパイラにおける名前置換方式
JPH1195995A (ja) データフロー解析装置、データフロー解析方法及びそのためのコンピュータプログラムを記録した記録媒体
JP3424596B2 (ja) シンボル参照情報のキャッシュ方法ならびに装置
JPH01147738A (ja) デバツグ方式
JPH10240545A (ja) 未定義変数検出の最適化コンパイラ装置
JPS63292338A (ja) 最適化プログラムデバツグ方式
JPH06231003A (ja) 実行可能ファイルのデバッガ
JPH05204705A (ja) 未定義変数検出処理方法

Legal Events

Date Code Title Description
R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080829

Year of fee payment: 11

FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090829

Year of fee payment: 12

EXPY Cancellation because of completion of term
FPAY Renewal fee payment (prs date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090829

Year of fee payment: 12