JPH06149551A - プログラム仕様書自動生成方法 - Google Patents

プログラム仕様書自動生成方法

Info

Publication number
JPH06149551A
JPH06149551A JP29702292A JP29702292A JPH06149551A JP H06149551 A JPH06149551 A JP H06149551A JP 29702292 A JP29702292 A JP 29702292A JP 29702292 A JP29702292 A JP 29702292A JP H06149551 A JPH06149551 A JP H06149551A
Authority
JP
Japan
Prior art keywords
data
variable
tmp
information
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.)
Pending
Application number
JP29702292A
Other languages
English (en)
Inventor
Shigeki Naota
繁樹 直田
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 JP29702292A priority Critical patent/JPH06149551A/ja
Publication of JPH06149551A publication Critical patent/JPH06149551A/ja
Priority to US08/556,122 priority patent/US5742827A/en
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

(57)【要約】 【目的】 本来仕様書中には現れない一時変数をプログ
ラム中から消去することにより、従来のものに較べて質
の高い仕様書を自動的に生成すること。 【構成】 入力されたプログラム1の構文を解析し、構
文構造とデータ属性を得るとともに、そのデータ・フロ
ーを解析してデータ・フロー情報を得る(ステップS
1,S2)。また、プログラム1中の一時変数の変数名
を検出し、それらの一時変数と包含関係にあるデータを
検出する(ステップS3,S4)。ついで、上記一時変
数の参照箇所からデータの包含関係によって関連する変
数の設定箇所までのデータ・フローをたどり、一時変数
の用途(計算の中間結果保持、型変換、分割、合成、
等)を判別し、消去可能な一時変数を消去する(ステッ
プS5)。一時変数が消去された中間表現は自然言語記
述に置き換えられ(ステップS6)、仕様書2を得る。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】既存のプログラムの保守作業を容
易にするため、その仕様書を電子的に管理し、参照検索
を容易にすることが要求されている。ところが、既存の
プログラムの仕様書の多くは手書きであり、その作成に
手間がかかるとともに、電子的に管理することが困難で
あった。上記手間を省き、電子的に管理できる仕様書を
作るためには、プログラムから仕様情報を抽出して仕様
書を自動作成する必要がある。
【0002】本発明は上記したように、既存のプログラ
ムからその仕様書を自動生成するためのプログラム仕様
書自動生成方法に関し、特に、本発明はプログラマがプ
ログラム作成時に導入した一時変数を消去する機能を持
ったプログラム仕様書自動生成方法に関するものであ
る。
【0003】
【従来の技術】既存のプログラムから仕様書を自動的に
生成する方法は従来から知られていた。しかしながら、
従来の仕様書自動生成方法は、プログラムをほぼ一対一
に自然言語化するものであり、プログラマがプログラム
作成時に導入した、プログラム中のみで一時的に使用さ
れる一時変数を削除する機能を持っていなかった。
【0004】
【発明が解決しようとする課題】従来の仕様書自動生成
方法においては、上記のように、プログラマがプログラ
ム作成時に導入した一時変数を削除する機能を持ってお
らず、このため、出来上がった仕様書中に、本来の仕様
書では現れないはずの一時変数の記述を残しており、仕
様書としては不完全なものであった。
【0005】本発明の上記した従来方法の問題点を改善
するためになされたものであって、本来仕様書中には現
れない一時変数を消去することができ、従来のものに較
べて質の高い仕様書を自動的に生成することが可能なプ
ログラム仕様書自動生成方法を提供することを目的とす
る。
【0006】
【課題を解決するための手段】図1は本発明の原理図で
あり、同図において、1は仕様書作成の対象となるプロ
グラム、2は仕様書を示している。本発明においては、
同図に示すように、プログラム1を解析して構文構造情
報とデータ属性情報を作り出すとともに、プログラム1
のデータ・フローを解析し、データ・フロー情報を作り
出し、上記構文構造情報、データ属性情報およびデータ
・フロー情報に基づき、与えられたプログラムから仕様
書2を自動的に生成するプログラム仕様書自動生成方法
において、データ属性情報からデータの包含関係を解析
し、データ包含関係情報を作りだすとともに、プログラ
ム1中に含まれる一時変数を検出する。
【0007】そして、上記、構文構造情報、データ属性
情報、データ・フロー情報およびデータ包含関係情報に
基づき、検出されたプログラム1中の一時変数の役割を
判定し、一時変数が、計算の中間結果保持などの効率向
上のためだけに用いられている場合、データの再定義に
より型変換に用いられている場合、データ構造の親子関
係によってデータの分割に用いられている場合、もしく
は、データ構造の親子関係によってデータの合成に用い
られている場合に、その一時変数を消去するようにした
ものである。
【0008】
【作用】入力されたプログラム1の構文を解析し、構文
構造とデータ属性を得るとともに、そのデータ・フロー
を解析してデータ・フロー情報を得る。また、プログラ
ム1中の一時変数の変数名を検出し、検出された一時変
数に対して、それらの一時変数と包含関係にあるデータ
を検出する。
【0009】ついで、上記一時変数の参照箇所からデー
タの包含関係によって関連する変数の設定箇所までのデ
ータ・フローをたどり、データの包含関係の情報と合わ
せて、その一時変数の用途(計算の中間結果保持、型変
換、分割、合成、等)を判別する。そして、データ・フ
ロー情報を解析して消去可能であるかどうかを判別し、
可能である場合には、用途に応じた記述を生成できるよ
うに一時変数を消去する。以上のようにして、一時変数
を消去したのち、上記処理により得られた中間表現をデ
ータの名称と自然言語への変換ルールにより、自然言語
記述に置き換え、仕様書2を得る。
【0010】本発明においては、上記のように、プログ
ラム中で使用される一時変数を可能なかぎり消去して仕
様書を生成しているので、従来のものに較べて質の高い
仕様書を自動的に生成することが可能となる。
【0011】
【実施例】図2は本発明の実施例の全体構成を示す図で
あり、同図において、11は仕様書作成の対象となる入
力プログラム、12は入力プログラム11を解析して構
文構造とデータ属性を表現する中間表現を生成する構文
解析部、13は構文解析部12において生成された第1
の中間表現、14は中間表現13を解析してデータ・フ
ロー情報情報を抽出するデータ・フロー解析部、15は
データ・フロー解析部14の解析の結果得られる第2の
中間表現、16はプログラム中の識別子に対応する意味
を表す名前をもつデータ辞書、17はプログラム中で使
用されている一時変数を検出する一時変数検出部、18
は変数におけるデータの包含関係を解析するデータ包含
関係解析部、19は第2の中間表現15と一時変数検出
部17とデータ包含関係解析部18における結果に基づ
き中間表現15より可能な限り一時変数を消去する一時
変数消去部、20は一時変数消去部19により消去され
た中間表現を辞書16の情報を基に自然言語に置き換え
る自然言語変換部、21は生成される仕様書である。
【0012】同図において、入力されたプログラム11
は構文解析部12において解析され、構文構造とデータ
属性を表現する中間表現13が生成される。データ・フ
ロー解析部14は生成された中間表現13を解析してデ
ータ・フロー情報を中間表現13に付加して第2の中間
表現15を生成する。一時変数検出部17は中間表現1
5の中の一時変数である変数名を特定し、データ包含関
係解析部18は一時変数検出部17において検出された
一時変数に対して、それらの一時変数と包含関係にある
データを検出する。
【0013】一時変数消去部19はその一時変数の参照
箇所からデータの包含関係によって関連する変数の設定
箇所までのデータ・フローを中間表現15上でたどり、
データの包含関係の情報と合わせて、その一時変数の用
途(計算の中間結果保持、型変換、分割、合成、等)を
判別する。そして、データ・フロー情報を解析して消去
可能であるかどうかを判別し、可能である場合には、用
途に応じた記述を生成できるように中間表現を書き換え
る。
【0014】自然言語変換部20はデータ辞書16に登
録されているデータの名称と自然言語変換部20が中間
表現から自然言語への変換ルールにより、中間表現15
を自然言語記述に置き換える。次に、図2に示した実施
例の各部の動作について説明する。 (1)構文解析部 図2の構文解析部12は、コンパイラなどで使用されて
いる公知のアルゴリズムを用い、入力プログラム11を
解析してその構文構造とデータ属性を表現する中間表現
13を生成する手段であり、構文解析部12により生成
された中間表現は記号表(データ属性情報)と構文木
(構文構造情報)とから構成される。
【0015】図3は構文解析部において生成される記号
表と構文木を示す図であり、図2(a)は記号表を示
し、同図(b)は構文木を示している。図2(a)にお
いて、記号表には同図に示すように、次の情報が登録さ
れている。 (a)変数名。 (b)変数の型 (c)変数の初期値 (d)上位(親)の変数の情報へのポインタ (e)下位の先頭(長子)の変数の情報へのポインタ (f)同じ親を持ち、次に定義されている変数(弟)へ
のポインタ (g)その変数が再定義している変数の情報へのポイン
タ。 (h)構文木上でその変数が設定されている箇所へのポ
インタ (i)構文木上でその変数が参照されている箇所へのポ
インタ (j)その変数と包含関係にある変数の情報 ここで、後述するように、上記(h)と(i)は、次の
データフロー解析部14の処理において設定されるもの
であり、また、(j)は、データ包含関係解析部18で
設定されるものであり、構文処理の段階では設定されて
いない。
【0016】図2(b)は構文木を示す図であり、プロ
グラムの構文構造を表している。構文木の個々のノード
はプログラムの命令文に相当し、各ノードは次の情報を
持っており、それらの全体でプログラムが構成される。 <代入文の場合> ・文種別情報(代入文の場合には文種別情報「=代入」
となる) ・ベーシック・ブロックへのポインタ ・代入元の式へのポインタ ・代入先の変数に対応する名前表のコラムへのポインタ ・次の文へのポインタ <条件分岐文の場合> ・文種別情報(条件分岐文の場合には文種別情報「=条
件分岐」となる) ・ベーシック・ブロックへのポインタ ・条件式へのポインタ ・then部の文の先頭へのポインタ ・else部の文の先頭へのポインタ ・次の文へのポインタ <条件式の情報> ・演算子の種別 ・右辺の式の情報へのポインタ ・左辺の式の情報へのポインタ なお、上記ベーシック・ブロックへのポインタというの
は、次のデータ・フロー解析部14において設定される
情報であり、構文解析部12の処理では設定されない。 (2)データ・フロー解析部 データ・フロー解析部14は中間表現13を解析してデ
ータ・フロー情報情報を抽出する手段であり、図4、図
5は、それぞれ、データ・フロー解析部14の処理によ
り作られるベーシック・ブロック情報、ベーシック・ブ
ロックと構文木との関係を示している。
【0017】データ・フロー解析部14はプログラムを
コントロール・フローに分岐がない一まとまり(これを
ベーシック・ブロックという)に分割し、各ブロック毎
に変数/参照の情報を登録する。また、図3に示した各
変数の記号表にも、「(h)設定箇所の情報」、
「(i)参照箇所の情報」を登録する。個々のベーシッ
ク・ブロックには、図4に示すように、次の情報が登録
される。 (a)ブロック番号 (b)構文木上のベーシック・ブロックの開始位置への
ポインタ (c)後続ブロックの番号のリスト (d)先行ブロックの番号のリスト (e)そのブロックで設定されている変数とその位置へ
のポインタの組のリスト (f)そのブロックで参照されている変数とその位置へ
のポインタの組のリスト データ・フロー解析部14は構文木の各ノード(文)に
対しても、それが属するベーシック・ブロックへのポイ
ンタを埋め込む。各ベーシック・ブロックの情報には、
先に述べたように構文木の上でのベーシック・ブロック
の先頭位置のポインタを登録するので、構文木とベーシ
ック・ブロックは相互に参照可能となる。すなわち、図
5の示すように、例えば、ブロック1と文11、ブロッ
ク2と文12等は同図の点線および実線で示すように、
相互に参照可能である。また、先行ブロックと後続ブロ
ックの関係も図4に示したベーシック・ブロック情報に
記録されている。
【0018】図6は本実施例を説明するためのプログラ
ムの一例を示したものであり、本プログラムは5桁の数
字を郵便番号に変換するプログラムを示している。同プ
ログラムは、同1行目に示されるZPCDINに、例え
ば、「100」あるいは「10090」の数字が入力さ
れたとき、同2行目に示されるZPCDOUTに「10
0 」もしくは「100−90」を出力するプログ
ラムであり、同プログラム中の「TMP−ZPCD1」
等の「TMP−」が付された変数は一時変数を示してお
り、「PICTURE X( )」は変数の型を示して
いる。
【0019】また、同プログラム中の一時変数「TMP
−ZPCD11」、「TMP−ZPCD12」は一時変
数「TMP−ZPCD1」に包含され、「TMP−ZP
CD11」は「TMP−ZPCD1」の前3桁、「TM
P−ZPCD12」は「TMP−ZPCD1」の後2桁
に対応する。同様に、「TMP−ZPCD2」、「TM
P−ZPCD3」と後続の変数も同様な関係にある。
【0020】図7、図8は上記プログラムの中間表現の
一例を示す図であり、図7は構文解析部12において生
成された記号表の一例を示し、図8はその構文木とベー
シック・ブロックの関係を示しており、図7の点線、実
線の矢印の先に付されたA,B,Cはそれぞれ図8に示
す実線、点線に付されたA,B,Cにつながる。図7の
記号表には、前記したように、「名前」、「型」、「親
子、兄弟関係」、等が登録されており、上記したよう
に、一時変数「TMP−ZPCD11」、「TMP−Z
PCD12」は一時変数「TMP−ZPCD1」に包含
されるので、一時変数「TMP−ZPCD1」の「長
男」の欄には子の一時変数「TMP−ZPCD11」へ
のポインタが登録され、一時変数「TMP−ZPCD1
1」の「親」の欄には親の一時変数「TMP−ZPCD
1」へのポインタが登録される。
【0021】また、一時変数「TMP−ZPCD1
1」、「TMP−ZPCD12」は兄弟関係にあるの
で、一時変数「TMP−ZPCD11」の「弟」の欄に
「TMP−ZPCD12」へのポインタが登録される。
さらに、記号表の設定箇所、参照箇所には図7のA,
B,Cに示すように、図8に示す構文木へのポインタが
登録される。
【0022】図8において、同図(a)は構文木の一例
を示し、同図(b)はベーシック・ブロックの一例を示
している。同図(a)において、構文木のノード71な
いし77は図6の示したプログラムの各命令に対応して
おり、例えば、ノード71は図6のプログラムの「MO
VE …」に対応し、ノード72は図6のプログラムの
「IF TMP…」に対応する。
【0023】また、前記したように、構文木のノード
は、代入文の場合には、文種別情報(=代入)、ベーシ
ック・ブロックへのポインタ、代入元の式へのポイン
タ、代入先の変数に対応する名前表のコラムへのポイン
タ、次の文へのポインタを持っており、条件分岐文に場
合には、文種別情報(=条件)、ベーシック・ブロック
へのポインタ、条件式へのポインタ、then部の文の
先頭へのポインタ、else部の文の先頭へのポイン
タ、次の文へのポインタを持っている。
【0024】図8(b)において、81ないし83はベ
ーシック・ブロックであり各ベーシック・ブロッ81な
いし83は図4に示したベーシック・ブロック情報を持
っている。データ・フロー解析部14は図8(b)に示
す中間表現の構文木の各文について、文種を調べて、以
下のような処理を行いベーシック・ブロック81ないし
83からなる中間表現15を生成する。 (i) 代入文の場合 前の文に分岐/合流がなければ、前の文と同一のブロッ
クとする。また、前の文が条件分岐文のような分岐のあ
る文であれば、新たにブロックを作り、「then
部」、「else部」の最後のブロックの両方を次の続
くブロックの先行ブロックとして登録する。
【0025】代入文の代入先に現れる変数をその位置へ
のポインタとともに、ベーシック・ブロックの設定変数
リストに登録する。同時に、記号表(図3参照)のその
変数の設定箇所の項にはこの構文木上の位置へのポイン
タを追加する。 (ii)条件分岐文の場合 前の文に関わらず、条件部を新しいブロックにする。ま
た、「then部」、「else部」は先頭の文に新し
いブロックを割り当て、それぞれをブロックに分割す
る。
【0026】条件部のブロックの先行は、その前の文の
ブロックであり、条件部のブロックの最後のブロックは
「then部」、「else部」の先頭ブロックとな
る。また、条件部の条件式に現れる変数をその位置への
ポインタとともに、条件部のベーシック・ブロックの参
照変数リストに登録する。同時に、記号表のその変数の
参照箇所の項には、この構文木上の位置へのポインタを
追加する。 (iii) 「goto」文の場合 新しいブロックにし、その飛び先を後続ブロックとす
る。 (3)一時変数検出部 一時変数検出部17では、次に示す変数の命名規約を利
用して、記号表(図3参照)からい一時変数を検出し、
その参照箇所とともに表に登録する。 <命名規約の例> 先頭4文字 「TMP−」 一時変数 「FLG−」 フラグ また、COBOLプログラムの場合では、WORKING-STOR
AGE SECTION に定義されてるいるデータ項目(変数)は
一時変数と見なす。 (4)データ包含関係解析部 データ包含関係解析部18は、各一時変数に対して、構
造上包含関係にある変数、すなわち、それを包含する
関係にある変数(先祖およびその再定義変数)、その
変数に包含される変数(子孫の変数)、および、それ
らの変数を再定義(別名付け)している変数とその子
孫、を全て求める。
【0027】各一時変数に対して、データの型から、そ
れらのデータ長を計算し、包含関係を先祖、子孫、同一
領域、部分的に共通領域もつもの、の4つに分類する。
そして、それらの情報と先祖の関係位置から子孫の開始
位置が何バイトずれているかの情報を組にして記号表に
登録する。以下に、COBOLによるデータ構造の表記
に基づく例を示す。 <例1> 01 TMP 02 TMP1 PICTURE X(3) 02 TMP2 PICTURE X(3) この例で、TMP1、TMP2は記号表の親子兄弟のリ
ストをたどることで、TMPの子孫であると判定され
る。これとPICTURE句で指定されたデータの型の
解析により、先祖として開始位置のずれを求め、以下の
ような包含関係の情報を作る。
【0028】 TMP ((TMP1,子孫,0),(TMP
2,子孫,3)) TMP1 ((TMP,先祖,0)) TMP2 ((TMP,先祖,3)) なお、上記において、括弧内最後の数字「0」、「3」
は先祖と子孫の開始位置のずれを示しており、例えば、
TMP1とTMPは桁ずれなしを示し、TMP2とTM
Pは3桁ずれていることを示している。 <例2> 01 TMP PICTURE X(6) 01 TMP−R REDEFINES TMP 02 TMP−R1 PICTURE X(3) 02 TMP−R2 PICTURE X(3) この例では、変数TMP−Rが変数TMPを再定義して
おり、それらが同一の領域を指すと判定される。さら
に、親子のリンクから、TMP−R1,TMP−R2が
TMP,TMP−Rの両方の子孫であるとされる。この
場合の記号表の包含関係の情報は、例えば、次のように
なる。
【0029】 TMP ((TMP−R,同一,),(TMP−
R1,子孫,0),(TMP−R2,子孫,3)) TMP−R1 ((TMP,先祖,0),(TMP−
R,先祖,0)) <例3> 01 TMP PICTURE X(6) 02 TMP1 PICTURE X(2) 02 TMP2 PICTURE X(4) 01 TMP−R REDEFINES TMP 02 TMP−R1 PICTURE X(3) 02 TMP−R2 PICTURE X(3) この例では、TMP1,TMP2とTMP−R1,TM
P−R2の関係はPICTURE以下で指定されている
型情報(構文解析により記号表に登録されている)を用
いて、その長さを求める。この例では、TMP1,TM
P2がそれぞれ、2バイト、4バイトであり、TMP−
R1,TMP−R2が3バイトであるこてから、TMP
−R1はTMP1を包含する「祖先」であることがわか
り、TMP−R2とTMP1は部分的に共通領域を持つ
と判定される。この場合の記号表の包含関係の情報は、
例えば、次のようになる。
【0030】 TMP ((TMP1,子孫,0),(TMP
2,子孫,2),(TMP−R,同一),(TMP−R
1,子孫,0),(TMP−R2,子孫,3)) TMP−R1 ((TMP,先祖,0),(TMP−
R,先祖,0)(TMP1,子孫,0),(TMP2,
部分共通)) (5)一時変数消去部 一時変数消去部19は第2の中間表現15、一時変数検
出部17とデータ包含関係解析部18における結果に基
づき中間表現15より可能な限り一時変数を消去する手
段であり、一時変数消去部19は後述する(i) から(ii
i) の処理を置換/削除可能な一時変数がなくなるまで
繰り返し行い、一時変数を消去する。
【0031】図9は一時変数消去部19における処理の
概略を示すフローチャートであり、同図において、ステ
ップS11において、一時変数検出部17において検出
された一時変数の参照箇所を記号表を参照して順に取り
出し、ステップS12において、一時変数の参照箇所が
あるかどうかを判別する。一時変数の参照箇所がある場
合には、ステップS13に行き、フロー・パスをたど
り、その設定箇所を見つける。ついで、ステップS14
において、設定箇所の変数と一時変数の関係より後述す
るそれぞれの処理を行い、ステップS11に戻り、上記
処理を繰り返す。
【0032】ステップS12において、一時変数の参照
箇所がない場合には、ステップS15に行き、不要な設
定箇所を削除し、ステップS16において、一時変数の
設定箇所を順に取り出し、ステップS17において、一
時変数の設定箇所があるかどうか判別する。一時変数の
設定箇所がある場合には、ステップS18に行き、フロ
ー・パスをたどり、参照箇所を見つけ、ステップS19
において、参照箇所の変数と一時変数の関係により、後
述するそれぞれの処理を行いステップS16に戻り上記
処理を繰り返す。また、ステップS17において、一時
変数の設定箇所がないと判別された場合には、ステップ
S20に行き、置換または削除があったかどうかを判別
し、置換または削除がない場合には終了する。また、置
換または削除があった場合には、ステップS11に戻り
上記処理を繰り返す。
【0033】次に、一時変数消去部19における処理
を、種々のケースについて実例を用いて説明する。 (i) 一時変数の参照箇所の置換 まず、個々の参照箇所に対する設定元の検出を行う。前
記した一時変数検出部17において、検出した各一時変
数に対して、それぞれの参照箇所からベーシック・ブロ
ックの先行関係と構文木の構造を利用してコントロール
・フローをたどり、先に求めたデータ構造上包含関係に
ある変数および自分自身に関して、フロー・パスで最初
に出現する代入文(設定元)を求める。なお、分岐があ
る場合には、各パスについてそれぞれ求める。
【0034】設定元がどのように検出されたかによっ
て、以下の場合分けの処理を行う。 (a)全てのパスが1つの設定元に到達する場合。この
場合、その代入文の右辺を用いて一時変数が削除できる
可能性があるので、その代入先の変数と参照されている
一時変数との関係により、以下の場合分けを処理を行
う。 (ア)参照されている一時変数自身への設定である場
合。
【0035】すなわち、以下のような場合、 TMP ← A+B 文1 …… X ← TMP 文2 この場合は、AまたはBが文1から文2までの間に変化
していなければ、この一時変数の使用が全く無駄である
か、計算の効率化のために中間結果を保存するために導
入したものであるかのどちらかであり、置き換えること
ができる。
【0036】そこで、上記文1の右辺の式を取り出し、
その式中に現れる全ての変数が文1から文2に至るまで
のパスで変化していないかを調べる。上記の例において
は、A,Bとそれにデータ構造上包含関係にいる変数を
抽出し、それらが変化していないかを調べる。そして、
変化していなければ、文1の右辺の式で、一時変数の参
照箇所を置き換える。上記の例では、文2を次のように
置き換える。
【0037】X ← A+B 文2’ また、これにより文2’において、変数A,Bの参照が
生じ変数TMPの参照が無くなるので、ベーシック・ブ
ロックおよび記号表の参照情報を更新する。また、Aま
たはBが文1から文2までの間に変化している場合に
は、置換不能であるので、一時変数、その参照箇所(文
2)を組にして、置換不能の参照箇所のリストに登録し
ておく。
【0038】なお、COBOLの場合で、一時変数TM
Pのデータ定義が以下のように、出力形式を指定してい
ることもある。 01 TMP PICTURE 999.999 この場合は、上記の条件を満たして置換できるときは、
以下のような表現でその意味を表す。
【0039】X ← (A+B)を999.999の形
式に編集 文2” (イ)参照されている一時変数を再定義した変数への設
定である場合 例えば以下のような場合である。 01 TMP PICTURE X(10) 01 TMP−R REDEFINES TMP PICTURE 9(10) …… TMP−R ← A+B 文1 …… X ← TMP 文2 この場合は、型変換のために使われているケースであ
り、仕様書上では現れないことが望ましい。したがっ
て、この場合は、前記した(ア)と同様な置換を行い、
変数の参照情報の更新も同様に行う。 (ウ)一時変数に包含される「子孫」の変数への設定で
ある場合。
【0040】例えば、以下のような場合である。 01 TMP 02 TMP1 PICTURE X(3) 02 TMP2 PICTURE X(3) …… TMP1 ← A 文1 …… X ← TMP 文2 これはデータの合成のために一時変数を用いているケー
スであり、この場合には、さらにコントロール・フロー
をたどり、その一時変数の各部分の値が全て決まるま
で、子孫の変数に対する代入文を求める。
【0041】その結果、求まった子孫の変数への代入文
について、それらの途中に分岐パスがなく、かつ、最初
の一時変数の参照箇所が代入文である場合、置換できる
可能性がある。例えば、 TMP2 ← B 文0 …… TMP1 ← A 文1 …… X ← TMP 文2 この場合、(ア)の場合と同様に、代入文(文0、文
1)の右辺の式に含まれる変数(この場合は、A,B)
の値が文2までのパス中で変化していないならば、これ
をデータ構造の情報を用いて置換することができる。す
なわち、文2を、 Xの上3桁 ← A 文2’−1 Xの下3桁 ← B 文2’−2 という代入文の列に置き換える。
【0042】これにより、文2’−1、文2’−2にお
いて、変数A,Bの参照が生じ、Xの設定も生ずる。ま
た、変数TMPの参照がなくなる。これに応じて、ベー
シック・ブロックおよび記号表の設定/参照情報を更新
する。なお、置き換えられない場合は、一時変数、その
参照箇所(文2)を組として、前記したように、置換不
能の参照箇所のリストに登録する。
【0043】また、データの定義部が、以下のようにな
っていて、置換対象の一時変数が部分的に初期値をもっ
ている場合は、初期値部分も代入文として記述する。 01 TMP 02 TMP1 PICTURE X(3) 02 TMP2 PICTURE X(3) 02 FILLER PICTURE X(2) VA
LUE”**” この場合、文2の置き換えは次のようになる。
【0044】 Xの上3桁 ← A 文2”−1 Xの4桁目から6桁目 ← B 文2”−2 Xの下2桁 ← ”**” 文2”−3 (エ)その一時変数を包含する「先祖」の変数に対する
代入である場合 例えば、以下のような場合、 01 TMP−PARENT 02 TMP1 PICTURE X(5) 02 TMP2 PICTURE X(3) 02 TMP3 PICTURE X(4) …… TMP−PARENT ← A 文1 …… X ← TMP2 文2 これはデータの分割に一時変数を用いているケースであ
り、一時変数の先祖の変数の設定(文1)の右辺に含ま
れる変数が、一時変数の参照箇所(文2)に至るパスに
おいて、その値が変化していない場合のみ、一時変数の
参照箇所(文2)を次のように置き換える。
【0045】 X ← Aの6桁目から8桁目 文2’ また、これにより、文2’において、変数Aの参照が生
じ、変数TMP2の参照がなくなるので、ベーシック・
ブロックおよび記号表の参照情報を更新する。それ以外
は置換不能なので、一時変数、その参照箇所(文2)を
組として置換不能の参照箇所のリストに登録しておく。 (b)コントロール・フローのパス毎に設定箇所が異な
る場合。
【0046】すなわち、以下のような場合、
【0047】
【表1】
【0048】この場合は、参照箇所を置き換えず、一時
変数、その参照箇所(文3)を置換不能の参照箇所のリ
ストに登録しておく。 (ii) 不要になった一時変数の設定箇所の削除 上記した(i) の一時変数の参照箇所の置換操作におい
て、自分自身や関連する変数に関して、置換不能の記録
のない一時変数に関しては、その設定箇所の代入文を削
除する。
【0049】例えば、前記した(i) の(a)の(ア)で
置き換えができた場合には、 TMP ← A+B 文1 …… X ← A+B 文2 となっており、フロー・パスで文1より後になる他の場
所で、TMPおよびTMPとデータ構造上包含関係にあ
る変数の参照がなければ、文1を削除する。
【0050】また、これにより、文1における参照/設
定がなくなるので、ベーシック・ブロックおよび記号表
の参照/設定情報を更新する。以上を全ての一時変数に
対して行った後、置換不能の情報をクリアする。 (iii) 設定箇所を参照箇所での設定先を用いて置換す
る。 次に、参照箇所が置換できなかった場合について、参照
箇所での設定先を用いた設定箇所の置換を試みる。この
場合、個々の設定箇所からフロー・パスを後続方向にた
どり、参照箇所を求める。 (a)複数の設定箇所があるか、式のなかでの参照であ
る場合。
【0051】複数の設定箇所がある場合、あるいは、例
えば、次のように式のなかでの参照であるある場合は、
置換不能であるので、次の参照箇所の処理に移る。 X ← TMP+1 (b)参照箇所が一箇所で、変数から変数への代入文
(右辺は式ではない)である場合。
【0052】参照箇所が一箇所ならば、設定箇所と参照
箇所に現れる変数のデータ構造上の関係により、以下の
ように処理が分かれる。 (ア)設定されている一時変数自身の参照である場合 すなわち、以下のような場合 TMP ← A 文1 …… (Aがこの間で変化している) X ← TMP 文2 この場合、参照箇所(文2)から逆にフロー・パスをさ
かのぼり、文1とは異なるパスにある有効な設定箇所も
求める。それらの設定箇所全てについて、以下の三つの
条件が全て成り立つかどうかを調べる。 各設定箇所について、文2以外の参照箇所が存在し
ない。 設定箇所から参照箇所(文2)に至るパスにおい
て、参照箇所の代入文(文2)の左辺の変数及びとそれ
とデータ構造上包含関係にある変数を含めて、参照/設
定されていない。 設定箇所から参照箇所(文2)へは必ず到達する。
【0053】一時変数の設定箇所を、その参照箇所の代
入文の右辺で置き換え、参照箇所の文は削除対象の参照
箇所のリストに記録する。すなわち、上記の例では、文
1を X ← A 文1’ と置き換え、他の設定箇所も同様にする。参照箇所(文
2)は削除する。
【0054】また、これにより変化する変数の参照/設
定関係を反映するように、ベーシック・ブロック及び記
号表の参照/設定情報を更新する。上記の置換の条件が
満たされなかった場合は、置換や削除は行なわない。 (イ)設定されている一時変数を再定義した変数の参照
である場合 (ア)と同様の処理を行なう。 (ウ)設定されている一時変数を包含する「先祖の」変
数の参照である場合 すなわち、以下のような場合 01 TMP 02 TMP1 PICTURE X(3) 02 TMP2 PICTURE X(3) TMP1 ← A 文1 …… X ← TMP 文2 この場合は、逆に文2からさかのぼって、変数TMPの
各部分が全て設定されるまで、子孫の設定箇所を全て求
める。文1を含むパス以外にも設定がある場合は、それ
ぞれのパスについて求める。文1を含むパスについて、
以下のようになっている時、 TMP2 ← B 文0 …… TMP1 ← A 文1 …… X ← TMP 文2 各パスの設定箇所について、部分設定(上記の例では、
文0と文1)の間に条件分岐がなく、それぞれに関し
て、(ア)の〜の条件が全て成り立てば、各設定箇
所を置き換える操作を行なうことができる。すなわち、
上記の例では、 Xの下3桁 ← B 文0’ …… Xの上3桁 ← A 文1’ とし、他の設定箇所についても同様にする。参照箇所
(文2)は削除する。
【0055】また、これにより変化する変数の参照/設
定関係を反映するように、ベーシツク・ブロック及び記
号表の参照/設定情報を更新する。上記の置換の条件が
満たされなかった場合は、置換や削除は行なわない。 (エ)参照個所が一時変数に包含される変数に対するも
のである場合 すなわち、以下のような場合 01 TMP−PARENT 02 TMP1 PICTURE X(5) 02 TMP2 PICTURE X(3) TMP−PARENT ← A 文1 …… X ← TMP1 文2 この場合は、文1からフロー・パスの後続をたどって、
「兄弟」の変数とその参照箇所を見つける。以下のよう
なものが見つかるとする。
【0056】 TMP−PARENT← A 文1 …… X ← TMP1 文2 …… Y ← TMP2 文3 上記の部分参照(文2、文3)の間に分岐パスがなけれ
ば、これは削除の対象になり得る。そこで、この部分参
照の箇所から先の(ア)の処理と同様、フローをさかの
ぼり、文1以外の有効な設定箇所も求める。
【0057】それらについて、以下の三つの条件、 各設定箇所について、上記の部分的な参照以外の参
照箇所が存在しない。 設定箇所からそれらの参照箇所に至るパスにおい
て、参照箇所の代入文の左辺の変数がそれとデータ構造
上包含関係にある変数を含めて、参照/設定されていな
い。 設定箇所から参照箇所へは必ず到達する。 が全て成り立てば、一時変数の設定箇所(文1)を、以
下のような設定の列で置き換える。
【0058】 X ← Aの上5桁 文1’−1 Y ← Aの下3桁 文1’−2 他の設定箇所も同様に置換する。部分参照箇所(文2、
文3)は削除する。また、これにより変化する変数の参
照/設定関係を反映するように、ベーシック・ブロック
及び記号表の参照/設定情報を更新する。上記の置換の
条件が満たされなかった場合は、置換や削除は行なわな
い。 (6)自然言語変換部 自然言語変換部20は一時変数消去部19により消去さ
れた中間表現を辞書16の情報を基に自然言語(例え
ば、日本語)に置き換える手段であり、辞書16には、
自然言語(例えば、日本語)記述に置き換えるために、
データ名に対しては、予めデータ辞書が用意されてい
る。
【0059】データ辞書16には、次に示すように、デ
ータ名とその日本語名が記録されている。
【0060】
【表2】
【0061】自然言語変換部20は上記データ辞書16
を参照して、一時変数が消去された中間表現を以下に示
すような変換規則により一文ずつ自然言語の表現に置き
換える。
【0062】
【表3】
【0063】図10は図6に示したプログラムより生成
された仕様書の一例を示す図であり、自然言語変換部2
0は、例えば、同図に示す仕様書を出力する。
【0064】
【発明の効果】以上説明したことから明らかなように、
本発明においては、プログラム中で使用される一時変数
を可能なかぎり消去しているので、本来仕様書中には現
れない一時変数を消去した仕様書を生成することがで
き、従来のものに較べて質の高い仕様書を自動的に生成
することが可能となる。
【図面の簡単な説明】
【図1】本発明の原理説明図である。
【図2】本発明の実施例の全体構成を示す図である。
【図3】構文解析部において生成される記号表と構文木
を示す図である。
【図4】ベーシック・ブロックと構文木との関係を示す
図である。
【図5】ベーシック・ブロックと構文木との関係を示す
図(続き)である。
【図6】本実施例を説明するためのプログラムの一例を
示す図である。
【図7】プログラムの中間表現の一例を示す図である。
【図8】プログラムの中間表現の一例を示す図(続き)
である。
【図9】一時変数消去部における処理の概略を示すフロ
ーチャートである。
【図10】生成される仕様書の一例を示す図である。
【符号の説明】
11 入力プログラム 12 構文解析部 13,15 中間表現 14 データ・フロー解析部 16 データ辞書 17 一時変数検出部 18 データ包含関係解析部 19 一時変数消去部 20 自然言語変換部 21 仕様書

Claims (1)

    【特許請求の範囲】
  1. 【請求項1】 プログラムを解析して構文構造情報とデ
    ータ属性情報を作り出すとともに、プログラムのデータ
    ・フローを解析し、データ・フロー情報を作り出し、 上記構文構造情報、データ属性情報およびデータ・フロ
    ー情報に基づき、与えられたプログラムから仕様書を自
    動的に生成するプログラム仕様書自動生成方法におい
    て、 データ属性情報からデータの包含関係を解析し、データ
    包含関係情報を作りだすとともに、プログラム中に含ま
    れる一時変数を検出し、 上記、構文構造情報、データ属性情報、データ・フロー
    情報およびデータ包含関係情報に基づき、検出されたプ
    ログラム中の一時変数の役割を判定し、 一時変数が、計算の中間結果保持などの効率向上のため
    だけに用いられている場合、データの再定義により型変
    換に用いられている場合、データ構造の親子関係によっ
    てデータの分割に用いられている場合、もしくは、デー
    タ構造の親子関係によってデータの合成に用いられてい
    る場合に、その一時変数を消去することを特徴とするプ
    ログラム仕様書自動生成方法。
JP29702292A 1992-11-02 1992-11-06 プログラム仕様書自動生成方法 Pending JPH06149551A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP29702292A JPH06149551A (ja) 1992-11-06 1992-11-06 プログラム仕様書自動生成方法
US08/556,122 US5742827A (en) 1992-11-02 1995-11-09 Method of automatically forming program specifications and apparatus therefor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP29702292A JPH06149551A (ja) 1992-11-06 1992-11-06 プログラム仕様書自動生成方法

Publications (1)

Publication Number Publication Date
JPH06149551A true JPH06149551A (ja) 1994-05-27

Family

ID=17841220

Family Applications (1)

Application Number Title Priority Date Filing Date
JP29702292A Pending JPH06149551A (ja) 1992-11-02 1992-11-06 プログラム仕様書自動生成方法

Country Status (1)

Country Link
JP (1) JPH06149551A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11203116A (ja) * 1998-01-14 1999-07-30 Fujitsu Ltd 変数分類装置およびそのプログラムを格納した記憶媒体
JPH11224186A (ja) * 1998-02-05 1999-08-17 Nippon Steel Corp ソフトウェア解析装置及びソフトウェア解析方法
JP2006139357A (ja) * 2004-11-10 2006-06-01 Fujitsu Ltd 仕様書データ生成方法及び装置
JP2016051367A (ja) * 2014-09-01 2016-04-11 日本電気通信システム株式会社 データ解析装置、データ解析方法、および、プログラム。
JP2016099726A (ja) * 2014-11-19 2016-05-30 株式会社エヌ・ティ・ティ・データ 仕様生成方法、仕様生成装置、及びプログラム

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11203116A (ja) * 1998-01-14 1999-07-30 Fujitsu Ltd 変数分類装置およびそのプログラムを格納した記憶媒体
JPH11224186A (ja) * 1998-02-05 1999-08-17 Nippon Steel Corp ソフトウェア解析装置及びソフトウェア解析方法
JP2006139357A (ja) * 2004-11-10 2006-06-01 Fujitsu Ltd 仕様書データ生成方法及び装置
JP2016051367A (ja) * 2014-09-01 2016-04-11 日本電気通信システム株式会社 データ解析装置、データ解析方法、および、プログラム。
JP2016099726A (ja) * 2014-11-19 2016-05-30 株式会社エヌ・ティ・ティ・データ 仕様生成方法、仕様生成装置、及びプログラム

Similar Documents

Publication Publication Date Title
US4860203A (en) Apparatus and method for extracting documentation text from a source code program
JP2694122B2 (ja) ソフトウェア・アプリケーションの自動テスト方法
US5347627A (en) Graphical user interface including dynamic sizing and spacing
US9348807B2 (en) Apparatus and method for providing a condition builder interface
US5778371A (en) Code string processing system and method using intervals
US5742827A (en) Method of automatically forming program specifications and apparatus therefor
JPH09282150A (ja) プログラムのデータ構造を表示する方法、データ構造表示装置及びデータ構造表示プログラムを格納する媒体
JPH06149551A (ja) プログラム仕様書自動生成方法
JP5342407B2 (ja) プログラム解析方法、プログラム解析プログラムおよびプログラム解析装置
US5261103A (en) Method of and system for compiling source program
Koskimies et al. The design of a language processor generator
JPH11272503A (ja) プログラムのテストデータ自動生成装置
JPH1124913A (ja) Jclプログラム変換装置および記録媒体
Murching et al. Incremental recursive descent parsing
CN111708572B (zh) 一种基于Clang程序结构的控制流程图自动生成方法
JPH07281883A (ja) プログラム修正支援装置及び方法
CN112817599A (zh) 软件函数形式语义及形式化证明脚本自动生成方法
JP2722684B2 (ja) ファイルシステムの検索装置
Harford et al. A new parsing method for non‐LR (1) grammars
Schuster Alignments for Trace Fragments
JPH08166950A (ja) 文書編集装置
JPH0793144A (ja) プログラム解析装置
JPH06242933A (ja) プログラムドキュメント保守装置
Hong et al. Integrated software development environment based on CCITT/SDL for telecommunication systems
JPH03171252A (ja) 文字処理装置

Legal Events

Date Code Title Description
A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20010814