JPH10254687A - プログラム解析装置およびその解析方法 - Google Patents

プログラム解析装置およびその解析方法

Info

Publication number
JPH10254687A
JPH10254687A JP5598897A JP5598897A JPH10254687A JP H10254687 A JPH10254687 A JP H10254687A JP 5598897 A JP5598897 A JP 5598897A JP 5598897 A JP5598897 A JP 5598897A JP H10254687 A JPH10254687 A JP H10254687A
Authority
JP
Japan
Prior art keywords
instruction
program
name
branch destination
function
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
JP5598897A
Other languages
English (en)
Inventor
Atsushi Kawashima
淳 川島
Hiromi Washida
浩美 鷲田
Seiji Sasaki
誠司 佐々木
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.)
Canon Inc
Original Assignee
Canon Inc
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 Canon Inc filed Critical Canon Inc
Priority to JP5598897A priority Critical patent/JPH10254687A/ja
Publication of JPH10254687A publication Critical patent/JPH10254687A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

(57)【要約】 【課題】 マルチエントリやマルチリターンを持つアセ
ンブリ言語のソースプログラムについての関数の構造を
解析する。 【解決手段】 ソースプログラムを分岐命令で一連のプ
ログラム命令群が接続されるネットワーク構造とみな
し、CPU11はRAM13に記憶されたソースプログ
ラム中の分岐命令を検出して、上記ネットワークの経路
に沿って。プログラム命令群を検索して、CALL命令
に規定されている関数名を抽出していく。この関数名も
分岐命令とみなされ、関数名をもつ一連のプログラム命
令群が検索の対象となる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、アセンブリ言語で
記載されたソースプログラムの制御構造を解析し、解析
の結果得られる制御構造を表示するプログラム解析装置
およびそのプログラム解析方法に関する。
【0002】
【従来の技術】Pascal,FORTRAN,C,C
++,Ada等の構造化言語で記述されたソースプログ
ラムに対してはプログラム中に記載された関数の呼び出
し関係を示す図2(a)のような呼び出しグラフや順次
/選択/繰り返しの制御を記載した図2に示すような図
(pad図と呼ばれる)を作成するプログラム解析装置
が提案されている。
【0003】
【発明が解決しようとする課題】関数呼び出しグラフを
作成する場合、上記従来例では、予め定められた関数名
をプログラム命令の記載順にプログラム検索して抽出す
るという単純なものであるが、アセンブリ言語で記載さ
れたソースプログラムは図1(a),(b),(c)に
示すようにマルチエントリやマルチリターンが許されて
おり、関数の終了位置が明確ではないという特徴があ
る。また、上記構造化言語では制御構造は順次、選択、
繰り返しの3種に限定されるが、アセンブリ言語ではそ
のような取り決めがなく、逐次命令、分岐命令、条件分
岐命令、コール(call)命令、リターン(retu
rn)命令により構成可能なあらゆるパターンの制御構
造が記述される。したがって、CALL命令により関数
を呼び出すことが許容されるアセンブリ言語のプログラ
ムでは、上述のプログラム命令の接続構造の複雑さも加
わって、異なる階層に位置する関数相互間の接続構造ま
では解析することは行われていなかった。
【0004】そこで、本発明の目的は、上述の点に鑑み
て、アセンブリ言語で記載されたソースプログラムの関
数の接続構造を解析可能なプログラム解析装置およびそ
の解析方法を提供することにある。
【0005】
【課題を解決するための手段】このような目的を達成す
るために、請求項1の発明は、アセンブリ言語で記載さ
れたソースプログラムを解析するプログラム解析装置に
おいて、前記ソースプログラムの構造を、分岐を指示す
る第1命令によりプログラム命令の接続経路が分岐する
ネットワーク構造とみなし、当該ネットワーク構造の接
続経路に沿って、関数名によりその関数を呼び出す第2
命令を検出する検出手段と、当該検出された第2命令に
含まれる関数名を抽出する関数名抽出手段と、複数の関
数の間の関係を記憶するための関係記憶手段とを有し、
前記関数名抽出手段により抽出された第2命令で呼び出
される関数の中に他の第2命令が含まれている場合に
は、該関数に含まれる他の第2命令を前記検出手段によ
り検出し、該第2命令と該他の第2命令の接続関係を前
記関係記憶手段に記憶し、前記関数名抽出手段により抽
出された関数名および前記関係記憶手段に記憶された接
続関係を前記ソースプログラムの制御構造を示す情報と
することを特徴とする。
【0006】請求項2の発明は、請求項1に記載のプロ
グラム解析装置において、前記接続名と接続関係をツリ
ー形態で可視出力する出力手段をさらに具えたことを特
徴とする。
【0007】請求項3の発明は、請求項1に記載のプロ
グラム解析装置において、前記検出手段は前記第1命令
に含まれる分岐先名を記憶しておくための分岐先記憶手
段を有し、前記検出手段は、前記ソースプログラムを検
索して前記第1命令を検出し、当該検出した第1命令に
含まれる分岐先名を前記分岐先記憶手段に記憶し、当該
記憶された分岐先名に基づき分岐先のプログラム命令群
を順次に検索し、前記第2命令を検出することを特徴と
する。
【0008】請求項4の発明は、請求項3に記載のプロ
グラム解析装置において、前記分岐先記憶手段はFIF
O構造であることを特徴とする。
【0009】請求項5の発明は、請求項3に記載のプロ
グラム解析装置において、前記分岐先記憶手段は、検索
済みを示す情報を前記分岐先名に関連付けて記憶する記
憶領域を有し、前記検出手段は、分岐先名の示す一連の
プログラム命令群の検索終了後、該分岐先記憶手段に検
索済みを示す情報を記憶し、検索済みの情報を持つ分岐
先名と同じ分岐先名が新たに検出された場合には、該新
たに検出された分岐先名を前記分岐先記憶手段に記憶し
ないことを特徴とする。
【0010】請求項6の発明は、請求項1に記載のプロ
グラム解析装置において、前記第1命令は条件無しで分
岐を指示する無条件分岐命令を含むことを特徴とする。
【0011】請求項7の発明は、請求項1に記載のプロ
グラム解析装置において、前記第1命令は条件に応じて
分岐先を指定する条件分岐命令を含むことを特徴とす
る。
【0012】請求項8の発明は、請求項1に記載のプロ
グラム解析装置において、前記第2命令を前記第1命令
とみなし、前記第2命令で呼び出される関数名を分岐先
とすることを特徴とする。
【0013】請求項9の発明は、請求項1に記載のプロ
グラム解析装置において、前記関数名の示す関数の中で
使用する変数名を抽出する変数名抽出手段をさらに具え
たことを特徴とする。
【0014】請求項10の発明は、請求項9に記載のプ
ログラム解析装置において、前記関数名と前記変数名と
を互いに関連付けて可視出力する変数名出力手段をさら
に具えたことを特徴とする。
【0015】請求項11の発明は、アセンブリ言語で記
載されたソースプログラムを解析するプログラム解析装
置のプログラム解析方法において、前記プログラム解析
装置は内部の記憶装置に記憶された前記ソースプログラ
ムの構造を、分岐を指示する第1命令によりプログラム
命令の接続経路が分岐するネットワーク構造とみなし、
当該ネットワーク構造の接続経路に沿って、関数名によ
りその関数を呼び出す第2命令を検出し、当該検出され
た第2命令に含まれる関数名を抽出し、抽出された前記
第2命令で呼び出される関数の中に他の第2命令が含ま
れている場合には、該関数に含まれる他の第2命令を検
出し、該第2命令と該他の第2命令の接続関係を前記記
憶装置に記憶し、前記抽出された関数名および前記記憶
装置に記憶された接続関係を前記ソースプログラムの制
御構造を示す情報とすることを特徴とする。
【0016】請求項12の発明は、請求項11に記載の
プログラム解析装置のプログラム解析方法において、前
記接続名と接続関係をツリー形態で可視出力することを
特徴とする。
【0017】請求項13の発明は、請求項11に記載の
プログラム解析装置のプログラム解析方法において、前
記プログラム解析装置は、前記ソースプログラムを検索
して前記第1命令を検出し、当該検出した第1命令に含
まれる分岐先名を前記記憶装置に記憶し、当該記憶され
た分岐先名に基づき分岐先のプログラム命令群を順次に
検索し、前記第2命令を検出することを特徴とする。
【0018】請求項14の発明は、請求項13に記載の
プログラム解析装置のプログラム解析方法において、前
記分岐先名を記憶する前記記憶装置の記憶領域をFIF
O構造とすることを特徴とする。
【0019】請求項15の発明は、請求項13に記載の
プログラム解析装置のプログラム解析方法において、前
記分岐先名を記憶する記憶装置の記憶領域は、検索済み
を示す情報を前記分岐先名に関連付けて記憶する情報記
憶領域を有し、分岐先名の示す一連のプログラム命令群
の検索終了後、該情報記憶領域に検索済みを示す情報を
記憶し、検索済みの情報を持つ分岐先名と同じ分岐先名
が新たに検出された場合には、該新たに検出された分岐
先名を前記記憶装置に記憶しないことを特徴とする。
【0020】請求項16の発明は、請求項11に記載の
プログラム解析装置のプログラム解析方法において、前
記第1命令は条件無しで分岐を指示する無条件分岐命令
を含むことを特徴とする。
【0021】請求項17の発明は、請求項11に記載の
プログラム解析装置のプログラム解析方法において、前
記第1命令は条件に応じて分岐先を指定する条件分岐命
令を含むことを特徴とする。
【0022】請求項18の発明は、請求項11に記載の
プログラム解析装置のプログラム解析方法において、前
記第2命令を前記第1命令とみなし、前記第2命令で呼
び出される関数名を分岐先とすることを特徴とする。
【0023】請求項19の発明は、請求項11に記載の
プログラム解析装置のプログラム解析方法において、前
記プログラム解析装置は前記関数名の示す関数の中で使
用する変数名を抽出することを特徴とする。
【0024】請求項20の発明は、請求項19に記載の
プログラム解析装置のプログラム解析方法において、前
記関数名と前記変数名とを互いに関連付けて可視出力す
ることを特徴とする。
【0025】
【発明の実施の形態】以下、図面を参照して、本発明の
実施形態を詳細に説明する。
【0026】図3および図4を参照して本実施の形態の
プログラム解析方法を説明する。図4において、符号1
は分析対象のアセンブリソースプログラムであり、アセ
ンブリソースプログラムが関数ツリー出力処理2に与え
られると、親子関係(ある関数の実行時にその関数から
次の関数を呼び出すような接続関係)にある関数が検出
される。
【0027】このために、本実施の形態では、プログラ
ム命令の実行経路が、無条件分岐命令、条件分岐命令等
により分岐することに着目し、ソースプログラムを、プ
ログラム命令を順次に接続したネットワーク構造とみな
す。このような観点では図3に示すように分岐命令が、
ネットワークのノードに相当し、実行順に沿ったプログ
ラム命令系列をアークとみなすことができる。
【0028】本実施の形態では、上記分岐命令は、無条
件分岐命令、条件分岐命令およびCALL命令の3種と
する。無条件分岐命令は条件なしに命令の実行経路の分
岐を指示するプログラム命令であり、その中に分岐先を
示すラベル名を含む。条件分岐命令は条件に応じて命令
の実行経路の分岐を指示するプログラム命令であり、条
件の種類に応じて1以上の分岐先が存在する。CALL
命令は関数を呼び出す命令であり、その中に呼び出すべ
き関数名が存在する。これらの、分岐先名および関数名
はアセンブリ言語のソースプログラム中に記載され、次
に、一連のプログラム命令群が記載される。CALL命
令により呼び出される関数、すなわち、一連のプログラ
ム命令群の中にさらにCALL命令を記載して、他の関
数を呼び出し、実行することが可能である。上述の分岐
先名や関数名で位置が指定される一連のプログラム群の
終了位置には、EXIT(エグジット)命令や復帰(リ
ターン)命令等の、プログラム命令が記載される。
【0029】そこで、本実施の形態では図4のソースプ
ログラム1に記載されたプログラム命令を関数ツリー出
力処理2において、ソースプログラム1の実行経路に沿
って検索しながら、たとえば、図3の分岐命令100を
検出すると、分岐命令100の中に記載されている分岐
先名(関数名を含む)を図4のテーブル4に記載する。
次に分岐先の一連のプログラム群(図3の符号Aで示す
アーク)を検索してCALL命令を検出して、CALL
命令に含まれる関数名を抽出し、抽出した関数名を図4
のテーブル4、テーブル5に格納する。なお、テーブル
5は抽出した関数名を記憶すると共に、接続関係のある
関数名を記憶することにより複数の関数名の接続関係を
記憶するテーブルである。最初に検出された関数名が親
であり、複数の親が存在する。テーブル5は縦横の2次
元構造として、縦方向には異なる親の関数名、横方向に
は親につながる子の関数を記憶する構造とすることがで
きる。
【0030】この検索の過程で、新たに分岐命令101
が検索されると分岐先名を分岐先命令の中から抽出し、
その分岐先名をテーブル4に記憶する。
【0031】このようにして、図3のA→Bの経路で検
索を続け、復帰命令102に到達した場合には、未検索
の分岐先たとえば、符号Cの経路の分岐先名をテーブル
4から取り出して、CALL命令の検索、関数名の取り
出しを行う。
【0032】CALL命令で呼び出される関数名も分岐
先の1つとして、テーブル4に記載されるので、その関
数名(親)を持つ関数、すなわち、一連のプログラム群
が検索される。この検索において、CALL命令および
その中に含まれる関数名が新たに見つかった場合には、
テーブル5に先に登録されている親の関数名の横に新た
に見つかった関数名(子)を記憶する。これにより異な
る階層に位置する関数同士でも親子の関係およびその関
数名をテーブル5に記憶することができる(図4の関数
ツリー表示処理6)。なお、この関数名を持つ一連のプ
ログラム命令群の検索において、演算に使用する変数名
が抽出され、テーブル5の対応関数名に付す形態で抽出
された変数名が記憶される。
【0033】以後、図4のソースプログラム1の全ての
実行経路についてCALL命令の検索および関数名の抽
出を行って、テーブル5に関数名とその親子関係および
使用される変数名を記憶していく。全ての経路の検索が
終了すると、テーブル5に記憶された関数名および親子
関係は符号7で示すようなツリー(木、階層とも呼ばれ
る)形態で表示される。また、関数で使用される変数名
が符号8で示すように関数名と関連付けられて表示され
る。
【0034】このようなプログラム解析方法でプログラ
ム解析を行うプログラム解析装置のシステム構成を図5
に示す。プログラム解析装置には汎用のパーソナルコン
ピュータやワークステーションを使用することができる
ので、ハードの構成の説明は簡単に留める。
【0035】CPU11はOS(オペレーティングシス
テム)に従って、システム制御を行う他、図6〜図8に
示す処理プログラムを実行して、本発明に係るプログラ
ム解析を行う。ROM12には上記OSの一部およびシ
ステムフォント等を記憶している。RAM13はCPU
11に対する入出力データ、たとえば、CPU11の実
行のために、ハードディスク記憶装置(HDD)8から
ローディングされたプログラム、CPU11の演算デー
タ、キーボード16から入力されたデータ、プログラム
解析で得られるデータやテーブルが格納される。
【0036】CRT14は情報の表示を行う。本発明に
係る情報はツリー形態の関数の親子構造と、関数名とそ
の関数で使用される変数名のクロスリファレンスがあ
る。入出力インタフェース(I/O)15はLAN(ロ
ーカルエリアネットワーク)と接続し、他のコンピュー
タから送られたアセンプリプログラムを受信する。
【0037】キーボード16は文字情報等やCPU11
に対する動作指示を入力する。マウス17はCRT14
の表示画面の特定位置を指定することによりその位置に
表示されている情報に関連する動作命令、文字、数値等
を入力する。HDD18は上記OS、プログラム解析プ
ログラム、ツリー形態の表示に使用する図形等を格納す
る。フロッピーディスクドライブ(FDD)19は解析
すべきアセンブリプログラムを記録したフロッピーディ
スクを受け付け、フロッピーディスクからアセンブリプ
ログラムを読み出す。
【0038】このようなシステム構造で行われるプログ
ラム解析処理を次に説明する。
【0039】解析対象のアセンブリプログラムを図9の
符号60に示す。また、図4に示すテーブル4、5の記
憶領域ははRAM13上に用意される。テーブル4はF
IFO(ファーストイン・ファーストアウト)構造を持
つ。
【0040】解析対象のアセンブリプログラムの指定お
よび解析プログラム実行の指示がCPU111に対して
キーボード6またはマウス17により与えられるとCP
U11は図6の解析プログラムをHDD18から読み出
してRAM13にロードした後、実行を開始する。この
とき指定された、図9のアセンブリプログラム60もR
AM13に格納される。CPU11はアセンブリプログ
ラム60の調べたいエントリ位置(プログラムのスター
ト位置)この場合、第1行目をセットし(ステップ2
1)、アセンブリプログラム60の第1行目にチェック
マークを記入する(ステップ22)。チェックマーク
は、その行のプログラム命令(1以上)が現在、解析中
であることを示す。
【0041】最初にMAINの名前をプログラム命令群
の中の第1行めのプログラム命令の種類識別がCPU1
1により行われる。第1行目のプログラム命令はMOV
命令であり、分岐命令、条件分岐命令やCALL命令等
と関係のない命令なので、手順はステップ23〜ステッ
プ32へと進み、チェックマークの行位置が第2行目に
更新される(ステップ32→ステップ22)。
【0042】第2行目のPUSH命令から第3行目のC
MP命令までは関係のない命令であり、ステップ23〜
ステップ32→ステップ22のループ処理が繰り返され
る。チェックマーク位置が第4行目に到達すると、その
行には条件分岐命令であるJZ命令があるので、CPU
11は分岐先名LABEL1をFIFO構造の記憶領域
(以後、ジャンプ先ロケーションテーブルと称する、図
9符号61参照、図4のテーブル4に対応)に記憶する
(ステップ22〜ステップ26→ステップ27、)。な
おFIFOの特徴として、新たに情報を記憶する場合
に、これまでに記憶されている情報は記憶位置が前送り
にされる。情報の記憶位置の更新させて、新しい情報を
記憶することを本実施の形態ではPushと呼ぶことに
する。
【0043】この後、手順はステップ27からステップ
29→ステップ32→ステップ22と進み、チェックマ
ーク位置が第6行目に移動する。ここで、条件分岐命令
JB(図9参照)が検出され、その分岐先LABEL2
がジャンプ先ロケーションテーブル61にPushされ
る(ステップ27)。
【0044】分岐命令が検出されても、復帰命令やEX
IT命令が検出されていないので、チェックマーク位置
は第7行に移動し、ここで、CALL命令が検出され、
関数名“FUN”が抽出される。抽出された関数名“F
UN”がジャンプ先ロケーションテーブル61に格納さ
れると共にRAM13上の親子関係テーブル(図4のテ
ーブル5)62(図9参照)に関数名“FUN”が親と
して記憶されるステップ29→ステップ30)。なお、
このとき、親子関係テーブル62内が検索され、検出さ
れた関数名“FUN”と同じ名前がすでに記憶されてい
る場合には、その登録記憶は中止される。この場合に
は、新規の関数名であるので、親子関係テーブルに登録
記憶される。
【0045】図9のソースプログラム60の例では、以
下、チェックマーク位置の更新が第12行目まで続き、
ここで、復帰命令が検出される(ステップS23のYE
S判定)。以上で、図9のソースプログラム60の第1
行目〜第12行目までの実行経路が終了する。そこで、
CPU11は手順をステップ28→ステップ31へと進
め、次のプログラム命令実行経路、すなわち、ソースプ
ログラム60の第4行目から第8行目へ分岐する実行経
路の検索を行うべく、ジャンプ先ロケーションテーブル
(図9参照)から分岐先名「LABEL1」を取り出し
(ステップ31)、この分岐先名について検索済みの情
報が付加されていないことを確認し(ステップ33のN
O判定)、分岐(ジャンプ)先(図9のソースプログラ
ム60の第8行目)にチェックマーク位置を更新する
(ステップ34→ステップ22)。ステップ22〜ステ
ップ29までの処理で、分岐命令やCALL命令がない
ことが確認され、次にチェックマーク位置が図9のソー
スプログラム60の第9行目に移行する(ステップ32
→ステップ22)。ここで無条件分岐命令のJMP命令
が検出され、ジャンプ先ロケーションテーブルに分岐先
名EXITが登録(PUSH)される(ステップ24→
ステップ25)。
【0046】無条件分岐命令の場合には、その分岐先へ
分岐するべく、手順はステップ25→ステップ28→ス
テップ31へと進み、ここで、図9のソースプログラム
60の第12行目にチェックマーク位置が更新される。
ここで、EXIT命令が確認され、分岐先名「LABE
L1」から始まる一連のプログラム命令群の検索を終了
し、ジャンプ先ロケーションテーブルの分岐先名「LA
BEL1」に検索終了済みの情報が付加される。また、
復帰命令の存在がステップ23で検出され、手順がステ
ップ28→ステップ31へと進み、未検索の分岐先名
「LABEL2」がジャンプ先ロケーションテーブルか
ら取り出され、図9のソースプログラム60の第10行
目にチェックマーク位置が移動される。
【0047】以下同様にして、第10行目〜第12行目
の間の分岐先名「LABEL2」から始まる一連のプロ
グラムの検索が行われる(ステップ23〜ステップ32
→ステップ22のループ処理)。検索が終了するとジャ
ンプ先ロケーションテーブルの分岐先名「LABEL
2」には検索済みの情報が付加される。最後にジャンプ
先ロケーションテーブルから分岐先「EXIT」が取り
出され(ステップ31)、この分岐先での復帰命令の確
認により(ステップ33→ステップ34→ステップ22
→ステップ23のYES判定)、ジャンプ先ロケーショ
ンテーブルの分岐先名「EXIT」にも検索済みの情報
が付加される(ステップ23)。
【0048】これにより全てのプログラム命令の実行経
路の検索が終了したことが確認され(ステップ28)、
図6の処理手順が終了となる。
【0049】以上の処理では親子関係テーブル62には
関数名“FUN”が抽出される。以上説明した例では子
の関数が存在しないが、この関数についても、上記処理
手順で検出される点については詳細な説明を要しないで
あろう。
【0050】図6の処理手順が終了するとCPU11は
図7および図8の処理手順を実行して親子関係テーブル
62を参照し、図4の符号7のようなツリー(木)形態
で関数名とその関数名の親子関係がCRT14に表示さ
れる(図7のステップ41〜ステップ43、図8のステ
ップ51〜ステップ55)。子のない関数名は単独で表
示される。図4の符号7の表示例では関数名“FUNC
1”〜“FUNC4”が親で関数名“FUNC8”が関
数名“FUNC7”の子であることを示している。
【0051】ツリー形態の表示方法については、ディレ
クトリ等をツリー表示する周知の方法を使用すればよ
く、図7および図8の処理手順について詳細な説明を要
しないであろう。なお、ディレクトリ表示と本実施の形
態の関数名表示の違いは2つの親に付属する2つの子関
数が親子の関係(図4のFUNC7とFUNC8との間
の関係)を結ぶことがあるので、これらの関係もツリー
で表示される。このような関係を検出するためには親子
関係テーブル62から子の関数名を検出したときに、こ
の関数名を親として持つ子の関数名を取り出す、あるい
は子の関数名の複数の親を捜すことで階層の異なる接続
関係の2つの関数を親子関係テーブル62から抽出して
表示することができる。
【0052】また、図9の親子関係テーブル62には関
数名ごとにその関数名の関数で使用されている変数名が
格納されているので、これらの関数名と変数名を取り出
し、図4の符号8に示すように表示する。上述のツリー
構造の表示と変数名の表示はユーザのキーボード6から
の指示で切り換えてもよいし、双方の表示を1画面に表
示するようにしてもよい。
【0053】以上説明したように本実施の形態では、ソ
ースプログラムに記載されたプログラム命令をその実行
可能な経路に沿って、全て検索して、CALL命令で呼
び出される関数名を抽出する。これにより、ソースプロ
グラムが図1に示すような複雑なプログラム構造を有し
ていても、重複することなく、関数名を抽出することが
できる。
【0054】上述の実施形態の他に次の形態を実施でき
る。
【0055】1)上述の変数名にはデータを書き込み命
令によりRAM13に書き込むための変数と読み込み命
令によりRAM13から読み込みための変数が含まれて
いる。また、書き込みと読み込み込みの双方を指示する
命令では両方の変数を有している。そこで、変数名を取
得したように書き込み用の変数名と読み込み用の変数名
の種類判別をプログラム命令の内容識別により行い、図
10に示すような書き込み変数テーブル200、読み込
み変数201に関数名と関連付けて記憶し、変数名表示
の際に、読み込みと書き込みの変数を種類分けして表示
することも可能である。
【0056】2)上述の実施の形態では予め与えたアセ
ンブリプログラム全体を解析する例であったが、アセン
ブリプログラムが大きい場合には、アセンブリプログラ
ムの中の解析範囲を範囲指定してもよい。この場合に
は、アセンブリプログラムをCRT14に表示しておい
て、文書のように、解析したい領域をハイライト等によ
り範囲指定する。CPU11は範囲指定された領域のプ
ログラムをRAM13上に取り込んで解析を行う。
【0057】3)上述の実施形態では関数名のみの接続
関係を可視出力するようにしたが、分岐先名および関数
名がテーブル4に記憶されることから、分岐先名の位置
関係を関数名の接続構造の表示に挿入することができ
る。一例としては、分岐先名および関数名をネットワー
クの形態で表示し、分岐先名と関数名を色などで区別し
て表示するとよい。
【0058】4)変数名の表示と関数のツリー表示とを
互いに関連付けることも可能である。たとえば、関数の
ツリー表示の中の特定の関数名をマウス17により指定
し、指定された関数名の関数で使用される変数名を表示
させたり、変数名表示でマウス17により指定された関
数名についてのツリー部分を部分的に表示させることが
実現できる。
【0059】5)上述の実施の形態では可視出力装置の
例としてCRT14を例示したが、印刷装置により上述
のツリー構造を印刷出力してもよいこと勿論である。
【0060】
【発明の効果】以上、説明したように、請求項1、11
の発明では、プログラム命令の実行可能な経路を第1命
令(分岐命令)により見つけ、経路に沿って、第2命令
(CALL命令)を検索していくので、マルチリターン
やマルチエントリを有する複雑なプログラムでも、接続
する関数を検出し、その接続構造を解析することができ
る。
【0061】請求項2、12の発明では、ユーザが関数
名およびその接続構造を目視確認することができる。
【0062】請求項3、13の発明では、分岐先を記憶
しておくことにより1つの経路の検索した後、他の経路
を検索すべく、記憶の分岐先を参照できる。
【0063】請求項4、14の発明では、記憶領域の構
造をFIFOとすることにより、記憶位置を考慮せず、
分岐先を検出した順に分岐先を記憶することができる。
【0064】請求項5、15の発明では、検索済みを示
す情報を分岐先に付加することで同じ第1命令(分岐命
令)がソースプログラム中で重複的に使用されても、同
じ経路の重複検索を回避することができる。
【0065】請求項6〜8、16〜18の発明では、ア
センブリプログラムプログラムで使用される各種の分岐
命令を取り扱うことができる。また、第2命令(CAL
L命令)も第1命令(分岐命令)の1つとして取り扱う
ことで、CALL命令により呼び出される関数の中にさ
らにCALL命令が含まれる関数の接続関係を容易に検
出することができる。
【0066】請求項9、10、19、20の発明では関
数名の検出に関連して、関数で使用される変数名を抽出
し、可視出力することができるので、ユーザはたとえ
ば、変数名のチェックを行うことができる。
【図面の簡単な説明】
【図1】プログラム構造を示す説明図である。
【図2】プログラムの制御構造を説明するための説明図
である。
【図3】本発明実施の形態のプログラム解析方法を説明
するための説明図である。
【図4】本発明実施の形態のプログラム解析方法を説明
するための説明図である。
【図5】本発明実施の形態のプログラム解析装置のシス
テム構成を示すブロック図である。
【図6】CPU11の処理手順を示すフローチャートで
ある。
【図7】CPU11の処理手順を示すフローチャートで
ある。
【図8】CPU11の処理手順を示すフローチャートで
ある。
【図9】プログラム解析処理を説明するための説明図で
ある。
【図10】他のプログラム解析処理を説明するための説
明図である。
【符号の説明】
1、60 ソースプログラム 2 関数ツリー出力処理 3 分岐呼びだし処理 4、5、200、201 テーブル 6 関数ツリー表示処理 7 関数ツリー表示 8 変数名表示 11 CPU 12 ROM 13 RAM 14 CRT 16 キーボード 17 マウス 18 HDD

Claims (20)

    【特許請求の範囲】
  1. 【請求項1】 アセンブリ言語で記載されたソースプロ
    グラムを解析するプログラム解析装置において、前記ソ
    ースプログラムの構造を、分岐を指示する第1命令によ
    りプログラム命令の接続経路が分岐するネットワーク構
    造とみなし、当該ネットワーク構造の接続経路に沿っ
    て、関数名によりその関数を呼び出す第2命令を検出す
    る検出手段と、 当該検出された第2命令に含まれる関数名を抽出する関
    数名抽出手段と、 複数の関数の間の関係を記憶するための関係記憶手段と
    を有し、前記関数名抽出手段により抽出された第2命令
    で呼び出される関数の中に他の第2命令が含まれている
    場合には、該関数に含まれる他の第2命令を前記検出手
    段により検出し、該第2命令と該他の第2命令の接続関
    係を前記関係記憶手段に記憶し、前記関数名抽出手段に
    より抽出された関数名および前記関係記憶手段に記憶さ
    れた接続関係を前記ソースプログラムの制御構造を示す
    情報とすることを特徴とするプログラム解析装置。
  2. 【請求項2】 請求項1に記載のプログラム解析装置に
    おいて、前記接続名と接続関係をツリー形態で可視出力
    する出力手段をさらに具えたことを特徴とするプログラ
    ム解析装置。
  3. 【請求項3】 請求項1に記載のプログラム解析装置に
    おいて、前記検出手段は前記第1命令に含まれる分岐先
    名を記憶しておくための分岐先記憶手段を有し、前記検
    出手段は、前記ソースプログラムを検索して前記第1命
    令を検出し、当該検出した第1命令に含まれる分岐先名
    を前記分岐先記憶手段に記憶し、当該記憶された分岐先
    名に基づき分岐先のプログラム命令群を順次に検索し、
    前記第2命令を検出することを特徴とするプログラム解
    析装置。
  4. 【請求項4】 請求項3に記載のプログラム解析装置に
    おいて、前記分岐先記憶手段はFIFO構造であること
    を特徴とするプログラム解析装置。
  5. 【請求項5】 請求項3に記載のプログラム解析装置に
    おいて、前記分岐先記憶手段は、検索済みを示す情報を
    前記分岐先名に関連付けて記憶する記憶領域を有し、前
    記検出手段は、分岐先名の示す一連のプログラム命令群
    の検索終了後、該分岐先記憶手段に検索済みを示す情報
    を記憶し、検索済みの情報を持つ分岐先名と同じ分岐先
    名が新たに検出された場合には、該新たに検出された分
    岐先名を前記分岐先記憶手段に記憶しないことを特徴と
    するプログラム解析装置。
  6. 【請求項6】 請求項1に記載のプログラム解析装置に
    おいて、前記第1命令は条件無しで分岐を指示する無条
    件分岐命令を含むことを特徴とするプログラム解析装
    置。
  7. 【請求項7】 請求項1に記載のプログラム解析装置に
    おいて、前記第1命令は条件に応じて分岐先を指定する
    条件分岐命令を含むことを特徴とするプログラム解析装
    置。
  8. 【請求項8】 請求項1に記載のプログラム解析装置に
    おいて、前記第2命令を前記第1命令とみなし、前記第
    2命令で呼び出される関数名を分岐先とすることを特徴
    とするプログラム解析装置。
  9. 【請求項9】 請求項1に記載のプログラム解析装置に
    おいて、前記関数名の示す関数の中で使用する変数名を
    抽出する変数名抽出手段をさらに具えたことを特徴とす
    るプログラム解析装置。
  10. 【請求項10】 請求項9に記載のプログラム解析装置
    において、前記関数名と前記変数名とを互いに関連付け
    て可視出力する変数名出力手段をさらに具えたことを特
    徴とするプログラム解析装置。
  11. 【請求項11】 アセンブリ言語で記載されたソースプ
    ログラムを解析するプログラム解析装置のプログラム解
    析方法において、前記プログラム解析装置は内部の記憶
    装置に記憶された前記ソースプログラムの構造を、分岐
    を指示する第1命令によりプログラム命令の接続経路が
    分岐するネットワーク構造とみなし、当該ネットワーク
    構造の接続経路に沿って、関数名によりその関数を呼び
    出す第2命令を検出し、 当該検出された第2命令に含まれる関数名を抽出し、 抽出された前記第2命令で呼び出される関数の中に他の
    第2命令が含まれている場合には、該関数に含まれる他
    の第2命令を検出し、 該第2命令と該他の第2命令の接続関係を前記記憶装置
    に記憶し、 前記抽出された関数名および前記記憶装置に記憶された
    接続関係を前記ソースプログラムの制御構造を示す情報
    とすることを特徴とするプログラム解析装置のプログラ
    ム解析方法。
  12. 【請求項12】 請求項11に記載のプログラム解析装
    置のプログラム解析方法において、前記接続名と接続関
    係をツリー形態で可視出力することを特徴とするプログ
    ラム解析装置のプログラム解析方法。
  13. 【請求項13】 請求項11に記載のプログラム解析装
    置のプログラム解析方法において、前記プログラム解析
    装置は、前記ソースプログラムを検索して前記第1命令
    を検出し、当該検出した第1命令に含まれる分岐先名を
    前記記憶装置に記憶し、当該記憶された分岐先名に基づ
    き分岐先のプログラム命令群を順次に検索し、前記第2
    命令を検出することを特徴とするプログラム解析装置の
    プログラム解析方法。
  14. 【請求項14】 請求項13に記載のプログラム解析装
    置のプログラム解析方法において、前記分岐先名を記憶
    する前記記憶装置の記憶領域をFIFO構造とすること
    を特徴とするプログラム解析装置のプログラム解析方
    法。
  15. 【請求項15】 請求項13に記載のプログラム解析装
    置のプログラム解析方法において、前記分岐先名を記憶
    する記憶装置の記憶領域は、検索済みを示す情報を前記
    分岐先名に関連付けて記憶する情報記憶領域を有し、分
    岐先名の示す一連のプログラム命令群の検索終了後、該
    情報記憶領域に検索済みを示す情報を記憶し、検索済み
    の情報を持つ分岐先名と同じ分岐先名が新たに検出され
    た場合には、該新たに検出された分岐先名を前記記憶装
    置に記憶しないことを特徴とするプログラム解析装置の
    プログラム解析方法。
  16. 【請求項16】 請求項11に記載のプログラム解析装
    置のプログラム解析方法において、前記第1命令は条件
    無しで分岐を指示する無条件分岐命令を含むことを特徴
    とするプログラム解析装置のプログラム解析方法。
  17. 【請求項17】 請求項11に記載のプログラム解析装
    置のプログラム解析方法において、前記第1命令は条件
    に応じて分岐先を指定する条件分岐命令を含むことを特
    徴とするプログラム解析装置のプログラム解析方法。
  18. 【請求項18】 請求項11に記載のプログラム解析装
    置のプログラム解析方法において、前記第2命令を前記
    第1命令とみなし、前記第2命令で呼び出される関数名
    を分岐先とすることを特徴とするプログラム解析装置の
    プログラム解析方法。
  19. 【請求項19】 請求項11に記載のプログラム解析装
    置のプログラム解析方法において、前記プログラム解析
    装置は前記関数名の示す関数の中で使用する変数名を抽
    出することを特徴とするプログラム解析装置のプログラ
    ム解析方法。
  20. 【請求項20】 請求項19に記載のプログラム解析装
    置のプログラム解析方法において、前記関数名と前記変
    数名とを互いに関連付けて可視出力することを特徴とす
    るプログラム解析装置のプログラム解析方法。
JP5598897A 1997-03-11 1997-03-11 プログラム解析装置およびその解析方法 Pending JPH10254687A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP5598897A JPH10254687A (ja) 1997-03-11 1997-03-11 プログラム解析装置およびその解析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP5598897A JPH10254687A (ja) 1997-03-11 1997-03-11 プログラム解析装置およびその解析方法

Publications (1)

Publication Number Publication Date
JPH10254687A true JPH10254687A (ja) 1998-09-25

Family

ID=13014478

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5598897A Pending JPH10254687A (ja) 1997-03-11 1997-03-11 プログラム解析装置およびその解析方法

Country Status (1)

Country Link
JP (1) JPH10254687A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007109044A (ja) * 2005-10-14 2007-04-26 Fujitsu Ltd プログラム変換プログラム、プログラム変換装置、プログラム変換方法
US20100023926A1 (en) * 2008-07-23 2010-01-28 International Business Machines Corporation Call graph dependency extraction by static source code analysis
JP2011034179A (ja) * 2009-07-30 2011-02-17 Toshiba Corp プラントモデル作成システムおよびプラントモデル作成方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007109044A (ja) * 2005-10-14 2007-04-26 Fujitsu Ltd プログラム変換プログラム、プログラム変換装置、プログラム変換方法
US20100023926A1 (en) * 2008-07-23 2010-01-28 International Business Machines Corporation Call graph dependency extraction by static source code analysis
US8347272B2 (en) * 2008-07-23 2013-01-01 International Business Machines Corporation Call graph dependency extraction by static source code analysis
JP2011034179A (ja) * 2009-07-30 2011-02-17 Toshiba Corp プラントモデル作成システムおよびプラントモデル作成方法

Similar Documents

Publication Publication Date Title
US6151570A (en) Translating apparatus, dictionary search apparatus, and translating method
US6516296B1 (en) Translating apparatus, dictionary search apparatus, and translating method
JP2000089944A (ja) 接続ガイドマ―カ表示方法およびシステム、記録媒体
JPH10254687A (ja) プログラム解析装置およびその解析方法
JPH06259420A (ja) 文章編集支援装置
JP2697646B2 (ja) マルチメディア編集装置
JPH08255253A (ja) グラフ表示処理装置およびグラフ表示処理方法
US20090228678A1 (en) Mapping definition creation system and mapping definition creation program
KR960003048B1 (ko) 소프트 웨어 개발 지원 시스템에 있어서의 표시방법
JPH06231224A (ja) 操作ガイダンス生成装置および操作ガイダンスの生成方法
JPH09198236A (ja) 命令順序決定方法および装置
JP3158395B2 (ja) テスト実行フロー作成装置
JP2001282773A (ja) 構造化文書編集装置及び、構造化文書編集方法及び記録媒体
JPH0991311A (ja) 情報蓄積検索装置およびその制御方法
JP2607975B2 (ja) デバック方式
JPH05135013A (ja) 文字処理装置
JPH0675958A (ja) 文書処理装置
JP3926906B2 (ja) N単語連鎖を用いたかな漢字変換システム,方法および記録媒体
JPH086962A (ja) データ検索装置及び検索データの表示方法
JP2607976B2 (ja) デバック方式
JPH07281879A (ja) アプリケーションプログラム編集装置
JPH1011438A (ja) 単語チェッカ
JPH06332684A (ja) プログラム修正支援装置
JPS6398788A (ja) 認識装置
JP2008299868A (ja) 同義語辞書作成支援システム、同義語辞書作成支援方法および同義語辞書作成支援プログラム