JP3205406B2 - 参照対象変数決定処理方法および翻訳処理システム - Google Patents

参照対象変数決定処理方法および翻訳処理システム

Info

Publication number
JP3205406B2
JP3205406B2 JP29989192A JP29989192A JP3205406B2 JP 3205406 B2 JP3205406 B2 JP 3205406B2 JP 29989192 A JP29989192 A JP 29989192A JP 29989192 A JP29989192 A JP 29989192A JP 3205406 B2 JP3205406 B2 JP 3205406B2
Authority
JP
Japan
Prior art keywords
block
variable
information
variable name
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.)
Expired - Fee Related
Application number
JP29989192A
Other languages
English (en)
Other versions
JPH06149589A (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 JP29989192A priority Critical patent/JP3205406B2/ja
Publication of JPH06149589A publication Critical patent/JPH06149589A/ja
Priority to US08/758,299 priority patent/US5721924A/en
Application granted granted Critical
Publication of JP3205406B2 publication Critical patent/JP3205406B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3624Software debugging by performing operations on the source code, e.g. via a compiler

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は,電子計算機用のプログ
ラムに対する処理方法に係り,特にブロック構造を持つ
言語で記述されたソースプログラムにおいて,指定され
た変数の値をプログラムのデータ域より取り出して表示
するデバッガや,ソースプログラムの記述に従って変数
の読み出し,書き出し,演算処理等を行うインタープリ
タ等における参照対象変数決定処理方法に関する。
【0002】電子計算機用のソースプログラムは,デー
タ定義部と処理手続き部からなることが多い。前者はプ
ログラムで処理される変数を,変数名や変数の型等とと
もに定義するもので,後者はそれらの変数を変数名によ
って参照しつつ,すなわち変数から値を読み出したり変
数に値を格納しつつ,演算等を実行する処理手続きを記
述したものである。
【0003】翻訳プログラム(コンパイラ)は,このソ
ースプログラムを翻訳してオブジェクトプログラムを生
成するが,オブジェクトプログラムもデータ部と手続き
部からなり,前者はソースプログラムのデータ定義部で
定義された各変数に対応する変数領域の集まりであり,
後者はその変数領域にアクセスしつつ処理を行うCPU
命令の列からなる部分である。
【0004】ブロック構造を有するプログラミング言語
においては,処理手続き部は幾つかのブロックからな
り,各ブロックはさらに変数定義部と処理手続き部から
なり,また後者の処理手続き部はさらに幾つかのブロッ
クをその内側に含むことができる。変数定義部を含まな
いブロックも存在しうる。あるブロックの中で定義され
た変数は,原則としてそのブロックおよびその内側のブ
ロックから参照できるが,ブロックの外側からは決して
参照できない。このような変数は,そのブロックにおけ
る局所的な変数と呼ばれる。
【0005】あるブロックAで定義された変数iと同名
の変数がその内側のブロックBで定義されていた場合,
ブロックBおよびさらに内側のブロックからは,ブロッ
クAで定義された変数iは参照できない。変数名iによ
ってブロックBで定義された変数iが参照される。
【0006】このため,あるブロックからある変数名に
よって参照される変数は,そのブロックから外側へ,各
ブロックで定義された変数名を探索し,はじめて見つか
った変数が参照される変数となる。
【0007】ソースプログラムが複数のソースファイル
からなる場合,ソースファイルの全体をソースプログラ
ムと呼ぶことにする。ソースプログラムは一つのブロッ
クを構成し,さらに各ソースファイルはそれに含まれる
ブロックとみなすことができる。またC言語において
は,ソースファイル内で定義された各関数は一つのブロ
ックとみなし,関数内部で定義されたC言語でいうブロ
ックはここでいうブロックとみなすことができる。
【0008】こうして,一つのソースプログラムのブロ
ック全体は,その包含関係によって木構造をなす。次
に,本発明の適用分野についてより詳細に説明する。
【0009】プログラムを新たに作成している場合,そ
のプログラムが異常終了することはよく経験することで
ある。このとき,プログラム作成者は,残されたメモ
リ,あるいはメモリダンプ情報より各変数の値を取り出
し,それが期待通りの値であるか,また,変数の間の関
係が期待どおりであるか等を調べ,異常終了の原因を推
定する。このためには,デバッガ等を利用して各変数の
値をメモリ上,あるいはメモリダンプから読み出してキ
ーボード・ディスプレイ装置の画面等に表示する必要が
ある。
【0010】デバッガは,使用者が指定した変数名か
ら,そのアドレスを求め,その内容を読み出して表示す
る。しかし,ブロック構造を持つ言語の場合には,参照
する位置によって,参照される変数が異なる場合がある
ので,位置と変数名をもとに変数アドレスを決定するこ
とが必要になる。この処理は,できるだけ高速に行われ
ることが望ましい。
【0011】また,変数の間の関係を調べるには,利用
者が指定した手続きや式をインタプリタによって実行,
評価するのがよい。なぜなら,インタプリタは,手続き
や式をソースプログラムの形式のまま解読しつつ実行す
るため,前処理としての翻訳処理が不要なためである。
この実行においても,変数名に対して,メモリ上,ある
いはメモリダンプ内の変数アドレスを求めることが必要
になる。この場合にも,参照元の位置と変数名をもと
に,参照対象変数を決定することが必要になる。
【0012】
【従来の技術】デバッガにおいて,変数名より対応する
変数領域を求めるためには,現在位置をもとに,それを
含む最も内側のブロックを求め,その中で定義された同
名の変数を探し,なければさらに外側のブロックで定義
された同名の変数を探すという処理を行っていた。ある
いは,外側のブロックより内側へ順に同名の変数を探索
して,存在すれば蓄積し,現在位置を含むブロックまで
処理が終ったなら,最後のブロックで定義されたものを
対象変数としていた。
【0013】しかし,この場合,途中の各ブロックで定
義されている変数の個数の合計の回数だけ変数名の比較
を行う必要があり,処理時間が大きくなる欠点があっ
た。インタプリタの中には,前処理として,ソースプロ
グラムを記述言語の文法に従って解析し,ソースプログ
ラム中の各変数名を,参照される変数の識別子に置き換
えつつ中間言語のプログラムに変換し,インタプリタ
は,この中間言語で記述されたものを解釈しつつ実行す
るものもある。この方法によれば,ソースプログラム中
の変数名ごとに参照される変数は一意的に決まるので,
実行時には変数名より参照対象変数を決定する処理が不
要になり,実行時の性能が大幅に向上する。
【0014】しかし,中間言語への翻訳処理において
は,やはり各行などより参照される変数を決定する処理
が必要になり,その処理は上記と同じ方法をとってい
た。
【0015】
【発明が解決しようとする課題】以上のように従来の方
法によれば,現在位置を含む内側のブロックから外側の
ブロックへ,または外側のブロックから内側のブロック
へ順に同名の変数を探索し,その中で有効なものを選び
出す処理を行っているので,処理時間が大きくなるとい
う問題があった。
【0016】本発明は上記問題点の解決を図り,高速に
参照対象変数を決定する手段を提供することを目的とし
ている。
【0017】
【課題を解決するための手段】そのため,本発明の参照
対象変数決定処理方法では,例えば図1に示すようなシ
ステムにおいて,ブロック構造を持つ言語で記述された
ソースプログラムにおけるプログラム内の位置と変数名
をもとに,その位置より参照される,その変数名を持つ
プログラム内の変数を決定するにあたって,次の処理を
行う。
【0018】まず,ソースプログラム内の位置全体をブ
ロックの開始位置および終了位置によって区分して得ら
れる各区間に対応する要素の情報を持つ区間情報22を
作成する。また,ソースプログラムの各ブロックを木の
節(ノード)とし,ブロック間の包含関係を木構造で表
わしたブロック木構造情報23を作成する。
【0019】さらに,変数名に対応して,その変数名を
持つ変数を定義しているブロックからなる集合を記憶す
る変数名・ブロック対応情報24を作成する。前記区間
情報22の作成では,区間情報22の要素に,その区間
を含む最も内側のブロックに対応する,ブロック木構造
情報23内のノードへのポインタを含むようにする。
【0020】参照対象変数を決定するための位置と変数
名が与えられたとき,その位置をもとに,区間情報22
における,指定された位置を含む区間に対応する要素を
求め,その要素よりポイントされるブロック木構造情報
23内のノードより,木の根に至る経路上の各ノードに
対応するブロックの集合と,変数名・ブロック対応情報
24においてその変数名に対応づけられているブロック
の集合とに共通に含まれるブロックのうち,ブロック木
構造情報23において最も葉に近いノードに対応するブ
ロックにおいて定義された,その変数名を持つ変数を参
照対象変数と決定する。
【0021】特に,本発明では,ブロック木構造情報2
3の各ノードは,少なくとも親ノードへのポインタと,
該ノードに対応するブロックのブロック識別子とを含む
ようにする。
【0022】そして,変数名・ブロック対応情報24
は,変数名に対応して,その変数名を持つ変数を定義し
ている各ブロックのブロック識別子からなる集合を記憶
し,位置と変数名が与えられたとき,その位置をもと
に,区間情報22における,その位置を含む区間に対応
する要素を求め,その要素よりポイントされるブロック
木構造情報23内のノードより,木の根に至る経路上の
各ノードが格納するブロック識別子を集めて第1ブロッ
クリストとし,また,変数名をもとに,変数名・ブロッ
ク対応情報24より,その変数名に対応して記憶されて
いるブロック識別子からなる集合を第2ブロックリスト
とし,それらに共通に含まれるブロック識別子のうち,
ブロック木構造情報23において最も葉に近いノードに
格納されていたブロック識別子に対応するブロックにお
いて定義された,その変数名を持つ変数を参照対象変数
と決定する。
【0023】請求項2記載の発明の場合,請求項1記載
の発明におけるブロック識別子の代わりに,ブロック木
構造情報23内のノードへのポインタを用いる。請求項
記載の発明では,複数のソースファイルによって構成
されるソースプログラムについての参照対象変数を決定
する場合に,各ソースファイルも一つのブロックを構成
するとみなして処理を行う。
【0024】請求項4記載の発明では,参照対象変数決
定処理を複数回繰り返して行う場合に,一度参照した変
数については,生成した第1ブロックリストまたは第2
ブロックリストを所定の蓄積域に蓄積しておき,現在位
置が蓄積域のいずれかの第1ブロックリストに該当する
場合,または変数名が蓄積域のいずれかの第2ブロック
リストに該当する場合には,それを使用する。
【0025】請求項5記載の発明では,ブロック構造を
持つソースプログラムを入力し,前記の方法に係る区間
情報22と,ブロック木構造情報23と,変数名・ブロ
ック対応情報24とを,オブジェクトプログラムの一部
として出力する処理手段を翻訳プログラム中に設けて,
翻訳処理システムを構成する。
【0026】
【作用】本発明では,ブロック構造を持つプログラム中
の位置と変数名とから,参照対象変数を決定するため
に,プログラムをブロックに関連して区間に分割した区
間情報22とブロック木構造情報23と変数名・ブロッ
ク対応情報24とを用いて,ブロック木構造情報23中
のパスと,後者のブロック集合を照合する。したがっ
て,途中の各ブロックで定義されている変数の個数だけ
変数名の比較を行うような処理が不要となり,処理の高
速化が可能になる。
【0027】特に,本発明のように,ブロック木構造情
報23として,その各ノードが,親ノードへのポインタ
と,そのノードに対応するブロックのブロック識別子と
を含むように構成することにより,ブロック木構造情報
23を扱いやすい形で管理することができる。
【0028】一方,ブロック識別子の代わりに,請求項
記載の発明のように,ブロック木構造情報23内のノ
ードへのポインタを用いることにより,このポインタに
よってブロックを識別することもできる。この場合に
は,ブロック木構造情報23内にブロック識別子を持つ
必要がないので,必要なメモリ量を削減することが可能
になる。
【0029】また,請求項3記載の発明のように,複数
のソースファイルによって構成されるソースプログラム
についての参照対象変数を決定する場合に,各ソースフ
ァイルも一つのブロックを構成するとみなして処理を行
うことにより,複数のソースファイルからなるソースプ
ログラムについても,一つのソースファイルからなるソ
ースプログラムの処理と同様に処理することが可能にな
る。。
【0030】参照対象変数決定処理を複数回繰り返して
行う場合に,請求項4記載の発明のように,一度参照し
た変数についての第1ブロックリストまたは第2ブロッ
クリストを保存して再利用することにより,さらに処理
の高速化が可能になる。
【0031】また,請求項5記載の発明のように,翻訳
プログラムがオブジェクトプログラムの一部として区間
情報22,ブロック木構造情報23,変数名・ブロック
対応情報24を出力することにより,デバッガあるいは
インタプリタはそれを読み込んで利用し,請求項1ない
請求項3記載の方法による高速な参照対象変数の決定
が可能になる。
【0032】
【実施例】以下,図面を参照しつつ,本発明の一実施例
を説明する。最初に,本発明で使用される木構造につい
て説明する。木の中には一つの根が存在して,これはノ
ードの一つである。各ノードには一つまたは複数の子ノ
ードが存在しうる。このとき初めのノードはあとのノー
ドの親ノードとも呼ばれる。根以外のノードはただ一つ
の親ノードを持つ。根は親ノードを持たない。根から子
ノードへと順に辿っていけるノード全体が一つの木を構
成する。子ノードを持たないノードは葉といわれる。
【0033】一つのプログラムのブロック構造は,一つ
の木で表すことができる。すなわち,最も内側に存在す
るすべてのブロックは,それぞれ葉に対応し,そのブロ
ックのすぐ外側のブロックは,その親ノードに対応し,
そしてプログラム全体は,木の根に対応させることがで
きる。
【0034】図1は本発明の一実施例を示す全体構成図
である。主記憶装置(MEM)11は,OS領域と利用
者プログラム用領域に区分される。OS領域には,OS
(オペレーティングシステム)が格納され,利用者プロ
グラム用領域には,利用者プログラムが格納され,中央
処理装置(CPU)10は,それらのプログラムより命
令を順次読み出し,主記憶にアクセスしつつ処理を実行
する。
【0035】外部記憶装置12は,OS,利用者プログ
ラム,その他のデータを格納する。OSは,利用者プロ
グラムをここから主記憶に読み込んで,その実行を開始
するほか,利用者プログラムからの依頼により,外部記
憶装置12に格納されたデータを主記憶へ読み込み,ま
た主記憶から外部記憶装置12にデータを書き出す処理
機能を提供する。
【0036】キーボード・ディスプレイ装置13は,利
用者が実行させようとするプログラムや,プログラムに
渡すデータを指定し,またOSや利用者プログラムが,
入力の案内や実行結果等を利用者のために表示するのに
用いられる。
【0037】本実施例では,利用者プログラム用領域に
は,本発明の実施例を実行するプログラムAが格納され
る。プログラムAは,キーボード・ディスプレイ装置1
3より,利用者が指定するプログラムB内の行番号と変
数名を入力した後,プログラムB中の該当する変数情報
を探索し,それをもとに翻訳プログラムが割り付けた変
数領域を特定し,外部記憶装置12内に存在するプログ
ラムBのメモリダンプ情報の該当変数領域より変数の値
を読み込んで,キーボード・ディスプレイ装置13に表
示する。
【0038】外部記憶装置12には,本実施例を実行す
るプログラムA,処理対象となるプログラムBのロード
モジュール,その中に含まれるシンボルテーブルと,プ
ログラムBのソースプログラム,プログラムBのメモリ
ダンプ情報が記憶されている。
【0039】メモリダンプ情報は,プログラムBの実行
中,利用者が指示したときか,あるいはプログラムBが
異常終了したときに,OS等がプログラムBのメモリ領
域全体を外部記憶装置12に出力したもので,その中に
はプログラムBの各変数のそのときの値が含まれてい
る。
【0040】外部記憶装置12内のプログラムBのロー
ドモジュールには,シンボルテーブルが含まれている。
これは翻訳プログラムが翻訳時に生成し,あるいは結合
プログラムがそれらをさらに結合したもので,その中に
はソースファイルの開始位置,ブロックの開始行位置,
終了行位置やそのブロックの中で定義された変数につい
て変数名,型,プログラム内の相対アドレス等を格納し
ている。
【0041】プログラムAのデータ領域には,本発明に
係る区間情報22,ブロック木構造情報23,変数名・
ブロック対応情報24が含まれている。これらは,プロ
グラムAが外部記憶装置12内のプログラムBのロード
モジュール内のシンボルテーブルをもとに生成したもの
である。このほかに,プログラムBのソースプログラム
読み込み域20,シンボルテーブル読み込み域21,メ
モリダンプ情報読み込み域25が存在する。
【0042】図2は本発明の処理対象となるプログラム
Bの例を示す。記述言語はC言語である。一つのソース
ファイル,一つの関数および関数内で“{”とそれに対
応する“}”で囲まれた部分がそれぞれブロックを構成
する。関数内のブロックも何重かになることができる。
すなわち,ブロックの内部にブロックが存在しうる。
【0043】プログラムBには,m1とS1とi1とi
2を変数名とする変数が定義されている。ただし,i1
とi2については同名の変数が複数存在する。プログラ
ムBのソースプログラムは,1個のソースファイルから
なる。言い換えれば,プログラムBのロードモジュール
は,1個のソースファイルを翻訳して得られたものであ
る。このソースファイルはブロックB6に対応する。
【0044】mainは関数名であり,また関数mai
nの手続きの記述の始まりとなっている。関数main
は,一つのブロックB5に対応し,その中にブロックB
3とB4が存在し,B3の中にはブロックB1とB2が
存在する。
【0045】変数i1は,ブロックB5と,その2つ内
側のブロックB1と,ブロックB5の一つ内側のブロッ
クB4で定義されている。そのため,2番目のi1の通
用範囲はB1,3番目のi1の通用範囲はB4,1番目
のi1の通用範囲はB5よりB1とB4を除いた部分と
なる。変数i2はブロックB3とその中のB2で定義さ
れている。そのため,後者のi2の通用範囲はB2,前
者のi2の通用範囲はB3よりB2を除いた部分とな
る。
【0046】ブロックの始まりや終わりの行番号は,L
0,L1,L2…等である。これらで区切られたものが
区間である。プログラム内の位置を指定するためには,
プログラムが一つのソースファイルの翻訳結果である場
合は,通常は行番号を指定すれば足りる。複数のソース
ファイルの翻訳結果を結合したものである場合は,位置
としては,例えばソースファイル名あるいはその識別子
とその中の行番号の対をとればよい。あるいは各ソース
ファイルの全体を通した通し行番号を用いてもよい。
【0047】図3は,本発明にかかる区間情報22,ブ
ロック木構造情報23,変数名・ブロック対応情報24
をそれぞれ概念的に示したものである。区間情報22に
は,次に述べるブロック木構造情報23の要素へのポイ
ンタが格納されている。ブロック木構造情報23は,プ
ログラムBのブロック間の包含関係を示す。ロードモジ
ュールがブロックB7であり,ソースファイルがブロッ
クB6であり,その中の関数mainがB5,その中に
ブロックB3,B4が,B3の中にB1,B2が存在す
ることを示している。この木の各ノードをブロックノー
ドと呼ぶことにする。
【0048】変数名・ブロック対応情報24は,変数名
に対応して,その変数名を持つ変数を定義しているすべ
てのブロックを示すものである。例えば,変数i1はブ
ロックB1,B5で定義されており,それぞれのシンボ
ル要素番号がn1,n2である。本実施例では,行番号
と変数名をもとに,その行より参照される変数のシンボ
ル要素番号を求めることとする。そのために,変数名・
ブロック対応情報24には,シンボル要素番号が含まれ
ている。
【0049】シンボル要素は,ロードモジュール内のシ
ンボルテーブルを構成する要素で,それは変数の型やプ
ログラム内相対アドレス等を含んでいる。そのため,シ
ンボル要素からメモリダンプ内の該当変数領域を求める
ことができる。なお,シンボル要素中の変数アドレスよ
り,変数領域のメモリアドレスを求める処理は,通常は
ローディング開始アドレスに依存したアドレス値を加え
ることであり,特に述べない。
【0050】これら,区間情報22,ブロック木構造情
報23,変数名・ブロック対応情報24はともにシンボ
ルテーブルより生成されたものである。これらが生成可
能であることは後で示す。
【0051】図4は,図3中に示した区間情報22をよ
り詳細に示したものである。それは各行区間に対応する
要素からなり,各要素は開始行番号とブロックノードへ
のポインタからなる。(B5)は,ブロックB5に関す
るブロックノードの存在するメモリ上のアドレスを意味
している。このほかに,ポインタとしては,木構造をま
とめたデータ領域において,領域の先頭からその要素へ
の相対アドレスとすることもできる。
【0052】要素は区間開始行番号について昇順(小さ
い順)に並んでいるので,これを上の要素から順に指定
行番号と比較していけば,指定行を含む区間の要素を求
めることができる。なお,この区間情報22は,2進木
探索等の手法を用いてより高速にアクセスできるように
変更することも可能である。
【0053】図5は,図3中に示したブロック木構造情
報23をより詳細に示したものである。各要素はブロッ
クノードであり,その内容はブロックIDと親ノードへ
のポインタからなる。要素中に示したB1,B2等はブ
ロックIDを意味する。木の根はその親へのポインタが
0であることにより示される。ポインタ値はブロック木
構造情報内の相対アドレスでもよい。この方法は,ブロ
ック木構造情報をプログラムBのロードモジュールより
予め生成して,外部記憶装置12等に格納しておき,そ
れを本処理において,メモリ上に読み込んで利用する場
合に好適である。それはメモリ上の読み込みアドレスに
依存しないからである。
【0054】図6は,本発明の実施例における第1ブロ
ックリスト生成処理を示す流れ図である。これは指定行
番号nより,図4に例を示す区間情報と,図5に例を示
すブロック木構造情報にアクセスしつつ,第1ブロック
リストを生成する処理である。その第1ブロックリスト
の意味は,指定行番号を含むプログラム内のブロックを
内側から外側に順に示すものである。
【0055】はじめに処理P1において,第1ブロック
リストの生成領域をクリアする。続いて処理P2におい
て,区間情報を先頭から順に読み,指定行番号を含む区
間に対応する要素を求める。例えば,区間情報が図4に
示す形式であった場合,その区間要素の中の区間開始行
番号がn以下であり,かつ次の区間要素の中の区間開始
行番号がnより大きいか次の区間要素が存在しないと
き,前の要素を求めるものとする。
【0056】続いて処理P3において,当該要素より,
ブロック木構造情報中の要素へのポインタを取り出し,
それをrとする。rはBのソースプログラムにおいて,
その区間を含む最も内側のブロックに対応する要素への
ポインタである。
【0057】続いて処理P4において,rが0かどうか
調べ,0なら処理を終える。ただし,はじめはrは0で
ないので処理P5に進む。P5において,rによってポ
イントされる要素を読み,そこに格納されたブロックI
Dを第1ブロックリストに追加する。
【0058】続いて処理P6において,同要素より,親
ノードへのポインタを取り出し,それを改めてrとす
る。そして処理P4に進む。このポインタは,そのブロ
ックのすぐ外側のブロックに対応するノードへのポイン
タを意味する。
【0059】処理P4において,rが0なら処理を終え
る。これは,それが木の根であったことを意味し,また
指定行を含む最も外側のブロックまで求めたことを意味
する。
【0060】処理P4において,rが0でなければ,そ
れは親ノードへのポインタであるので,処理P5に進
む。以下の処理は同じである。図7は,図6に示した処
理手続きにより,指定された行位置をもとに,ブロック
木構造にアクセスすることによって生成された第1ブロ
ックリストの例を示す。(イ)の例は,指定行位置がL
3とL4の間にあった場合を示し,その行を含むブロッ
クが内側から順にB1,B3,B5,B6,B7であっ
たことを示している。それは,図4に示す区間情報の要
素のうち,L3を格納した要素よりポインタされるブロ
ック木構造情報中の要素から根に至る経路上の各要素よ
り,ブロックIDを取り出して並べたものである。
【0061】(ロ)は,指定行位置がL8とL9の間に
あった場合の第1ブロックリストの例を示す。(ハ)
は,指定行位置がL4とL5の間にあった場合の第1ブ
ロックリストの例を示す。
【0062】図8は,変数名・ブロック対応情報24の
構成例を示す。それは入口配列84と,キュープール8
5と,変数名領域86の3つの領域からなる。また,本
情報にアクセスするときに使用されるデータ領域とし
て,変数名領域81とハッシュ値iを格納する領域83
がある。
【0063】アクセス処理は,はじめに変数名を変数名
領域81に設定する。これをハッシュ関数を用いて整数
に変換するとiに整数が格納される。もし同じ変数名に
対して,ハッシュ関数を用いて変換すれば,常に同じi
の値が得られる。ただし,変数名が変われば,iの値は
変わりうる。また,異なる変数名から同じiの値に変換
されることもある。
【0064】入口配列84のi番目の要素は,キュープ
ール85中に存在する変数名要素からなる連鎖の先頭要
素を指している。キュプール85中の要素は,空き要素
か,変数名要素か,変数要素かのいずれかである。変数
名要素は,プログラムB中で定義された各変数名に対応
して存在し,変数要素はプログラムB中で定義された各
変数に対応して存在する。空き要素はデータを格納して
いないもので,変数名・ブロック対応情報を生成すると
きに,この空き要素をとり,そこにデータを設定する。
【0065】変数名要素のうち,同じハッシュ値(i)
を持つ変数名に対応する変数名要素は,キュープール8
5中で変数名要素連鎖をなしている。同様に,変数要素
のうち,同じ変数名を持つ各変数に対応する変数要素
は,キュープール85中で変数要素連鎖をなしている。
そして,変数名連鎖の各要素より分岐して各変数要素連
鎖が存在する。
【0066】変数名要素は,変数名領域中に存在する対
応する変数名へのポインタと,変数名要素連鎖中の次の
変数名要素へのポインタと,その変数名を持つ変数の変
数要素からなる変数要素連鎖へのポインタを格納してい
る。
【0067】変数要素は,変数要素連鎖中の次の変数要
素へのポインタと,その変数を定義しているブロックの
ブロックIDと,その変数に対応するシンボルテーブル
中のシンボル要素番号を格納している。
【0068】従って,指定変数名を持つ変数の変数要素
をすべて集めるためには,はじめに変数名をハッシュ関
数で整数値iに変換し,次に入口配列84のi番目の要
素を取り出して,それからポイントされる変数名連鎖要
素をたどりながら,指定変数名に一致する変数名要素を
取り出し,それよりポイントされる変数連鎖をたどって
連鎖要素をすべて拾えばよい。このようにして指定変数
名を持つすべての変数に関して,その変数を定義してい
るブロックIDと各変数のシンボル要素番号を集めるこ
とができる。
【0069】図9は,第2ブロックリスト生成処理を示
す流れ図である。この処理は指定変数名をもとに,その
変数名を持つプログラムB内で定義されたすべての変数
について,そのブロックIDと,各ブロックで定義され
たその変数名を持つ変数のシンボル要素番号の対を要素
とする第2ブロックリストを生成することである。
【0070】はじめに処理Q1において,第2ブロック
リストをクリアする。続いて処理Q2において,指定変
数名をハッシュ関数によって整数iに変換する。
【0071】続いて処理Q3において,入口配列のi番
目の要素を取り出し,その中のポインタ値をpとする。
続いて処理Q4において,pによりポイントされるキュ
ープール中の変数名要素より,変数名領域中へのポイン
タを取り出し,それにより指される変数名と,指定変数
名とを比較する。
【0072】続いて処理Q6において,比較結果を調
べ,一致しなかったなら,処理Q7に進み,処理Q7に
おいては現在の変数名要素より,次の変数名要素へのポ
インタを取り出し,それをpとし,処理Q4に行く。
【0073】処理Q4においてpが0であったなら,変
数名連鎖の最後まで来たことを意味するので,処理Q5
に進んで処理を終える。これは指定変数名がプログラム
内で定義されていなかったことを意味する。
【0074】また,処理Q6において,前の比較結果が
一致していたなら,処理Q8に進む。処理Q8におい
て,現在の変数名要素より,変数要素へのポインタを取
り出し,それをqとする。そして処理Q9に進む。
【0075】処理Q9において,qによりポイントされ
る変数要素より,ブロックIDとシンボル要素番号を取
り出し,それらを第2ブロックリストに追加する。ま
た,次の変数要素へのポインタを取り出し,それをqと
する。
【0076】続いて処理Q10においてqが0かどうか
を判定し,0なら処理を終える。また0でなければ処理
Q9に進む。例えば,変数名“i1”が与えられたと
き,まず変数名“i1”をハッシュ関数で変換すると,
整数値(iとする)が得られる。入口配列84のi番目
の要素を取り出し,これからポイントされる変数名要素
5−1を取り出すと,これは変数名領域中の変数名“i
1”を指しており,指定変数名に一致するので,この中
より変数要素へのポインタの5−1−2を取り出す。こ
れにより指される変数要素5−2を取り出すと,それは
ブロックB1で定義された変数i1に対応するもので,
そのシンボル要素番号はn1である。またそれにより指
される次の変数要素5−3を取り出すと,それはブロッ
クB5で定義された変数i1に対応するもので,そのシ
ンボル要素番号はn2である。
【0077】また,変数名“i2”が与えられた場合に
は,もしハッシュ関数によって同じ整数値iに変換され
たとき,変数名要素5−1に続いて変数名要素連鎖をた
どると,5−4が得られる。これは変数名“i2”に対
応する変数名要素であるので,続いて変数要素連鎖をた
どると5−2,5−3が得られる。それぞれ,ブロック
B2とB3において定義された変数i2に対応する変数
要素である。
【0078】図10は,こうして得られた第2ブロック
リストの例を示す。これは変数名“i1”をもとに得ら
れたものである。すなわち,変数名“i1”を持つ変数
はブロックB1とB5において定義されており,それぞ
れの変数に対応するシンボル要素番号はn1,n2であ
ることを示している。
【0079】図11は,指定行番号と指定変数名より,
その行より参照され,かつその変数名をもつ変数のシン
ボル要素番号を求める処理の流れ図である。はじめに処
理R1において,指定変数名をもとに第2ブロックリス
トを生成する。
【0080】続いて処理R2において,第2ブロックリ
ストの要素数を調べ,それが0なら,処理R3において
処理を終える。これはその変数名がプログラム内で定義
されていないことを意味する。また処理R2において要
素数が1なら,その指定変数名をもつ変数が一つである
ため,当該要素よりシンボル要素番号を取り出して結果
とし,処理を終える。また,処理R2において要素数が
2以上であれば,処理R5に進む。
【0081】処理R5において指定行番号をもとに第1
ブロックリストを生成する。続いて処理R6において,
第1ブロックリストの先頭要素を取り出す。もし要素が
存在しなかったなら,処理R10に進んで処理を終え
る。これは指定行より,指定変数が参照できないことを
意味する。処理R6においてもし要素が存在したなら,
処理R7に進む。
【0082】処理R7において,第1ブロックリストよ
り取り出した当該要素中のブロックIDをもとに,第2
ブロックリスト中で,同一ブロックIDを持つ要素を探
す。続いて,処理R8において,もし要素が存在したな
ら,処理R11に進む。また存在しなかったなら,処理
R9に進む。
【0083】処理R11において,第2ブロックリスト
中の該当要素より,シンボル要素番号を取り出し,それ
を結果として処理を終える。処理R9においては,第1
ブロックリスト中の次の要素を取り出す。ただし次の要
素が存在しなかったなら,処理R10に進んで処理を終
える。これは指定行より,指定変数が参照できないこと
を意味する。
【0084】処理R9において要素が取り出せたなら,
処理R7に進む。図12は本発明の実施例全体の流れを
示す流れ図である。キーボード・ディスプレイ装置13
より,利用者が指定する行番号と変数名を入力し,指定
行より参照され,指定変数名を持つ変数を探索したの
ち,そのアドレスを求めて,メモリダンプ情報の当該ア
ドレスより変数の値を読み出してキーボード・ディスプ
レイ装置13に表示する処理である。
【0085】はじめに処理S1において,プログラムB
のシンボルテーブルより,区間情報,ブロック木構造情
報,変数名・ブロック対応情報を生成する。続いて処理
S2において,キーボード・ディスプレイ装置より,利
用者が指定する,ソースプログラム内の行番号と変数名
を入力する。もしここで終了指示を入力した場合には,
処理S3に進んで処理を終える。
【0086】続いて処理S4において,指定行番号と指
定変数名より,被参照変数のシンボル要素番号を求め
る。続いて,処理S5において,プログラムBのシンボ
ルテーブル中の同一要素番号の要素を読み込む。
【0087】続いて処理S6において,該要素より,変
数アドレス,型,サイズなどを取り出す。続いて処理S
7において,メモリダンプ情報より該当変数領域を読み
込む。
【0088】続いて,処理S8において,行番号,変数
名,変数値をキーボード・ディスプレイ装置に出力す
る。その後処理S2に進む。図13は,本発明に関連す
るシンボル要素の種類とその内容のうち,本実施例で使
用されるものを示す。その他の要素はシンボルテーブル
より除いて処理することにする。
【0089】「ファイルの開始」要素は,翻訳対象とな
ったソースファイルのシンボル要素の開始を示し,ソー
スファイルのファイル名を保有している。ロードモジュ
ールが複数のソースファイルの翻訳結果を結合したもの
である場合,本要素は複数存在する。
【0090】「関数の開始」要素は,関数のシンボル要
素の開始を示し,関数名を保有する。「ブロックの開
始」要素は,関数内のブロック名のシンボル要素の開始
を示し,ソースファイルにおける,ブロックの開始行番
号を保有している。
【0091】「変数要素」は,ソースプログラム内で定
義された変数ごとに存在し,変数名,プログラム内相対
アドレス,型,サイズ,広域変数かソースファイル内変
数かの区分を保有する。
【0092】「ブロックの終了」要素は,関数内のブロ
ック内のシンボル要素の終了を示し,ソースファイルに
おけるブロックの終了行番号を保有している。「関数の
終了」要素は,それまでの関数のシンボル要素の終了を
示す。
【0093】図14から図16までは,シンボル要素の
並び方を示すもので,特に,本実施例を説明するのに必
要な要素の並びのみを示している。図14は,シンボル
テーブル全体の構成を示す。それはいくつかのファイル
並びと,続く外部変数の並びから構成される。ファイル
並びの先頭には,「ファイルの開始」要素が存在し,続
いてファイル内の並びが存在する。ファイル名の並び
は,ファイル内に存在する関数,ブロック,ファイル内
で定義された変数などの要素からなる。
【0094】ただし,ファイル内で定義された変数のう
ち,他のファイルからも参照できる,いわゆる広域変数
は,図14に示す外部変数の並びの中に存在する。な
お,そのような変数が存在しなければ,外部変数の並び
は存在しない。
【0095】図15は,ファイル内の並びを示す。それ
はいくつかの関数並びと,続くファイル内変数の並びか
ら構成される。関数並びには,先頭に「関数の開始」要
素が存在し,続いて一つのブロック並びが存在する。こ
の並びの一つ一つは,関数を構成する最も外側のブロッ
クに対応し,その中で定義されているブロックや変数に
関するシンボル要素からなる並びである。関数並びの中
には,最後に「関数の終了」要素が存在する。
【0096】関数並びが幾つか存在したあと,ファイル
内内部変数の並びが存在する。これはそのファイル内か
ら共通に参照できるが,ファイル外からは参照できない
変数の要素が置かれる。なお,そのような変数が存在し
なければ,ファイル内内部変数の並びは存在しない。
【0097】図16は,ブロック並びを示す。これは関
数内に存在する各ブロックに対応する。それは「ブロッ
クの開始」要素で始まり,「ブロックの終了」要素で終
わる。「ブロックの開始」要素に続いて,そのブロック
で定義された変数に関する変数要素が存在する。もし,
そのブロックに変数が定義されていない場合,システム
によってはその1ブロックの並びは存在しないこともあ
る。ただし,その内側のブロックで変数が定義されてい
れば,後者のブロックに関する並びは存在する。
【0098】ブロック内変数の並びに続いて,もしソー
スプログラムにおいて,そのブロックの内部にブロック
が定義されていれば,ブロック並びが存在する。これは
現在のブロックの内部に存在するブロックの個数だけ並
ぶ。ただし,その内部に変数が定義されていないブロッ
クについては,省略されることがあるのは上と同様であ
る。また,同図では,簡単化のため要素番号を0からの
シーケンス番号で表している。
【0099】図17は,プログラムBに対するシンボル
テーブルを示したものである。ただし,本発明に関連し
ない要素は,シンボルテーブル内の要素の順序を保存し
つつ削除してある。
【0100】この例では,ロードモジュールは一つのソ
ースファイルの翻訳結果である。従って,シンボルテー
ブル全体は,そのソースファイルに対応するファイル
並びでもある。範囲は,図3におけるブロックB7と
B6に対応する。
【0101】範囲の先頭に「ファイルの開始」要素が
存在する。範囲の最後に変数m1に関する変数要素が
存在する。この変数要素の中には,それが外部変数であ
ることが記録されている。図2に示すように,変数m1
は関数外で定義され,かつstatic付でない。その
ために広域変数となったのである。
【0102】「ファイルの開始」要素に続いてファイル
内の並びが存在する。この例では,ファイル内の並び
は関数mainの関数並びと,内部変数s1の変数要素
からなる。この変数要素の中には,その変数が内部変数
であることが記録されている。
【0103】続いてファイル関数mainの開始要素が
存在し,ここからで示した範囲が関数並びである。関
数mainは一つのブロックB5から構成され,その中
に,にそれぞれ対応するブロックB3,B4からな
る。またブロックB3内には,にそれぞれ対応する
ブロックB1,B2からなる。
【0104】ブロックB5の開始要素に続いて,同ブロ
ック内で定義された変数i1の変数要素が存在する。ブ
ロックB3の開始要素に続いて,同ブロック内で定義さ
れた変数i2の変数要素が存在する。
【0105】ブロックB4の開始要素に続いて,同ブロ
ック内で定義された変数i1の変数要素が存在する。ブ
ロック開始要素に続いて,ブロックの終了要素が来る前
にブロック開始要素が来た場合には,はじめのブロック
に,後のブロックが含まれることを意味する。ブロック
開始要素に続いて,そのブロックの終了要素が来てから
ブロック開始要素が来た場合には,はじめのブロックが
終了したあと,次のブロックが始まり,それらはともに
その外側のブロックに含まれることを意味する。このよ
うに,ブロックの開始要素と終了要素の順序はブロック
間の包含関係を示している。これをもとに,図3に示す
ブロック木構造を生成することができる。
【0106】また,各変数がどのブロックで定義された
かも,その変数のシンボル要素の位置から求めることが
できる。あるブロックの開始要素に続いて存在する場合
には,そのブロックの内部で定義されている。また,関
数の終了要素に続いて存在する場合には,ファイル内変
数かロードモジュール内の広域変数である。もしそれが
内部変数とシンボル要素内に記録されていればファイル
内の変数であり,外部変数と記録されていればロードモ
ジュール内の広域変数である。このようにして,その変
数がノードに属するかを決定することができる。こうし
て,図3に示す変数名・ブロック対応情報24を生成す
ることができる。
【0107】また,ブロックの開始要素,終了要素には
ソースファイル内の行番号が記録されているので,これ
をもとに図3に示す行区間情報22を生成することがで
きる。
【0108】図18に,本発明の実施例に関係する一つ
のロードモジュールの生成処理の例を示す。また図19
に,複数ソースファイルより生成されたロードモジュー
ルのシンボルテーブルの構成例を示す。複数ソースファ
イルより生成されたロードモジュールについても,一つ
のソースファイルから生成されたロードモジュールと同
様に処理することが可能である。
【0109】本発明は,次のような種々の態様によって
実施することが可能である。 (1) ソースプログラム内の位置全体をブロックの開始位
置および終了位置によって区分して得られる各区間に対
応する要素からなる区間情報と,そのソースプログラム
の各ブロックを木の節(ノード)とし,ブロック間の包
含関係を木構造で表わしたブロック木構造情報と,変数
名に対応して,該変数名を持つ変数を定義しているブロ
ックからなる集合を記憶する変数名・ブロック対応情報
とを作成し,区間情報の要素は,その区間を含む最も内
側のブロックに対応する,木構造情報内のノードへのポ
インタを含むようにし,参照対象変数を決定するための
位置と変数名が与えられたとき,位置をもとに,区間情
報における,該位置を含む区間に対応する要素を求め,
その要素よりポイントされるブロック木構造情報内のノ
ードより,木の根に至る経路上の各ノードに対応するブ
ロックの集合と,変数名・ブロック対応情報において,
その変数名に対応づけられているブロックの集合とに共
通に含まれるブロックのうち,ブロック木構造情報にお
いて最も葉に近いノードに対応するブロックにおいて定
義された,その変数名を持つ変数を参照対象変数と決定
する。
【0110】(2) 上記(1) において,ブロック木構造情
報の各ノードには,親ノードへのポインタと,そのノー
ドに対応するブロックのブロック識別子を含むように構
成し,変数名・ブロック対応情報には,変数名に対応し
て,その変数名を持つ変数を定義している各ブロックの
ブロック識別子からなる集合を記憶させ,位置と変数名
が与えられたとき,その位置をもとに,区間情報におけ
る,該位置を含む区間に対応する要素を求め,その要素
よりポイントされるブロック木構造情報内のノードよ
り,木の根に至る経路上の各ノードが格納するブロック
識別子を集めて第1ブロックリストとし,一方,変数名
をもとに,変数名・ブロック対応情報より,その変数名
に対応して記憶されているブロック識別子を集めて第2
ブロックリストとし,第1ブロックリストと第2ブロッ
クリストとに共通に含まれるブロック識別子のうち,ブ
ロック木構造情報において最も葉に近いノードに格納さ
れていたブロック識別子に対応するブロックにおいて定
義された,その変数名を持つ変数を参照対象変数と決定
する。
【0111】(3) 上記(2) において,ブロック識別子と
して,ブロックの開始位置および終了位置の対,または
ブロックの開始位置,またはブロックの終了位置を使用
する。
【0112】(4) 上記(1) において,ブロック木構造情
報の各ノードは親ノードへのポインタを含み,変数名・
ブロック対応情報は変数名に対応して,その変数名を持
つ変数を定義しているブロックに対応する,ブロック木
構造情報内のノードへのポインタからなる集合を記憶す
るようにし,位置と変数名が与えられたとき,区間情報
の要素のうち,その位置を含む区間に対応する要素が含
むブロック木構造情報内のノードへのポインタと,ブロ
ック木構造情報において,当該ポインタによって指され
るブロック木構造情報内のノードから,木の根に至る経
路上の各ノードに格納された,親ノードへのポインタを
集めて第1ブロックリストとし,一方,変数名をもと
に,変数名・ブロック対応情報において,その変数名に
対応して記憶されている,ブロック木構造情報内のノー
ドへのポインタからなる集合を第2ブロックリストと
し,それらの第1ブロックリストと第2ブロックリスト
とに共通に含まれるポインタによって指される,ブロッ
ク木構造情報の中のノードのうち,最も葉に近いノード
に対応するブロックで定義された,その変数名を持つ変
数を参照対象変数と決定する。
【0113】(5) 上記(1) 〜(4) において,区間情報
は,プログラム内のブロックのうち,その中で変数が定
義されているブロックの開始位置と終了位置によってソ
ースプログラム全体を分割して得られる各区間に対応す
る要素からなり,かつブロック木構造情報はこれらのブ
ロックに対応するノードからなるようにする。
【0114】(6) 上記(1) 〜(5) において,区間情報の
要素には,区間の範囲情報がさらに含まれるようにす
る。 (7) 上記(1) 〜(6) において,ソースプログラムが一つ
のソースファイルからなる場合に,位置としてソースプ
ログラム内の行番号を使用する。
【0115】(8) 上記(1) 〜(6) において,ソースプロ
グラムが複数のソースファイルからなる場合に,位置と
してソースファイル名,またはその識別子とそのソース
ファイル内の行番号からなる対を使用する。
【0116】(9) 上記(1) 〜(6) において,ソースプロ
グラムが複数のソースファイルからなる場合に,位置と
して,それらのソースファイルの各行に付した通し行番
号を使用する。
【0117】(10)上記(1) 〜(9) において,ソースプロ
グラムが複数のソースファイルからなる場合に,各ソー
スファイルも一つのブロックを構成するとみなして処理
する。
【0118】(11)上記(2) 〜(10)において,位置および
変数名が与えられたとき,はじめに変数名をもとに第2
ブロックリストを生成し,もしその要素数が一つである
場合は,その要素に対応するブロックで定義された,そ
の変数名を持つ変数を参照対象変数と決定し,そうでな
い場合は続いて第1ブロックリストを生成し,以下,上
記(2) ないし(10)に示す処理に従って参照対象変数を決
定する。
【0119】(12)上記(2) 〜(11)において,変数名・ブ
ロック対応情報の要素は,変数名に対応して記憶してい
るブロックからなる集合を記憶し,かつ該集合の各要素
に対応して,そのブロック内で定義された,その変数名
を持つ変数に対応する変数情報を記憶し,第2ブロック
リストの要素にはその変数情報を含める。
【0120】(13)上記(12)において,変数情報として,
シンボル要素またはシンボルテーブルにおけるシンボル
要素番号を用いる。 (14)上記(6) において,参照対象変数決定処理を繰り返
し行う場合に,一度参照した変数については,参照した
変数に関する変数名,区間の範囲情報,変数情報を要素
として蓄積域に蓄積しておき,参照対象変数決定処理に
おいて,まず蓄積域を探索し,指定された変数名と位置
がそれぞれ合致する要素が存在する場合はそれに対応す
る変数情報を使用し,合致する要素が存在しない場合に
のみ参照対象変数探索処理を行って変数情報を得る。
【0121】(15)上記(1) 〜(14)において,参照対象変
数決定処理を繰り返し行う場合に,一度参照した変数に
ついては,生成した第1ブロックリストを蓄積域に蓄積
し,現在行が蓄積域のいずれかの第1ブロックリストに
該当する場合はそれを使用する。
【0122】(16)上記(1) 〜(15)において,参照対象変
数決定処理を繰り返し行う場合に,一度参照した変数に
ついては,生成した第2ブロックリストを蓄積域に蓄積
し,変数名が蓄積域のいずれかの第2ブロックリストに
該当する場合には,それを使用する。
【0123】
【発明の効果】以上説明したように,本発明によれば,
ソースプログラム内の位置と変数名とから,その参照対
象変数を決定する処理を高速化することが可能になり,
デバッガやインタプリタ等の処理性能を向上させること
ができる。
【図面の簡単な説明】
【図1】本発明の全体構成図である。
【図2】本発明の実施例の処理対象となるプログラムB
の例を示す図である。
【図3】本発明の実施例に係る区間情報,ブロック木構
造情報,変数名・ブロック対応情報の概要を示す図であ
る。
【図4】本発明の実施例に係る区間情報の構成例を示す
図である。
【図5】本発明の実施例に係るブロック木構造情報の構
成例を示す図である。
【図6】本発明の実施例に係る第1ブロックリスト生成
処理のフローチャートである。
【図7】本発明の実施例における第1ブロックリストの
例を示す図である。
【図8】本発明の実施例における変数名・ブロック対応
情報の構成例を示す図である。
【図9】本発明の実施例に係る第2ブロックリスト生成
処理のフローチャートである。
【図10】本発明の実施例における第2ブロックリスト
の例を示す図である。
【図11】本発明の実施例に係る被参照変数のシンボル
要素の番号を求める処理のフローチャートである。
【図12】本発明の実施例の全体の流れを示すフローチ
ャートである。
【図13】本発明の実施例に関係するシンボル要素の種
類を示す図である。
【図14】本発明の実施例で用いるシンボルテーブル全
体の構造を示す図である。
【図15】図14に示すシンボルテーブルにおけるファ
イル内の並びを示す図である。
【図16】図15に示すシンボルテーブルにおけるブロ
ック並びを示す図である。
【図17】図2に示すプログラムBに対するシンボルテ
ーブルを示す図である。
【図18】本発明の実施例に関係する一つのロードモジ
ュールの生成処理を示す図である。
【図19】本発明の実施例に関係する複数ソースファイ
ルより生成されたロードモジュールのシンボルテーブル
の構成例を示す図である。
【符号の説明】
10 中央処理装置(CPU) 11 主記憶装置(MEM) 12 外部記憶装置 13 キーボード・ディスプレイ装置 20 プログラムBのソースプログラム読み込み域 21 プログラムBのシンボルテーブル読み込み域 22 区間情報 23 ブロック木構造情報 24 変数名・ブロック対応情報 25 プログラムBのメモリダンプ情報読み込み域
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 特開 平4−236635(JP,A) 特開 昭62−198934(JP,A) 特開 平4−165533(JP,A) 特開 平2−159630(JP,A) 特開 昭64−38836(JP,A) 特開 昭61−213936(JP,A) 特開 昭57−191761(JP,A) インターフェース,CQ出版社,第17 巻第8号(no.171),1991年8月, p.150−166 佐々政孝,「プログラミング言語処理 系」,岩波書店,1989,p.70−73 (58)調査した分野(Int.Cl.7,DB名) G06F 9/06 G06F 9/45 G06F 11/28 - 11/36

Claims (5)

    (57)【特許請求の範囲】
  1. 【請求項1】 ブロック構造を持つ言語で記述されたソ
    ースプログラムにおけるプログラム内の位置と変数名を
    もとに,その位置より参照される,その変数名を持つプ
    ログラム内の変数を決定する参照対象変数決定処理方法
    において, 前記ソースプログラム内の位置全体をブロックの開始位
    置および終了位置によって区分して得られる各区間に対
    応する要素の情報を持つ区間情報と, 該ソースプログラムの各ブロックを木のノードとし,
    れらの各ノードに少なくとも親ノードへのポインタと,
    該ノードに対応するブロックのブロック識別子とを持た
    せることによりブロック間の包含関係を木構造で表わし
    たブロック木構造情報と, 変数名に対応して,その各変数名を持つ変数を定義して
    いる各ブロックのブロック識別子からなる集合を記憶す
    る変数名・ブロック対応情報とを作成し, 前記区間情報の要素に,その区間を含む最も内側のブロ
    ックに対応する,前記ブロック木構造情報内のノードへ
    のポインタを含むようにし, 参照対象変数の決定にあたって位置と変数名が与えられ
    たとき, その位置をもとに,前記区間情報における,該位置を含
    む区間に対応する要素を求め,その要素よりポイントさ
    れる前記ブロック木構造情報内のノードより,木の根に
    至る経路上の各ノードが格納するブロック識別子を集め
    た第1ブロックリストと, 変数名をもとに,前記変数名・ブロック対応情報より,
    その変数名に対応して記憶されているブロック識別子を
    集めた第2ブロックリストと に共通に含まれるブロック
    識別子のうち,前記ブロック木構造情報において最も葉
    に近いノードに格納されていたブロック識別子に 対応す
    るブロックにおいて定義された,その変数名を持つ変数
    を参照対象変数と決定することを特徴とする参照対象変
    数決定処理方法。
  2. 【請求項2】 ブロック構造を持つ言語で記述されたソ
    ースプログラムにおけるプログラム内の位置と変数名を
    もとに,その位置より参照される,その変数名を持つプ
    ログラム内の変数を決定する参照対象変数決定処理方法
    において, 前記ソースプログラム内の位置全体をブロックの開始位
    置および終了位置によ って区分して得られる各区間に対
    応する要素の情報を持つ区間情報と, 該ソースプログラムの各ブロックを木のノードとし,こ
    れらの各ノードに少なくとも親ノードへのポインタを持
    たせることにより,ブロック間の包含関係を木構造で表
    わしたブロック木構造情報と, 変数名に対応して,その各変数名を持つ変数を定義して
    いるブロックに対応する,前記ブロック木構造情報内の
    ノードへのポインタからなる集合を記憶する変数名・ブ
    ロック対応情報とを作成し, 前記区間情報の要素に,その区間を含む最も内側のブロ
    ックに対応する,前記ブロック木構造情報内のノードへ
    のポインタを含むようにし, 参照対象変数の決定にあたって位置と変数名が与えられ
    たとき, 前記区間情報の要素のうち,該位置を含む区間に対応す
    る要素が含む前記ブロック木構造情報内のノードへのポ
    インタをもとに,前記ブロック木構造情報において,当
    該ポインタによって指される前記ブロック木構造情報内
    のノードから,木の根に至る経路上の各ノードに格納さ
    れた,親ノードへのポインタを集めた第1ブロックリス
    トと, 変数名をもとに,前記変数名・ブロック対応情報におい
    て,その変数名に対応して記憶されている,前記ブロッ
    ク木構造情報内のノードへのポインタからなる集合の第
    2ブロックリストと に共通に含まれるポインタによって
    指される,前記ブロック木構造情報の中のノードのう
    ち,最も葉に近いノードに対応するブロックで定義され
    た,その変数名を持つ変数を参照対象変数と決定する
    とを特徴とする参照対象変数決定処理方法。
  3. 【請求項3】 請求項1または請求項2記載の参照対象
    変数決定処理方法において, ソースプログラムが複数のソースファイルからなる場合
    に,各ソースファイルもそれぞれ一つのブロックを構成
    するとみなして処理することを特徴とする参照対象変数
    決定処理方法。
  4. 【請求項4】 請求項1,請求項2または請求項3記載
    の参照対象変数決定処理方法において, 参照対象変数決定処理を複数回繰り返して行う場合に,
    一度参照した変数については,生成した第1ブロックリ
    ストまたは第2ブロックリストを所定の蓄積域に蓄積し
    ておき,現在位置が蓄積域のいずれかの第1ブロックリ
    ストに該当する場合,または変数名が蓄積域のいずれか
    の第2ブロックリストに該当する場合には,それを使用
    することを特徴とする参照対象変数決定処理方法。
  5. 【請求項5】 ブロック構造を持つソースプログラムを
    入力し,請求項1,請求項2または請求項3記載におけ
    る区間情報と,ブロック木構造情報と,変数名・ブロッ
    ク対応情報とを,オブジェクトプログラムの一部として
    出力する処理手段を備えたことを特徴とする翻訳処理シ
    ステム。
JP29989192A 1992-11-10 1992-11-10 参照対象変数決定処理方法および翻訳処理システム Expired - Fee Related JP3205406B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP29989192A JP3205406B2 (ja) 1992-11-10 1992-11-10 参照対象変数決定処理方法および翻訳処理システム
US08/758,299 US5721924A (en) 1992-11-10 1996-12-03 Method and device for obtaining a value of a referred to variable defined in a source program having a specific variable name

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP29989192A JP3205406B2 (ja) 1992-11-10 1992-11-10 参照対象変数決定処理方法および翻訳処理システム

Publications (2)

Publication Number Publication Date
JPH06149589A JPH06149589A (ja) 1994-05-27
JP3205406B2 true JP3205406B2 (ja) 2001-09-04

Family

ID=17878188

Family Applications (1)

Application Number Title Priority Date Filing Date
JP29989192A Expired - Fee Related JP3205406B2 (ja) 1992-11-10 1992-11-10 参照対象変数決定処理方法および翻訳処理システム

Country Status (2)

Country Link
US (1) US5721924A (ja)
JP (1) JP3205406B2 (ja)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7356809B1 (en) * 1991-03-01 2008-04-08 Intel Corporation Programmable interpretive virtual machine
US6292790B1 (en) * 1997-10-20 2001-09-18 James E. Krahn Apparatus for importing and exporting partially encrypted configuration data
JPH11327879A (ja) * 1998-05-15 1999-11-30 Fujitsu Ltd 変数検索装置及び方法並びに変数検索プログラムを記録したコンピュータ読取り可能な記録媒体
JP2001216337A (ja) * 2000-02-01 2001-08-10 Rooran:Kk Cpuコアの開発支援システムとその開発支援方法及び開発支援用プログラムを記録した記録媒体
JP2001337823A (ja) * 2000-05-25 2001-12-07 Sony Corp コンポーネントウェア作成方法および記録媒体
US20090199163A1 (en) * 2008-01-31 2009-08-06 International Business Machines Corporation Debugger assistance for locating values at runtime
CN103902255B (zh) * 2012-12-24 2019-01-15 腾讯科技(深圳)有限公司 一种函数关系调用树的生成方法及系统
US9753710B2 (en) * 2013-11-07 2017-09-05 Netronome Systems, Inc. Resource allocation with hierarchical scope
US9619214B2 (en) 2014-08-13 2017-04-11 International Business Machines Corporation Compiler optimizations for vector instructions
US10169014B2 (en) 2014-12-19 2019-01-01 International Business Machines Corporation Compiler method for generating instructions for vector operations in a multi-endian instruction set
US9588746B2 (en) 2014-12-19 2017-03-07 International Business Machines Corporation Compiler method for generating instructions for vector operations on a multi-endian processor
JP6468098B2 (ja) * 2015-07-02 2019-02-13 富士通株式会社 情報処理プログラム、装置、及び方法
US9880821B2 (en) 2015-08-17 2018-01-30 International Business Machines Corporation Compiler optimizations for vector operations that are reformatting-resistant
US9594668B1 (en) * 2015-09-04 2017-03-14 International Business Machines Corporation Debugger display of vector register contents after compiler optimizations for vector instructions
US11409530B2 (en) * 2018-08-16 2022-08-09 Arm Limited System, method and apparatus for executing instructions

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE3270597D1 (en) * 1981-06-30 1986-05-22 Fujitsu Ltd Data processing system
US4667290A (en) * 1984-09-10 1987-05-19 501 Philon, Inc. Compilers using a universal intermediate language
JPS6410353A (en) * 1987-07-03 1989-01-13 Hitachi Ltd Computer file system
US4953084A (en) * 1987-11-16 1990-08-28 Hewlett-Packard Company Method and apparatus using variable ranges to support symbolic debugging of optimized code
US5038348A (en) * 1988-07-01 1991-08-06 Sharp Kabushiki Kaisha Apparatus for debugging a data flow program
US5261103A (en) * 1988-09-12 1993-11-09 Hitachi, Ltd. Method of and system for compiling source program
JPH02272645A (ja) * 1989-04-14 1990-11-07 Hitachi Ltd プログラム・デバツグ支援方法
EP0423989A3 (en) * 1989-10-16 1992-09-23 Hewlett-Packard Company Software compiler and linker with improved line number table
US5212794A (en) * 1990-06-01 1993-05-18 Hewlett-Packard Company Method for optimizing computer code to provide more efficient execution on computers having cache memories

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
インターフェース,CQ出版社,第17巻第8号(no.171),1991年8月,p.150−166
佐々政孝,「プログラミング言語処理系」,岩波書店,1989,p.70−73

Also Published As

Publication number Publication date
JPH06149589A (ja) 1994-05-27
US5721924A (en) 1998-02-24

Similar Documents

Publication Publication Date Title
US5581756A (en) Network database access system to which builds a table tree in response to a relational query
JP3205406B2 (ja) 参照対象変数決定処理方法および翻訳処理システム
JP2770715B2 (ja) 構造化文書検索装置
US9092417B2 (en) Systems and methods for extracting data from a document in an electronic format
US6925462B2 (en) Database management system, and query method and query execution program in the database management system
US20040167917A1 (en) Database processing method and system
US4935876A (en) Knowledge base management method and system
JPH0776958B2 (ja) 文書整形装置
JP3828379B2 (ja) テスト仕様生成支援装置、方法、プログラム及び記録媒体
CN114201615B (zh) 基于数据快照的科研数据变动回顾方法及服务器
US5649180A (en) Method for generating hierarchical specification information from software
US20050086647A1 (en) Apparatus for and method of creating computer program specifications, and computer program product
JP4954674B2 (ja) ソフトウェア開発支援方法、ソフトウェア開発支援装置、ソフトウェア開発支援プログラム、及び計算機システム
CN116126918A (zh) 数据生成方法、信息筛选方法、设备以及介质
JP2925042B2 (ja) 情報リンク生成方法
JP3516843B2 (ja) データベースアクセス方法
JP4663526B2 (ja) 帳票作成支援装置、帳票作成支援方法、および帳票作成支援プログラム
JP2722684B2 (ja) ファイルシステムの検索装置
JPH0524549B2 (ja)
JPH11161666A (ja) ドキュメントデータ検索方法および装置、並びにドキュメント編集装置
JP3305782B2 (ja) ソフトウェア標準化方法およびソフトウェア生産物の解析方法
JP2724235B2 (ja) 変数名称推論装置
JP3289894B2 (ja) 翻訳知識獲得方法及び装置並びに翻訳処理方法及び装置
JP3590211B2 (ja) データベース管理方式
JPH10207909A (ja) 文書検索システムおよび方法

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20010619

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

Free format text: PAYMENT UNTIL: 20090629

Year of fee payment: 8

LAPS Cancellation because of no payment of annual fees