JPH05341973A - プログラム解析装置 - Google Patents

プログラム解析装置

Info

Publication number
JPH05341973A
JPH05341973A JP4152328A JP15232892A JPH05341973A JP H05341973 A JPH05341973 A JP H05341973A JP 4152328 A JP4152328 A JP 4152328A JP 15232892 A JP15232892 A JP 15232892A JP H05341973 A JPH05341973 A JP H05341973A
Authority
JP
Japan
Prior art keywords
statement
program
comment
node
diagram
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
JP4152328A
Other languages
English (en)
Inventor
Shiken Yo
志賢 余
Keiin Chin
恵▲いん▼ 陳
Reika Go
玲華 呉
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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co 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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP4152328A priority Critical patent/JPH05341973A/ja
Publication of JPH05341973A publication Critical patent/JPH05341973A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

(57)【要約】 【目的】 効率的なプログラム保守のため、原始プログ
ラムの技術ドキュメントを生成するプログラム解析装置
を提供する。 【構成】 プログラム解析部は原始プログラムの非コメ
ント部分の文法解析を行い、ボトムアップ方式でプログ
ラム解析木を求める。命令文を注釈するコメント部分は
コメント抽出部にて抽出し、コメント分類部で分類し、
プログラム解析木における適当なノードを記憶する。プ
ログラム解析木への変換後、図生成部内のプログラム解
析木渡歩部がプログラム解析木を渡り歩き各命令文ノー
ドを検出する。次いで、コメント文ノード検出部が検出
したノード中のコメントを判断する。そして、このコメ
ント部分を定義図式変換部で変換し、原命令文ノードを
一般図式変換部で変換する。その結果、プログラム解析
木は命令文ノードを単位として図的プログラム表現図構
造木に変換され、抽象化深さに応じたプログラム表現図
が描かれる。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、原始プログラムに関す
る技術ドキュメントを自動的に生成するプログラム解析
装置に関する。
【0002】
【従来の技術】ソフトウェアシステム開発過程におい
て、もっとも工数と経費がかかるのはハードの変更、ハ
ード面の進歩、処理対象の拡張やアルゴリズムの改良等
に伴って、プログラムを変更改良等すること(以下「保
守」という)である。その際、プログラムの内容をプロ
グラマーが完全に理解しないと作業が困難である。この
ため、保守の対象とするプログラム(以下「原始プログ
ラム」という)の理解の助けとするために、原始プログ
ラムの技術内容、論理内容を表現した図を自動的に生成
するプログラム解析装置が提案されている。ところで、
かかるプログラムの構造及び流れをわかり易く説明する
図あるいは表としてはPAD図(Problem An
alysis Diagram)、フローチャート等に
表現する方法がある。一般的に、フローチャートがプロ
グラムを処理する流れのみを示すのに対し、PAD図は
処理の流れ及びプログラムの構造の両方を示せる。この
ため、PAD図の方が多用されているが、従来のPAD
図生成装置としては、例えば本願出願人たる松下電器が
商品化した“C−PADツール”がある。これはソフト
ウェアツール作成装置の一種であり、入力された原始プ
ログラムに対応するPAD図を自動的に生成するもので
ある。従来技術に係るプログラム解析装置の代表とし
て、その“ソフトウェア開発支援システムC−PADツ
ール”のマニュアル(1988年)により、“C−PA
Dツール”を説明する。図22に示すC言語で記載され
たプログラムを例にとると、C−PADツールで処理さ
れた後、図29に示すようなPAD図が生成され、更に
プログラムにおけるコメントはPAD図に独立命令文と
して含まれて生成される。
【0003】次に、本願発明を明細書で開示するにあた
り、プログラム言語としてはC−言語を、その表現図と
してはPAD図を使用するため、これらについて多少言
及しておく。まず、C言語であるが、本C言語は、例え
ば脇英世著 講談社刊 「パソコンC言語入門」、CQ
出版社刊 「トランジスタ技術 SPECIAL No.
14」、CQ出版社刊 「インターフェース1990年
3月号」「同4月号」等いわば技術関係の文庫本や月刊
雑誌等にまで記載されている周知のプログラム言語であ
り、またC言語のプログラムを機械語のプログラムに変
換するCコンパイラー等関連技術も同じく周知である。
このため、本明細書においては、C言語で示されたプロ
グラムの命令内容等をいちいち具体的かつ詳細に説明す
ることはせず、重要な用語の説明等必要最小限にとどめ
る。
【0004】次に、PAD図について簡単に紹介する。
プログラムにおける各種類の命令文によってPAD図式
は基本型、選択型、ループ型及び命令文定義型の四種類
に分けられる。以下に、これらについて図2を参照しつ
つ順に説明する。 図2(a)は基本型図式:簡単な命令文、例えば演算命
令文である。
【0005】図2(b)は選択型図式:条件分岐命令文
を示す。詳しく分ければ、2分岐選択と多分岐選択があ
る。 二分岐選択:Qが真であればstatement 1
を、偽であればstatement 2 を、実行す
る。 図2(c)は多重分岐選択:上から下へ条件と値の組み
合わせの適否を順に検査し、真の組合せをただ一つ選択
の上その処理を実行する。
【0006】図2(d)はループ型図式:Qが真の間、
statementを繰り返し実行する。 図2(e)は命令文定義型図式:一つのコメントで表わ
すタスクを完成するための必要な命令文群である。 PAD図は、以上記の四種類の図式からなる。そして、
これら四種の図式を上から下へ連接することにより、命
令文の実行順序を示すことができる。また、左から右へ
連接することにより、入れ子(nest、手続き中に記
入すること)実行構造でプログラムの演算法を示すこと
ができる。
【0007】このように、PAD図はプログラムの流れ
と構造の両方を示すことが可能であり、また伝統的なフ
ローチャートと異なり複雑な流れ線も不必要である。こ
のため、PAD図はフローチャートに比較してプログラ
ムの基本制御構造を明確に表現でき、ひいてはプログラ
ムを表示するのに優れている。
【0008】
【発明が解決しようとする課題】しかしながら、上記従
来のプログラム解析装置により自動的に生成されたPA
D図は、主に原始プログラムにおける命令文を変換する
ものであり、コメント(/*…*/で挟まれた部分であ
り、人のみが読み、コンパイラは無視する。)を重視し
ていないため内容の理解に不便である。しかるに、実務
ではプログラマが原始プログラムを追跡し解釈する場合
には、ソースコードと共にコメントも参照する。すなわ
ち、簡明なコメントはプログラマがプログラムの設計原
理若しくは基本思想を理解するのに役立つからである。
従って、原始プログラムにおけるコメントをもPAD図
に示すことができるならば、PAD図がより理解し易く
なる。これは、後に詳しく説明するが図22の本発明の
処理対象例としてC言語で示された原始プログラムを図
29に示す“C−PADツール”で生成された従来技術
に係るPAD図と比較参照すれば、コメントの重要性が
わかるであろう。図29の“P−CADツール”では、
一行全てがコメントである場合のみをP−CADツリー
の対象とし、他のタイプのコメントを重視していない。
また、コメントが注釈しようとする命令文を示していな
い。このため、コメントを反映してP−CADツリー化
するという面からはまだまだ不充である。以上より、従
来のプログラム解析装置には以下に示すような問題点が
あるのがわかる。
【0009】(1)コメントとその注釈された文との関
係がはっきりとは示されないこととなり、命令文を解釈
する際のコメントの利用性が低い。 (2)PAD図がプログラムを完全には抽象化していな
い。 本発明はかかる点に鑑みなされたものであり、コメント
とその注釈された命令文との関係をはっきり示し、プロ
グラムを図的プログラム表現図に抽象化するプログラム
解析装置を提供することを目的とする。
【0010】
【課題を解決するための手段】上記目的を達成するため
に、請求項1の発明においては入力された原始プログラ
ムからコメント記号によってコメント部分を抽出するコ
メント抽出部と、コメントと命令文との付属関係によっ
てプログラム解析木における適当な位置を定めるべく前
記コメント抽出部で抽出されたコメントの原始プログラ
ムにおける位置により、式命令文のコメントであるか複
合命令文のコメントであるか命令文群のコメントである
かを判断する分類するコメント分類部と、プログラム言
語の文法を記憶するプログラム言語文法記憶部と、入力
された原始プログラムに対してプログラム言語文法記憶
部の記憶する文法によって文法解析を行い、ボトムアッ
プ方式で各命令文で表わす関数のプログラム解析木を求
めるプログラム解析部と、前記プログラム解析部で得ら
れたプログラム解析木と前記コメント分類部で得られた
分類結果を記憶するために、各ノードのデータ構造に対
して当該ノードの性質を表わす文法コードを記憶する文
法コード記憶欄と、終端ノードとソースコードを記憶す
る終端ノードソースコード記憶欄と、式命令文のコメン
トと複合命令文のノードに属する複合命令文のコメント
を記憶する命令文コメント記憶欄と、命令文群に対し対
応するコメントを指向の上記憶する命令文群のコメント
ポインタ欄と、各子ノードを連接する各子ノードポイン
タを記憶する各子ノードポインタ欄とを有するプログラ
ム解析木記憶部と、プログラム解析木記憶部に記憶され
たプログラム解析木における命令文ノード毎に、当該命
令文ノードに対応する図的プログラム表現形式に変換
し、原始プログラムにおけるコメントを命令文定義図的
プログラム表現形式に変換して一関数の図的プログラム
表現図を生成する図生成部とを備えたことを特徴とする
プログラム解析装置としている。
【0011】請求項2の発明においては原始プログラム
を解析されて得るプログラム解析木を記憶するために、
各ノードのデータ構造は当該ノードの性質を表わす文法
コードを記憶する文法コード記憶欄、終端ノードとソー
スコードを記憶する終端ノードソースコード記憶欄、式
命令文のコメントと複合命令文のノードに属する複合命
令文のコメントを記憶する命令文のコメント記憶欄、命
令文群に対し対応するコメントを指向の上記憶する命令
文群のコメントポインタ欄、各子ノードを連接する各子
ノードポインタを記憶する各子ノードポインタ欄を有す
るプログラム解析木記憶部と、再帰方式でプログラム解
析木記憶部における各ノードを渡り歩いて命令文ノード
を検出するプログラム解析木渡歩部と、前記プログラム
解析木渡歩部で検出された命令文ノードがコメントを持
っているか否かを判断し、コメントを持っている命令文
ノードを定義図式変換部へ渡し、コメントを持っていな
い命令文ノードを一般図式変換部へ渡すコメント命令文
ノード検出部と、図的プログラム表現形式を記憶するた
めに、各ノードで当該ノードのデータ構造は図式のタイ
プを記憶する図的プログラム表現形式欄と動作しようと
する命令文を記憶する図的プログラム表現形式説明欄
と、子ノードの数を記憶する子ノードの数記憶欄と、分
岐毎に各子ノードの分岐条件を処理の上記憶する各子ノ
ード説明欄と、各子ノードポインタの分岐の開始を記憶
する各子ノードポインタ欄と、実行順序が次のノードを
指向して連接の上記憶する次のノードポインタ欄を有す
る図的プログラム表現図構造木記憶部と、前記コメント
命令文ノード検出部で検出されたコメントを持っている
命令文ノードのコメント部分を定義図的プログラム表現
形式ノードに変換して前記図的プログラム表現図構造木
記憶部に記憶し、原命令文ノードを一般図式変換部に渡
す定義図式変換部と、前記コメント命令文ノード検出部
で検出されたコメントを持っていない命令文ノード或い
は前記定義図式変換部から渡された命令文ノードを木構
造対応関係によって一般図的プログラム表現形式ノード
に変換して図的プログラム表現図構造木記憶部に記憶す
る一般図式変換部と、前記図的プログラム表現図構造木
記憶部から読み込まれた図的プログラム表現図構造木が
使用者の設定するプログラム抽象化深さによってコメン
ト命令文を隠すか否かを決定し、違う抽象化程度の図的
プログラム表現図を生成する抽象化図描画部とを備えた
ことを特徴とするプログラム解析装置としている。
【0012】請求項3の発明においては図的プログラム
表現図はPAD図であることを特徴とする請求項1記載
のプログラム解析装置としている。請求項4の発明にお
いては図的プログラム表現図はPAD図であることを特
徴とする請求項2記載のプログラム解析装置としてい
る。
【0013】
【作 用】上記構成により、請求項1の発明に係るプロ
グラム解析装置においては、原始プログラムが本装置に
入力されてから、プログラム解析部がプログラム言語文
法記憶部の記憶する文法規則に従って文法解析をした
後、コメントでない部分に対してボトムアップ方式で各
プログラム関数のプログラム解析木を求める。コメント
である部分はコメント抽出部によって抽出されてから、
コメント分類部で分類された後プログラム解析木におけ
る適当なノードに記憶される。プログラム解析木記憶部
における適当なノードに変換の上記憶された原始プログ
ラムは、図生成部で命令文ノード毎に対応する図的プロ
グラム表現形式に変換され、コメントは命令文定義図的
プログラム表現形式に変換され、この上で一関数の図的
プログラム表現図が作成される。
【0014】請求項2の発明においては、プログラム解
析木記憶部に記憶されたプログラム解析木を対象に、図
生成部におけるプログラム解析木渡歩部がプログラム解
析木を渡り歩いて各命令文ノードを検出する。図生成部
におけるコメント命令文ノード検出部は検出された命令
文ノードがコメントを持っているか否かを判断する。コ
メントを持っている命令文のノードのコメント部分を図
生成部における定義図式変換部で定義図的プログラム表
現形式ノードに変換し、原命令文ノードを一般図式変換
部で処理する。また、コメントを持っていない命令文ノ
ードの子解析木を一般図式変換部でそれに対応する図的
プログラム表現形式ノードに変換する。その結果、プロ
グラム解析木は命令文ノードを単位とし、木構造対応関
係によって図的プログラム表現図構造木に変換される。
当該図的プログラム表現図構造木は抽象化図描画部で設
定された抽象化深さによって対応する抽象化図的プログ
ラム表現図を描く。
【0015】請求項3の発明においては、請求項1の発
明において図的プログラム表現としてPAD図が描かれ
る。請求項4の発明においては、請求項2の発明におい
て図的プログラム表現としてPAD図が描かれる。
【0016】
【実施例】以下に、本発明を実施例に基づき説明する。
図1は本発明に係るプログラム解析装置の一実施例のブ
ロック図である。原始プログラム10は命令文を単位と
して、入力部30により入力される。〔従来の技術〕欄
で説明したように、コメントのない命令文はプログラム
解析部60でプログラム言語文法記憶部20での文法規
則によってその意味内容を理解した上での文法解析が行
われ、その結果適用文法規則に対応する解析木のノード
が作られ、プログラム解析木記憶部70によって記憶さ
れる。プログラム解析木記憶部70における各ノードは
図1の70に示すデータ構造を持っている。解析木を作
る過程において、ノードは終端ノードと中間ノードに分
けられる。ここに、終端ノードは原始プログラムの基本
記号を記憶するものである。また基本記号とはTerm
inalとも呼ばれているものであり、例えば、変数、
常数、演算子などである。中間ノードは文法規則によっ
て簡略(Reduced)された中間文法記号(Non
terminal)を記録する。そのため、プログラム
解析木における各ノードの構造にノードのTermin
al/Nonterminalのコードを記録するデー
タ欄がある。また、terminal文字列欄は原始プ
ログラムの文字列を記録するものである。四つの子ノー
ドポインタ欄は中間文法要素における子要素に対応する
ノードを指向の上記憶する。このような結び方で解析木
を多次元木構造にする。原始プログラムにおけるコメン
トはコメント抽出部40で抽出される。その抽出された
コメントはコメント分類部50で分類される。そのうえ
で、文法解析過程において、解析木における適当な命令
文ノードに置かれる。以上の作業で解析された原始プロ
グラムの全体の解析木はプログラム解析木記憶部70に
記憶される。PAD図生成部80はプログラム解析木を
PAD図に変換する。PAD図生成部80においては、
先ず、プログラム解析木渡歩部81によって記憶された
プログラム解析木を再帰方式で渡り歩く(tree w
alk)。これにより、プログラム解析木記憶部70に
おける命令文ノードを検出する。コメント命令文ノード
検出部82は当該ノードがコメントを持っているか否か
を判断する。コメントを持っていない命令文ノードは一
般図式変換部84でプログラム解析木とPAD図構造木
との木対応関係によって変換される。コメントを持って
いる命令文ノードのコメント部分は定義図式変換部83
で命令文定義PAD図式に変換される。しかる後、命令
文の部分を一般図式変換部84で処理する。変換された
PAD図構造木はPAD図構造木記憶部90に記憶され
る。PAD図が描かれる前に、プログラム解析木を図1
の90に示すデータ構造を有するPAD図構造木に変換
の上記憶することが必要である。PAD図構造木におけ
るノード毎に、一PAD図式に対応する。そのうち、P
AD図構造木記憶部90における各ノードの構造はPA
D図式欄が図式のタイプを記録し、PAD図式説明欄が
基本PAD図式に対して実行する命令文を記憶する。ほ
かのタイプのPAD図式は子ノードの数記憶欄が一図式
の分岐の数を記録し、分岐毎に子ノード説明欄でその分
岐条件を記録し、子ノードポインタ欄が分岐の開始ノー
ドを指向の上記憶し、次のノードポインタが順序実行の
次のノードを指向の上記憶する。抽象化PAD図描画部
85で、PAD図構造木記憶部90によってPAD図構
造木に対応するPAD図110を描く。しかる後、出力
部100から出力する。
【0017】図4は本実施例のフローチャートである。
以下、これにもとづいて説明する。(S1)原始プログ
ラムは本発明に係る−ログラム解析装置に入力された
後、ファイルが終了か否かを判断する。(S2)終了で
はない場合、プログラムの命令文を読み込む。(S3)
当該命令文がコメントであるか否かを判断する。
【0018】(S8)コメントではない場合、文法規則
により文法解析を行う。本実施例ではC言語を採用して
おり、その文法規則を以下に示す。 translation unit :external declaration |external declaration translation unit external declaration :function definition |declaration function definition :declaration specifiers declarator declaration list compound statement |declarator declaration list compound statement |declaration specifiers declarator compound statement |declarator compound statement declaration :declaration specifiers init declarator list';' |declaration specifiers';' declaration list :declaration |declaration list declaration declaration specifiers :storage class specifier specifier qualifie list |storage class specifier |specifier qualifie list storage class specifier : AUTO |REGISTER |STATIC |EXTERN |TYPEDEF type specifier :VOID |CHAR |SHORT |INT |LONG |FLOAT |DOBLE |UNSIGNED |struct or union specifier |enum specifier |typedef name type qualifier :CONST |VOLATILE struct or union specifier :struct or union identifier '{'struct declaration list' }' |struct or union '{'struct declaration list' }' |struct or union identifier struct or union :STRUCT |UNION struct declaration list :struct declaration |struct declaration list struct declaration init declarator list :init declarator |init declarator list ','init declarator init declarator :declarator |declarator '='initializer struct declaration :specifier qualifier list struct declarator list';' specifier qualifier list :type qualifier |type qualifier specifier qualifier list |type specifier |type specifier specifier qualifier list struct declarator list :struct declarator |struct declarator list','struct declarator struct declarator :declarator |declarator','constant expression |','constant expression enum specifier :ENUM identifier'{'enumerator list' }' |ENUM identifier'{'enumerator list',''}' |ENUM'{'enumerator list' }' |ENUM'{'enumerator list',''}' |ENUM identifier emunerator list :enumerator |enumerator list','enumerator enumerator :identifier |identifier'='constant expression declarator :pointer direct declarator |direct declarator direct declarator :identifier |'('declarator')' |direct declarator' 'constant expression' ' |direct declarator' '' ' |direct declarator'('parameter type list')' |direct declarator'('identifier list')' |direct declarator'('')' pointer :'*' |'*'type qualifier list |'*'type qualifier list pointer |'*' pointer type qualifier list :type qualifier |type qualifier list type qualifier parameter type list :parameter list |parameter list',''.''.''.' parameter list :parameter declaration |parameter list','parameter declaration parameter declaration :declaratio specifiers declarator |declaration specifiers abstract declarator |declaration specifiers identifier list :identifier |identifier list','identifier initializer :assignment expression |'{'initializer list' }' |'{'initializer list',''}' initializer list :initializer |initializer list','initializer type name :specifier qualifier list abstract declarator |specifier qualifier list; abstract declarator :pointer |pointer direct abstract declarator |direct abstract declarator direct abstract declarator :'('abstract declarator')' |direct abstract declarator' 'constant expression' ' |' 'constant expression' ' |direct abstract declarator' '' ' |' '' ' |direct abstract declarator'('parameter type list')' |'('parameter type list')' |direct abstract declarator'('')' |'('')' typedef name :identifier statement :labeled statement |case statement |expression statement |compound statement |if statement |switch statement |while statement |do while statement |for statement |goto statement |continue statement |return statement |break statement |COMMENT STATEMENT labeled statement :identifier':'statement case statement :CASE constant expression':'statement |DEFAULT':'statement expression statement :expression';' |';' compound statement :'{'declaration list statement list'}' |'{'statement list' }' |'{'declaration list '}' |'{''}' statement list :statement |statement statement list if statement :IF'('expression')'statement ELSE statement |IF'('expression')'statement switch statement :SWITCH'('expression')'statement while statement :WHILE'('expression')'statement do while statement :DO statement WHILE'('expression')'';' for statement :FOR'('expression';'expression';'expression ')'statement |FOR'('';'expression';'expression')'statement |FOR'('expression';'';' expression ')' statement |FOR'('expression';'expression';'')'statement |FOR'('expression';'';'')'statement |FOR'('';'expression';'')'statement |FOR'('';'';'expression')'statement |FOR'('';'';'')'statement goto statement :GOTO identifier ';' continue statement :CONTINUE ';' break statement :BREAK';' return statement :RETURN';' |RETURN expression';' expression :assignment expression |expression','assignment expression assignment expression :conditional expression |unary expression assignment operator assignment expression assignment operator :'=' |MULBY |DIVBY |MODBY |ADDTO |MINBY |SHRBY |SHLBY |ANDWT |XORWT |ORWT conditional expression :logical OR expression |logical OR expression'?'expression':' conditional expression constant expression :conditional expression logical OR expression :logical AND expression |logical OR expression OR logical AND expression logical AND expression:inclusive OR expression |logical AND expression AND inclusive OR expression inclusive OR expression :exclusive OR expression' |inclusive OR expression ' |'exclusive OR expression exclusive OR expression :AND expression |exclusive OR expression'∧'AND expression(注、∧は上添え字、印字の都合で大 きく示す。) AND expression :equality expression |AND expression '&' equality expression equality expression :relational expression |equality expression EQU relational expression |equality expression NEQU relational expression relational expression :shift expression |relational expression ' <'shift expression |relational expression ' >'shift expression |relational expression LE shift expression |relational expression GE shift expression shift expression :additive expression |shift expression SHL additive expression |shift expression SHR additive expression additive expression :multiplicative expression |additive expression'+'multiplicative expression |additive expression'-'multiplicative expression multiplicative expression :cast expression |multiplicative expression '*'cast expression |multiplicative expression '/ 'cast expression |multiplicative expression '%'cast expression cast expression :unary expression |'('type name')'cast expression buildnode(cast expression,1,1,0,0); ; unary expression :postfix expression |INC unary expression |DEC unary expression |unary operator cast expression |SIZEOF unary expression |SIZEOF'('type name')' unary operator :'&' |'*' |'+' |'-' |'〜' |'!' postfix expression :primary expression |postfix expression' 'expression' ' |postfix expression'('argument expression list')' |postfix expression'('')' |postfix expression'.'identifier |postfix expression ARROW identifier |postfix expression INC |postfix expression DEC primary expression :identifier | constant |'('expression')' argument expression list :assignment expression |argument expression list','assignment expression constant :INT CONST |CHAR CONST |STR CONST |FLT CONST identifier :ID (S9)プログラム解析部60がボトムアップ方式(B
ottom−up、木構造の下から作業をすすめる。)
によって前に読み込まれたプログラム命令文に対応する
プログラム解析木のノードを作る。
【0019】(S4)(S2)のステップで読み込まれ
た命令文がコメントであると(S3)のステップで判断
すれば、コメント分類部50にてその種類が以下のいず
れであるかが判断された上で分類される。その際の分類
規則を次に示す。 1.式命令文(expression)のコメント:命
令文の後に直ぐ付くコメントである(即ち、当該命令文
との間を非空白文字或いは改行で区切るのではない)。
例えば、図3に示す/*Assemble the c
ompletefile name*/、/*Prep
rocess a source program f
ile*/、/*Check the syntax
of asource program file*/
である。前の式命令文を解釈するものである。
【0020】2.複合命令文のコメント:複合命令文の
左の大きい括弧の後に直ぐ付くコメントである(即ち、
当該複合命令文との間を非空白文字或いは改行で区切る
のではない)。例えば、(図3)に示す/*Parsi
ng a source program file*
/である。複合命令文(左の大きい括弧と右の大きい括
弧との間の文)を解釈する。
【0021】3.命令文群のコメント:一行の開始はコ
メントである。(即ち、その前は非空白文字がない)そ
の後に付く命令文群(空白行或いは他のコメント群ま
で)を解釈するのである。例えば、(図3)の第2行目
に示す/*Prepare asource prog
ram file for parsing*/であ
る。当該コメントは空白行(第5行目)によって区切ら
れた命令文群(第3行目及び第4行目の文を含む)を解
釈する。
【0022】4.以上の規則に適合しなければコメント
を処理しない。 (S8)(S3)のステップで当該命令文がコメントで
はないと判断した場合には、本ステップでプログラム解
析部60が文法解析を行う。(S9)プログラム言語文
法のある文法規則を満せば、そして当該文法規則が引用
された場合には、当該文法規則によって対応するプログ
ラム解析木のノードを作る。図5に、if命令文が処理
された後、それに対応するプログラム解析木における子
木を示す。if命令文は五つの部分からなる。それはキ
ーワードif、左括弧’(’、条件式(express
ion)、右括弧’)’、複合命令文である。そのう
ち、if、左括弧、右括弧はif命令文毎に定まるいわ
ば固定された部分であるためわざわざ特別なノードで記
憶する必要はない。一方、条件式と複合命令文は、それ
ぞれ子部分があるためそれぞれのノードで記憶する。こ
のため、図5における各ノードから発する各実線はそれ
ぞれ子ノードポインタに対応し、また実線にて接続され
たノードは当該ノードの子ノードである。破線と破線で
連接された部分は固定部分であるので、子ノードが存在
しない。終端ノードにおける括弧内の文字列は当該ノー
ドにおける終端ノードソースコード記録欄に記録されて
いる値である。
【0023】(S5)(S4)のステップによってコメ
ントが分類された後、各コメントはプログラム解析木に
相応して変換の上プログラム解析木記憶部70に記憶さ
れる。図1の70に示すデータ構造における命令文のコ
メント欄と命令文群のコメントポインタ欄はコメント処
理のために付加し拡張されたものである。そして、命令
文のノードを処理する場合だけ作用する。
【0024】(S6)命令文ノードに対して、命令文群
のコメントポインタ欄は属する命令文群のコメントに対
応するノードを指向の上記憶する。すなわち、同じ命令
文群に属する各命令文ノードに対し命令文群のコメント
ポインタ欄は同じ命令文群のコメントノードを指向の上
記憶する。同じく命令文のコメント記憶欄は式命令文の
ノードに属する式命令文のコメントと、複合命令文のノ
ードに属する複合命令文のコメントを記憶する。
【0025】(S7)(S5)(S6)のステップで式
命令文或いは複合命令文のコメントが判断されたなら
ば、プログラム解析木における適当な命令文ノードを選
択する。そして、コメントを選択された命令文ノードに
置く。(S8)(S5)のステップで命令文群のコメン
トであると判断したなら、文法解析を行う。
【0026】続いて前記三種類のコメントがどのように
プログラム解析木に記憶されるのかを説明する。なお、
式命令文のコメントは主に式命令文を解釈するのに使用
される。(S6)式命令文のコメントが読み込まれてか
ら、当該コメントの前に式命令文が簡略されたものであ
るか否かを判断する。
【0027】(S7)もし、そうであれば、コメントを
当該式命令文に対応するノードにおける命令文のコメン
ト欄に記憶する。なければ、当該コメントを処理しな
い。これを図5を参照しつつ具体的に説明する。本図に
おいて、/*multiplya by b */は分
類規則によって式命令文のコメントであると判断され
る。そして、その前のproduct=a*bはまた式
命令文があるので、このコメントをそれに対応する式命
令文ノードに記憶する。もし、複合命令文のコメントが
読み込まれたら、(S6)と(S7)のステップでは、
当該コメントをそれが属する複合命令文の簡略された後
のノードにおける命令文のコメント欄に記憶する。例え
ば、本図の/*compute product*/は
規則によって複合命令文のコメントであり、その属する
複合命令文の簡略された後のノードにおける命令文のコ
メント欄に記憶する。
【0028】もし、命令文群のコメントであれば、複雑
な処理の必要がある。何故ならば、前に述べたように本
発明は命令文群のコメントを特殊文と見なすからであ
る。即ち、コメント命令文である。以下、これについて
説明する。(S8)(S5)ステップで抽出された後、
文法解析を行う。本ステップでは、命令文として解析す
るので、プログラミング言語の文法に次の文法規則を加
える。statement:COMMENT_STAT
EMENT;命令文群のコメントは(S2)のステップ
で読み込まれてから、前記の文法規則によって本ステッ
プで簡略される。
【0029】(S9)でプログラム解析木にコメント命
令文ノードを作られる。図6にこれらを例示する。本図
において、一行目の/*factorial comp
utation*/は簡略されてコメント命令文になっ
たうえに、コメント命令文ノードを作られる。なお、命
令文群は連続の命令文が同一レベルに属する命令文の集
まりと定義されている。同一のレベルに属する命令文群
と命令文群の間は空白行或いはコメント命令文で区切ら
れる。本図の第2、3、4行目における命令文は即ち第
1行目の、/*factorial computat
ion*/を命令文群のコメントとする命令文群であ
る。第6行目はもう一つの命令文群である。同一の命令
文群における命令文毎に、図4の(S8)のステップに
よって簡略された後に、(S9)のステップで当該命令
文のノードを作る場合、当該ノードの命令文群のコメン
トポインタ欄は属する命令文群のコメントノードを指向
の上記憶する。このため、図6の第2、3、4行目にお
ける命令文に対応するノード命令文群のコメントポイン
タ欄は同一命令文群のコメントノードを指向する(即
ち、/*factorial computation
*/から形成した命令文群のコメントノード)。この三
つのノードを解析木における連接関係ができるようにす
る。
【0030】図4の(S8)と(S9)のステップを経
て原始プログラムのプログラム解析木が得られる。そし
て、プログラム解析木をPAD図構造木に変換する。次
に図7から図10(図7から図10は本来1の図番を採
用するのが妥当であるが、電子出願の都合で4分割す
る。)にC言語の命令文と各PAD図式との対応関係
を、各PAD図式に該当する各ノードのデータ構造で示
す。なお、原始プログラムにおける順序実行命令文はP
AD図で上方から下方へ連接するPAD図式によって表
わす。入れ子構造を持っている命令文、例えばIF(条
件判断)、SWITCH(多重分岐の1)、ループ、に
対応するPAD図式は階層関係を生成する。そして、P
AD図はただ左へ、下へ展開して木構造となる。命令文
定義PAD図式は、文の定義によって原始プログラムに
おけるコメントがPAD図に含まれて表示される。その
結果、プログラマに対する説明性がより良好となる。本
図7〜図10にも三種類のコメントに対応する命令文定
義PAD図式を示す。各図の一番右の所に示すのは記憶
される各図式のPAD図式のデータ構造である。
【0031】プログラム解析木からPAD図構造木への
木構造対応変換過程は図4の(S10)のステップから
始まり、プログラム解析木渡歩部81が再帰方式でプロ
グラム解析木の根ノードから渡り歩く。(S11)プロ
グラム解析木渡歩部81により命令文ノードが検出さ
れ、コメント命令文ノード検出部82が当該ノードがコ
メントを持っているか否かを判断する。
【0032】(S13)もっていないと判断されたな
ら、当該命令文ノードがどんな命令文ノードであるかを
判断する。(S14)、(S15)命令文のタイプによ
って一般PAD図式変換をする。以下に(S15)のス
テップでの各命令文のタイプに対応した変換を説明す
る。
【0033】図11に(S14)と(S15)のステッ
プで式命令文とジャンプ命令文(例えば、GOTO、C
ONTINUE、BREAK、RETURN等)を対応
する一般PAD図式に変換する方式を示す。(S14)
適当なノードが検出されたら、原始コード還元手続によ
って前検出された解析木のノードの以下の子解析木を追
跡して、原始コードを還元する。
【0034】(S15)その結果を新生成されたPAD
図式ノードのPAD図式説明欄に置き、変換を終了す
る。図12から図14に(S14)と(S15)のステ
ップで三種類のループ命令文を対応するループPAD図
式に変換方式を示す。C言語におけるループ命令文には
WHILE、DO−WHILE、FORの三種類があ
る。図12はWHILE命令文をループPAD図式に対
応変換する過程を示すものである。本図において、上の
部分はWHILE命令文の解析木である。そのうち、子
解析木expressionとstatementを含
む。
【0035】(S14)のステップでの原始コード還元
手続によってexpressionノードの以下の子解
析木に対して還元を行う。(S15)のステップでその
結果を新生成されたループPAD図式ノードの子ノード
説明欄に置く。そして、当該子ノードポインタはsta
tementノードからの(S10)から(S15)ま
でのステップでの再帰変換によって生成されたPAD図
式ノードを指向して、変換を終了する。
【0036】ほかの二種類のループ命令文に対しても同
様の処理をする。違うのはただ子ノード説明欄の記憶す
る条件の内容である。すなわち、(S14)のステップ
でDO−WHILE命令文の対応するPAD図式ノード
に子ノード説明の前に‘do’を入れる。同じく、FO
R命令文に対して三つのexpressionノードを
新たに還元する。それから連接して子ノード説明欄に置
く。
【0037】以上により、図12から図14までのルー
プ命令文に対する変換説明を終了する。図15から図1
7に(S14)と(S15)のステップで選択命令文を
選択PAD図式に変換する方式を示す。選択PAD図式
は多条件分岐を処理するのである。IF命令文或いはS
WITCH命令文に多条件分岐がある。図15に、図4
の(S14)と(S15)のステップで簡単なIF命令
文を二分岐選択PAD図式ノードに変換する過程を示
す。なお、図15の上の部分はIF命令文の解析木であ
る。図中、IF命令文は一条件式と二つの動作文を含む
ので、(S15)のステップで生成された選択PAD図
式ノードでは、二つの子ノードポインタ欄がそれぞれ当
該二つの動作命令文の対応する子PAD図ノードを指向
の上記憶する。
【0038】(S14)のステップで条件式は原始コー
ド還元手続によって還元される。(S15)のステップ
で当該PAD図式ノードにおける第一子ノード説明欄に
置かれる。もし、第二の命令文もIF命令文であれば、
入れ子命令文(Nested IF−statemen
t)になる。そして、その対応する選択PAD図式は多
分岐選択に属する。これを図16に示す。本図に示す如
く、Kレベル(Lebel、Lebel=“heigh
t−depth”)を持っている入れ子IF命令文の解
析木に対して生成された選択PAD図式はK個の子ノー
ドがある。各レベルの命令文の条件式は図4の(S1
4)のステップで原始コード還元手続によって還元さ
れ、(S15)のステップで対応位置の子ノード説明欄
に置かれる。当該子ノードポインタ欄は当該条件式の後
の命令文からの再帰変換によって生成された子ノードを
指向の上記憶する。
【0039】図17に(S14)と(S15)のステッ
プでSWITCH命令文を多分岐選択PAD図式に変換
する方式を示す。C言語によって一SWITCH命令文
は一式命令文と一複合命令文を含む。複合命令文におけ
る命令文列はlabeled_statementで沢
山の命令文ブロックを区切られる。各labeled_
statementにおける“case”の後のcon
stant_expressionは条件値である。式
命令文が、あるlabeled_statementの
条件値に相当する場合、属する命令文ブロックはBRE
AK(処理の中断)文命令まで行われる。そのため、選
択PAD図式ノードにおける各子ノード説明欄の内容は
SWITCH命令文の式命令文及びlabeled_s
tatementの条件値を含む。変換過程において、
命令文ブロック、運算式、条件値毎に、それぞれ図2の
(S14)のステップで原始コード還元手続によって還
元して、等号で連接して当該命令文ブロックを行う条件
式を示すのである。そして、図4の(S15)のステッ
プで当該条件式は当該ノードにおける相対順番位置の子
ノード説明欄に置かれる。図17に示すように、当該子
ノードポインタ欄は当該命令文ブロックの開始labe
led_statementにおけるstatemen
tノードからの再帰変換によって生成された子ノードを
指向の上記憶する。
【0040】図4において、検出された文ノードは(S
11)のステップでコメントであることが判断されたな
ら、(S12)のステップでは、当該命令文ノードのコ
メント部分を定義PAD図式に変換する。図18及び図
19(図19は本来図18の(c)とすべきであるが、
電子出願の都合で別の図に分割したものである。)に図
4のステップ(S12)で解析木に記憶された三種類の
コメントをどのように定義図式に変換するのかを示す。
図18の(a)は式命令文のコメントの変換方式であ
る。式命令文ノードにおける命令文のコメント欄に当該
式命令文を解釈するコメントが記憶されたならば必ずそ
れに対応する命令文定義PAD図式を生成する。そし
て、式命令文ノードにおける命令文のコメントは命令文
定義PAD図式の子ノード説明欄に置かれる。このよう
にして原式命令文のPAD図式ノードが生成される。な
お、図4の(S13)から(S15)までのステップは
一般命令文とPAD図式との対応変換である。命令文定
義ノードの子ノードポインタによって式命令文PAD図
式ノードを指向する。同図18の(b)は、複合命令文
ノードに対して、複合命令文ノードにおける命令文のコ
メント欄に当該複合命令文を解釈するコメントが記憶さ
れたなら、対応する命令文定義PAD図式を生成する様
子を示すものである。複合命令文ノードにおける命令文
のコメントは命令文定義PAD図式の子ノード説明欄に
置かれる。原複合命令文における命令文リストはPAD
図式ノードリストを生成される。命令文定義解析図式ノ
ードの子ノードポインタによって当該PAD図式ノード
リストの開始ノードを指向する。同図19に命令文群の
コメントの変換方式を示す。前述したように、命令文リ
ストの解析木において、同じ命令文群に属する命令文ノ
ードの命令文群コメントポインタは当該命令文群を解釈
するコメント命令文ノードを指向する。それはその連接
の関係を示すためである。そのため、変換過程におい
て、当該命令文のコメント欄に記憶された命令文群のコ
メントは新生成された命令文定義PAD図式におけるノ
ードの子ノード説明欄に置かれる。当該命令文群に含ま
れている命令文リストは他のPAD図式ノードリストを
生成される。命令文定義PAD図式ノードの子ノードポ
インタによって当該PAD図式ノードリストの開始ノー
ドを指向する。
【0041】以上でプログラム解析木とPAD図構造木
との対応関係の説明をおえる。プログラム解析木におけ
る各命令文ノードは上記対照方式によって変換された
後、図1のPAD図構造木記憶部90はPAD図と対等
するPAD図構造木を持っている。それから、図4の
(S16)のステップで、PAD図構造木によってPA
D図を描く。
【0042】図20はこのPAD図を描画する細部流れ
を示すものである。以下本図のフローを説明する。(S
20)キーボードよりユーザの指定するPAD図の抽象
化深さを入力する。ここに、抽象化深さというのは描画
しようとするPAD図のレーヤ(layer)あるいは
「詳しさ」に近い概念であり、具体的には後に示す。
【0043】(S21)PAD図の開始図式(BEGI
N)を描画する。(S22)PAD図構造木の開始ノー
ド及びレーヤ=1をパラメータとして図21に示すの再
帰描画手続にてPAD図を描画する。(S23)PAD
図の後に完了図(END)を加えて描画を終了させる。
次に図21に示すのは再帰描画の動作流れを説明する。
【0044】(S24)再帰描画手続がなされている場
合、PAD図式ノードのパラメータのデータ構造によっ
てPAD図式を描画する。(S25)当該PAD図式ノ
ードは命令文定義PAD図式であることが判断される。
(S26)レーヤの指定する抽象化深さより大きい或い
は相当するのを判断されたら、当該命令文定義PAD図
式の以下の子PAD図は描画されない。これにより、生
成されたPAD図の命令文が細部を重視して作成される
のを避け、簡単なPAD図でプログラム全体の流れ及び
その構造を表わすことができる。
【0045】以上の条件に合わない場合、現在のPAD
図式ノードの子ノード毎に更にその横に描画を追加す
る。(S27)、(S28)では各子ノードポインタに
よって指向された子ノード及びlayer+1をパラメ
ータとして再帰方式で再帰描画手続をなして描画する。
【0046】(S29)PAD図式ノードの子ノードが
描画された後、当該ノードの次のノードポインタによっ
て指向されたPAD図式ノード及びlayerをパラメ
ータとして再帰方式で再帰描画手段を呼び出して縦に子
ノードを描画する。前記の方式によって完備的なPAD
図を描画できる。図4に示す(S16)のステップで、
PAD図が描画された後、(S17)のステップで、出
力される。原始プログラムからPAD図への変換はこれ
で終了する。
【0047】図20におけるPAD図を描画する細部流
れにおいて、抽象化深さはPAD図の詳しさに直接影響
を与える。抽象化深さが大きいと完備な命令文の細部を
反映したPAD図を生成できる。一方抽象化深さが小さ
いと生成されたPAD図はプログラム全体の構造をプロ
グラマが速くて理解できる。このため、プログラマはプ
ログラム抽象化の目的に応じて所望の抽象化深さを設定
する。
【0048】次に本装置の動作を例をあげて説明する。
図22は、中に典型的なC言語の命令文及び前に述べた
三種類のコメントが含まれているC言語で記述された原
始プログラムである。原始プログラム10は入力部30
によって入力されてから一連の命令文になって、プログ
ラム解析部60でプログラム言語文法記憶部20の記憶
している文法を参照しつつ文法解析を行う。そして、そ
れに対応して生成されたプログラム解析木(図23及び
図24に示す)をプログラム解析木記憶部70が記憶す
る。(なお、図23と図24は本来は1枚の図である
が、電子出願の都合で分割したものである。)原始プロ
グラムにおけるコメントはコメント分類部50で分類さ
れて、当該プログラム解析木の相応位置に配置されて記
憶される。プログラム解析木渡歩部81では再帰方式に
よって記憶されているプログラム解析木を渡り歩く。コ
メントを持っている解析木の命令文ノードにおけるコメ
ント部分は定義図式変換部83で、命令文定義PAD図
式に変換される。コメントを持っていない一般命令文の
ノードを一般図式変換部84で、図4の(S13)から
(S15)までに示すステップにて変換する。その結
果、図23、図24における解析木は図25に示すPA
D図構造木に変換された上でPAD図構造木記憶部90
に記憶される。最後に、抽象化PAD図描画部85でP
AD図構造木を図20、図21に示す手順によって図2
6に示すPAD図110を描画する。なお、この際、前
述のごとく図20の(S20)のステップで、ユーザは
所望のPAD図の抽象化深さを入力できる。
【0049】図26に示すのはプログラムの抽象化深さ
を設定していない場合であり、原始プログラムの完備な
PAD図である。図27は抽象化深さ=4によって描画
されたPAD図である。本図は簡潔であるけれども原始
プログラムの本質を持っている。図28に、抽象化深さ
=1の最簡潔なPAD図を示す。プログラマはこのPA
D図によって容易に当該プログラムの関数が二つのタス
クを含むことがわかる。それは、“Parsing a
set of source programfil
es”と“return the number of
program files that canno
t be parsed successfully”
である。
【0050】以上、本発明を実施例に基づき説明した
が、本発明は何も上記実施例に限定されないのは勿論で
ある。すなわち、例えば言語はC言語に限定されず、フ
ォートラン、アルゴル等他のもの、図はPAD図でなく
フローチャートでもよい。またハード面においても、例
えば出力部は印字手段でなくCRT等であってもよいの
は勿論である。
【0051】
【発明の効果】以上説明したように本発明に係るプログ
ラム解析装置によれば、原始プログラムから自動的にそ
れに対応する図的プログラム表現図が生成される。その
際、プログラムにおけるコメントは分類されてから、命
令文定義図的プログラム表現形式で図的に表現される。
このため、図的プログラム表現図は多くのコメントを含
めて作成され、プログラムの説明性が高くなる。そのう
え、プログラム抽象化の深さの設定という機能をも有す
るため、異なるプログラム抽象化にてプログラムを解析
することが可能である。
【図面の簡単な説明】
【図1】本発明の一実施例のブロック図である。
【図2】プログラム中の命令文とPAD図式の対応図で
ある。
【図3】コメント命令文の分類規則を示す。
【図4】上記実施例の動作流れ図である。
【図5】C言語で記述された命令文セグメント(式命令
文のコメントと複合命令文のコメントを含む)及びそれ
に対応するプログラム解析木を示す例である。
【図6】C言語で記述された命令文セグメント(命令文
群のコメントを含む)及びそれに対応するプログラム解
析木を示す例である。
【図7】C言語の命令文と各PAD図式との対応関係及
び各PAD図式に該当する各ノードのデータ構造図であ
る。(その1)
【図8】同上。(その2)
【図9】同上。(その3)
【図10】同上。(その4)
【図11】式命令文とジャンプ命令文を基本PAD図式
に対応する変換方式である。
【図12】WHILEループ命令文をループPAD図式
に対応する変換方式である。
【図13】DO−WHILEループ命令文をループPA
D図式に対応する変換方式である。
【図14】FORループ命令文をループPAD図式に対
応する変換方式である。
【図15】簡単IF選択命令文を二分岐選択PAD図式
に対応する変換方式である。
【図16】入れ子IF選択命令文を多分岐選択PAD図
式に対応する変換方式である。
【図17】SWITCH選択命令文を多分岐選択PAD
図式に対応する変換方式である。
【図18】命令文の三種類のコメントを命令文定義PA
D図式に対応する変換方式である。(その(a)及び
(b))
【図19】同上。(その(c))
【図20】図4における(S16)のステップでのPA
D図を描画する細部流れである。
【図21】再帰描画手段を示す流れ図である。
【図22】本発明における一処理例としてのC言語で記
述された原始プログラムである。
【図23】本発明における一処理例としてのプログラム
解析木の図である。(その上部)
【図24】同上。(その下部)
【図25】図23に対応するPAD図構造木の図であ
る。
【図26】本発明における一処理例としての自動的に生
成する完備なPAD図である。
【図27】本発明における一処理例としてのプログラム
抽象化深さ4によって自動的に生成されるPAD図であ
る。
【図28】本発明における一処理例としてのプログラム
抽象化深さ1によって自動的に生成されるPAD図であ
る。
【図29】従来例の“C−PADツール”によるPAD
図である。
【符号の説明】
10 原始プログラム 20 プログラム言語文法記憶部 30 入力部 40 コメント抽出部 50 コメント分類部 60 プログラム解析部 70 プログラム解析木記憶部 80 PAD図生成部 81 プログラム解析木渡歩部 82 コメント命令文ノード検出部 83 定義図式変換部 84 一般図式変換部 85 抽象化PAD図描画部 90 PAD図構造木記憶部 100 出力部 110 PAD図
───────────────────────────────────────────────────── フロントページの続き (72)発明者 陳 恵▲いん▼ 台湾タイ・ペイ・シ・ター・アン・チー・ 10628・レン・アイ・ル・サン・トォア ン・136・ハオ・10・ロウ スン・シャ・ ティエン・チ・チ・シュー・カイ・ファ ー・クゥー・フェン・ユウ・シエン・コ ン・スー内 (72)発明者 呉 玲華 台湾タイ・ペイ・シ・ター・アン・チー・ 10628・レン・アイ・ル・サン・トォア ン・136・ハオ・10・ロウ スン・シャ・ ティエン・チ・チ・シュー・カイ・ファ ー・クゥー・フェン・ユウ・シエン・コ ン・スー内

Claims (4)

    【特許請求の範囲】
  1. 【請求項1】 入力された原始プログラムからコメント
    記号によってコメント部分を抽出するコメント抽出部
    と、 コメントと命令文との付属関係によってプログラム解析
    木における適当な位置を定めるべく前記コメント抽出部
    で抽出されたコメントの原始プログラムにおける位置に
    より、式命令文のコメントであるか複合命令文のコメン
    トであるか命令文群のコメントであるかを判断の上分類
    するコメント分類部と、 プログラム言語の文法を記憶するプログラム言語文法記
    憶部と、 入力された原始プログラムに対して前記プログラム言語
    文法記憶部の記憶する文法によって文法解析を行い、ボ
    トムアップ方式で各命令文で表わす関数のプログラム解
    析木を求めるプログラム解析部と、 前記プログラム解析部で得られたプログラム解析木と前
    記コメント分類部で得られた分類結果を記憶するため
    に、各ノードのデータ構造に対して当該ノードの性質を
    表わす文法コードを記憶する文法コード記憶欄と、終端
    ノードとソースコードを記憶する終端ノードソースコー
    ド記憶欄と、式命令文のコメントと複合命令文のノード
    に属する複合命令文のコメントを記憶する命令文コメン
    ト記憶欄と、命令文群に対し対応するコメントを指向の
    上記憶する命令文群のコメントポインタ欄と、各子ノー
    ドを連接する各子ノードポインタを記憶する各子ノード
    ポインタ欄とを有するプログラム解析木記憶部と、 プログラム解析木記憶部に記憶されたプログラム解析木
    における命令文ノード毎に、当該命令文ノードに対応す
    る図的プログラム表現形式に変換し、原始プログラムに
    おけるコメントを命令文定義図的プログラム表現形式に
    変換して一関数の図的プログラム表現図を生成する図生
    成部とを備えたことを特徴とするプログラム解析装置。
  2. 【請求項2】 原始プログラムを解析されて得るプログ
    ラム解析木を記憶するために、各ノードのデータ構造は
    当該ノードの性質を表わす文法コードを記憶する文法コ
    ード記憶欄、終端ノードとソースコードを記憶する終端
    ノードソースコード記憶欄と、式命令文のコメントと複
    合命令文のノードに属する複合命令文のコメントを記憶
    する命令文のコメント記憶欄と、命令文群に対し対応す
    るコメントを指向の上記憶する命令文群のコメントポイ
    ンタ欄と、各子ノードを連接する各子ノードポインタを
    記憶する各子ノードポインタ欄とを有するプログラム解
    析木記憶部と、 再帰方式でプログラム解析木記憶部における各ノードを
    渡り歩いて命令文ノードを検出するプログラム解析木渡
    歩部と、 前記プログラム解析木渡歩部で検出された命令文ノード
    がコメントを持っているか否かを判断し、コメントを持
    っている命令文ノードを定義図式変換部へ渡し、コメン
    トを持っていない命令文ノードを一般図式変換部へ渡す
    コメント命令文ノード検出部と、 図的プログラム表現形式を記憶するために、各ノードで
    当該ノードのデータ構造は図式のタイプを記憶する図的
    プログラム表現形式欄と、動作しようとする命令文を記
    憶する図的プログラム表現形式説明欄と、子ノードの数
    を記憶する子ノードの数記憶欄と、分岐毎に各子ノード
    の分岐条件を処理の上記憶する各子ノード説明欄と、各
    子ノードポインタの分岐の開始を記憶する各子ノードポ
    インタ欄と、実行順序が次のノードを指向して連接の上
    記憶する次のノードポインタ欄とを有する図的プログラ
    ム表現図構造木記憶部と、 前記コメント命令文ノード検出部で検出されたコメント
    を持っている命令文ノードのコメント部分を定義図的プ
    ログラム表現形式ノードに変換して前記図的プログラム
    表現図構造木記憶部に記憶し、原命令文ノードを一般図
    式変換部に渡す定義図式変換部と、 前記コメント命令文ノード検出部で検出されたコメント
    を持っていない命令文ノード或いは前記定義図式変換部
    から渡された命令文ノードを木構造対応関係によって一
    般図的プログラム表現形式ノードに変換して図的プログ
    ラム表現図構造木記憶部に記憶する一般図式変換部と、 前記図的プログラム表現図構造木記憶部から読み込まれ
    た図的プログラム表現図構造木が使用者の設定するプロ
    グラム抽象化深さによってコメント命令文を隠すか否か
    を決定し、違う抽象化程度の図的プログラム表現図を生
    成する抽象化図描画部とを備えたことを特徴とするプロ
    グラム解析装置。
  3. 【請求項3】 図的プログラム表現図はPAD図である
    ことを特徴とする請求項1記載のプログラム解析装置。
  4. 【請求項4】 図的プログラム表現図はPAD図である
    ことを特徴とする請求項2記載のプログラム解析装置。
JP4152328A 1992-06-11 1992-06-11 プログラム解析装置 Pending JPH05341973A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP4152328A JPH05341973A (ja) 1992-06-11 1992-06-11 プログラム解析装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP4152328A JPH05341973A (ja) 1992-06-11 1992-06-11 プログラム解析装置

Publications (1)

Publication Number Publication Date
JPH05341973A true JPH05341973A (ja) 1993-12-24

Family

ID=15538132

Family Applications (1)

Application Number Title Priority Date Filing Date
JP4152328A Pending JPH05341973A (ja) 1992-06-11 1992-06-11 プログラム解析装置

Country Status (1)

Country Link
JP (1) JPH05341973A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0991125A (ja) * 1995-09-27 1997-04-04 Nec Corp 構造化記号入力方式
WO2024252522A1 (ja) * 2023-06-06 2024-12-12 日本電信電話株式会社 プログラミング支援装置、プログラミング支援方法、およびプログラム

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0991125A (ja) * 1995-09-27 1997-04-04 Nec Corp 構造化記号入力方式
WO2024252522A1 (ja) * 2023-06-06 2024-12-12 日本電信電話株式会社 プログラミング支援装置、プログラミング支援方法、およびプログラム

Similar Documents

Publication Publication Date Title
JP4448881B2 (ja) コンピュータプログラムを発生する方法及びシステム
KR101098718B1 (ko) 재사용 가능한 코드 세그먼트들을 생성 및 재사용하는 컴퓨터화된 방법 및 컴퓨터 구현 시스템, 및 컴퓨터 판독 가능 저장 매체
US5946488A (en) Method for selectively and incrementally displaying the results of preprocessing
US4860203A (en) Apparatus and method for extracting documentation text from a source code program
US5752058A (en) System and method for inter-token whitespace representation and textual editing behavior in a program editor
US8429525B2 (en) Method and system for reversible design tree transformations
EP0752649A2 (en) System and method for textual editing of structurally-represented computer programs with on-the-fly typographical display
US7237226B2 (en) Method and system for storing pending changes to data
Zhu et al. BiYacc: Roll Your Parser and Reflective Printer into One.
Wuu How to merge program texts
JPH05341973A (ja) プログラム解析装置
JP2000207246A (ja) デバッグ支援装置及び方法並びにデバッグ支援用ソフトウェアを記録した記録媒体
JPH0660067A (ja) 文書処理装置
JPH07160490A (ja) コーディング支援装置
KR20030018720A (ko) 소프트웨어 유지보수를 위한 소스 코드 브라우저 자동생성 방법 및 시스템
JP3003459B2 (ja) プログラム作成支援装置
JPH0981411A (ja) コンパイラ
JPH07121379A (ja) 複数言語混在コンパイラ
JPH10269066A (ja) 日本語によるシェル自動作成装置
JPH04237365A (ja) テキスト処理装置における差分検出方式および自動編集方式
JPH04248624A (ja) プログラム変換処理装置
Cohen Workshop on Fortran Transformations
Jo A design of a structure-oriented editor
Li A syntax directed text editor for a configuration control system
JPH02115968A (ja) エデイタにおける入力誘導方式