JPH04280320A - プログラム自動生成装置 - Google Patents

プログラム自動生成装置

Info

Publication number
JPH04280320A
JPH04280320A JP3069135A JP6913591A JPH04280320A JP H04280320 A JPH04280320 A JP H04280320A JP 3069135 A JP3069135 A JP 3069135A JP 6913591 A JP6913591 A JP 6913591A JP H04280320 A JPH04280320 A JP H04280320A
Authority
JP
Japan
Prior art keywords
design knowledge
design
partial
specifications
conversion
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
JP3069135A
Other languages
English (en)
Inventor
Hiroshi Takeuchi
寛 竹内
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP3069135A priority Critical patent/JPH04280320A/ja
Priority to FR9202784A priority patent/FR2673734B1/fr
Priority to US07/847,962 priority patent/US5526522A/en
Publication of JPH04280320A publication Critical patent/JPH04280320A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/10Requirements analysis; Specification techniques
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はプログラム自動生成装置
に関し、特にプログラムの仕様を構文木の形に変換し、
変換された仕様を目的とするプログラムに設計知識ベー
スを用いて変換するプログラム自動生成装置に関する。
【0002】
【従来の技術】人間のプログラム作成の過程は、プログ
ラムの仕様を段々と詳細化して行く過程とみなすことが
できる。プログラムの自動生成システムのなかには、段
階的詳細化の各段階での仕様をより詳細な仕様に変換す
るために、設計知識を集めた設計知識ベースを用いて詳
細化の過程を自動化することにより、自動的にプログラ
ムを生成しようとする装置が存在する。そして、この種
の従来の装置は以下のようなものであった。
【0003】(1)仕様中の変換を行う部分仕様とその
部分仕様の詳細化を行う設計知識との組をすべて求め、
それらの競合の中から設計すべき部分仕様と設計知識と
の組を求め、その部分仕様と設計知識との組から部分仕
様の書き換えを行っている。
【0004】(2)各詳細化段階において仕様中の変換
を行う部分仕様を得るときに、仕様すべてを変換対象と
している。
【0005】(3)部分仕様と設計知識との組の適合性
を判断するための型検査において、その部分仕様と設計
知識の型が等しいあるいは型階層上双方の型に適合する
型が存在するときにのみ型が適合すると判断している。
【0006】(4)設計知識の形式は等号関係と左辺構
造と右辺構造とを持っている。この左辺構造と右辺構造
は、プログラムの断片をパラメタ化したものである。そ
して適用する部分仕様と左辺構造がマッチするとき、そ
のマッチの情報と右辺構造を用いて部分仕様を書き換え
ている。
【0007】(5)プログラムの自動生成過程中に設計
知識ベース内の知識を扱うことはない。
【0008】(6)プログラムの自動生成過程中に設計
知識ベースにある設計知識を削除することはない。
【0009】(7)プログラムの自動生成過程において
選ばれた部分仕様と設計知識とを記録していない。
【0010】
【発明が解決しようとする課題】従来提案されている上
述のようなプログラム自動生成装置では、次のような問
題点がある。
【0011】(1)仕様中の変換を行う部分仕様とその
部分仕様の詳細化を行う設計知識との組を常にすべて求
めているため、部分仕様の取り出し順序および設計知識
の知識ベースからの取り出し順序を指定することによっ
て最初に見つかった適用可能な部分仕様と設計知識との
組に対して設計を行えば良い場合においても、他の適用
可能な組を無駄に生成してしまう。
【0012】(2)各詳細化段階において仕様中の変換
を行う部分仕様を得るときに、仕様すべてを変換対象と
しているために、設計対象の問題領域を分割して設計す
ることができず、部分仕様の検索を常に仕様全体から行
うために、検索時間が長くなる。
【0013】(3)部分仕様と設計知識との組の適合性
を判断するための型検査において、その部分仕様と設計
知識の型が等しいあるいは型階層上双方の型に適合する
型が存在するときにのみ型が適合すると判断しているた
めに、部分仕様と設計知識上の変数どうしの型検査にお
いて、型階層上の各型が最小上界を持たない場合には、
その後のマッチによって正しく解釈可能であったとして
も、この時点で型の検査によって不適合とみなされる。
【0014】(4)設計知識の形式は等号関係と左辺構
造と右辺構造とを持っており、この左辺構造と右辺構造
はプログラムの断片をパラメタ化したものであり、そし
て適用する部分仕様と左辺構造とがマッチするとき、そ
のマッチの情報と右辺構造とを用いて部分仕様を書き換
えているために、構造の違いを認識して書き換えを起こ
すことはできない。
【0015】(5)プログラムの自動生成過程中に設計
知識ベース内の知識を扱うことはなかったために、入力
された仕様中に設計知識を取り込み、のちの設計詳細化
に用いることができない。
【0016】(6)プログラムの自動生成過程中に設計
知識ベースにある設計知識を削除することはなかったた
めに、設計過程である特定の設計知識を適用不能にする
ことはできず、設計知識ベースが複雑化する場合がある
【0017】(7)プログラムの自動生成過程中におい
て選ばれた部分仕様と設計知識とを記録していないため
に、設計結果のプログラム中に不備な点があったときな
ど、知識ベースの不正箇所や入力仕様の不正箇所を検出
することが困難である。本発明は上記のような従来の問
題点を解決することを目的としている。
【0018】
【課題を解決するための手段】本発明のプログラム自動
生成装置は、設計知識ベースを用いてプログラムの仕様
の変換を繰り返し目的とするプログラムを生成するプロ
グラム自動生成装置において、仕様を入力し構文木の形
式に変換する仕様入力手段と、この仕様入力手段で得ら
れた構文木形式の仕様の変換を制御する設計制御手段と
、いくつかのプログラム断片とその間の関係を表す関係
部とから構成される設計知識の集まりから構成される設
計知識ベースと、この設計知識ベースから変換すべき部
分仕様に適用する設計知識を選択可能なときには選択を
行い、選択可能な設計知識が存在しないときにはその旨
を前記設計制御手段に通知する設計知識選択手段と、変
換すべき部分仕様と前記設計知識選択手段で選択された
適用する設計知識とが適合するか否かを検査し、適合す
るときにはその部分仕様と適用する設計知識とを出力し
、不適合のときにはその旨を前記設計知識選択手段に通
知する適合性検査手段と、この適合性検査手段から出力
された部分仕様と適用する設計知識とから仕様変換処理
を選択する仕様変換手段と、適用する設計知識の関係部
が書き換え関係であるときに前記仕様変換手段から選択
され、前記適用する設計知識に基づいて部分仕様を書き
換える書き換え関係処理手段とを有する。
【0019】また、本発明のプログラム自動生成装置は
、設計知識ベースを用いてプログラムの仕様の変換を繰
り返し目的とするプログラムを生成するプログラム自動
生成装置において、仕様を入力し構文木の形式に変換す
る仕様入力手段と、この仕様入力手段で得られた構文木
形式の仕様の変換を制御する設計制御手段と、いくつか
のプログラム断片とその間の関係を表す関係部とから構
成される設計知識の集まりから構成される設計知識ベー
スと、この設計知識ベースから変換すべき部分仕様に適
用する設計知識を選択可能なときに選択を行う設計知識
選択手段と、変換すべき部分仕様と前記設計知識選択手
段で選択された適用する設計知識とが適合するか否かを
検査し、適合するときにその部分仕様と適用する設計知
識とを出力する適合性検査手段と、この適合性検査手段
から出力された部分仕様と適用する設計知識とから仕様
変換処理を選択する仕様変換手段と、適用する設計知識
の関係部が書き換え関係であるときに前記仕様変換手段
から選択され、前記適用する設計知識に基づいて部分仕
様を書き換える書き換え関係処理手段とを備え、更に、
以下の(a)〜(f)の少なくとも1つを備えている。
【0020】(a)前記設計制御手段から呼び出され、
前記設計知識ベースによって仕様を表す構文木の根のノ
ードが書き換え可能か否かを判定し、書き換え不能のと
き仕様をその部分木に分割しその各々の部分木に対して
新たに前記設計制御手段を起動させる設計分割手段。
【0021】(b)前記適合性検査手段から呼び出され
、部分仕様の型と設計知識のプログラム断片の型とを型
階層から導出された型の束の空間上にマッピングして型
の適合性を判断し変数の型を決定する束拡張型処理手段
【0022】(c)適用する設計知識の関係部がプリミ
ティブ関係であるときに前記仕様変換手段から選択され
、システム固有のプリミティブ変換知識を用いて部分仕
様を書き換えるプリミティブ書き換え処理手段。
【0023】(d)適用する設計知識の関係部がメタプ
リミティブ関係であるときに前記仕様変換手段から選択
されるメタプリミティブ処理手段と、このメタプリミテ
ィブ処理手段から呼び出され前記設計知識ベースの内容
を前記仕様上に取り込む知識ベース取り込み手段。
【0024】(e)適用する設計知識の関係部がメタプ
リミティブ関係であるときに前記仕様変換手段から選択
されるメタプリミティブ処理手段と、このメタプリミテ
ィブ処理手段から呼び出され、前記仕様上に記述された
設計知識を前記設計知識ベースに加えたり、前記仕様上
に記述されたプログラム断片に適合する設計知識を前記
設計知識ベースから削除する知識ベース変更手段。
【0025】(f)前記仕様変換手段から呼び出され、
部分仕様と適用した設計知識と変換後の部分仕様との組
を記録するデリベーション記録手段と、このデリベーシ
ョン記録手段で生成されたデリベーションを参照し、設
計過程を報告する設計過程報告手段。
【0026】
【作用】本発明のプログラム自動生成装置においては、
仕様入力手段は仕様を入力して構文木の形式に変換し、
設計制御手段はその構文木形式の仕様の変換を制御し、
仕様が変換不能になるまで変換を繰り返し、変換不能に
なった仕様を変換結果のプログラムとして出力する。
【0027】設計分割手段は、設計制御手段から呼び出
されると、設計知識ベースによって仕様を表す構文木の
根のノードが書き換え可能か否かを判定し、書き換え不
能のとき仕様をその部分木に分割し、その各々の部分木
に対して新たに設計制御手段を起動させる。
【0028】設計知識選択手段は、いくつかのプログラ
ム断片とその間の関係を表す関係部とから構成される設
計知識の集まりから構成される設計知識ベースから、変
換すべき部分仕様に適用する設計知識を選択可能なとき
適合性検査手段に渡し、選択可能な設計知識が存在しな
いときその旨を設計制御手段に通知する。
【0029】適合性検査手段は、部分仕様と適用する設
計知識とが適合するか否かを検査し、適合するとき仕様
変換手段に部分仕様と適用する設計知識とを渡し、不適
合のときはその旨を設計知識選択手段に通知する。
【0030】束拡張型処理手段は、適合性検査手段から
型の適合性検査のために呼び出されると、部分仕様の型
と設計知識のプログラム断片の型を型階層から導出され
た型の束の空間上にマッピングして、型の適合性を判断
し、適合するならば適合後の型を決定する。
【0031】仕様変換手段は、部分仕様と適用する設計
知識とから仕様変換処理を選択する。すなわち、適用す
る設計知識の関係部が書き換え関係であるときには部分
仕様を書き換える書き換え関係処理手段を選択する。適
用する設計知識の関係部がプリミティブ関係であるとき
にはシステム固有のプリミティブ変換知識を用いて部分
仕様を書き換えるプリミティブ書き換え処理手段を選択
する。適用する設計知識の関係部がメタプリミティブ関
係であるときにはメタプリミティブ処理手段を選択する
【0032】知識ベース取り込み手段は、メタプリミテ
ィブ処理手段から呼び出されると、設計知識ベースある
いは設計知識ベースの一部を仕様上に取り込む。
【0033】知識ベース変更手段は、メタプリミティブ
処理手段から呼び出されると、仕様上に記述された設計
知識を設計知識ベースに加えたり、仕様上に記述された
プログラム断片に適合する設計知識を設計知識ベースか
ら削除する。
【0034】デリベーション記録手段は仕様変換手段か
ら呼び出されると、部分仕様と適用する設計知識と変換
後の部分仕様との組をデリベーションに記録する。
【0035】設計過程報告手段は、デリベーション記録
手段で生成されたデリベーションを参照し、設計過程報
告を出力する。
【0036】
【実施例】次に本発明の実施例について図面を参照して
詳細に説明する。図1は本発明の一実施例を示す全体構
成図である。
【0037】同図において、仕様入力手段101は、プ
ログラムの仕様117を入力して構文木の形式に変換す
る手段である。
【0038】設計制御手段102は、仕様入力手段10
1で得られた構文木形式の仕様の変換を制御する手段で
あり、仕様が変換不能になるまで変換を繰り返し、変換
不能になった仕様を変換結果のプログラム118として
出力する。
【0039】設計分割手段103は、設計制御手段10
2から呼び出される手段であり、設計知識ベース119
によって仕様を表す構文木の根のノードが書き換え可能
か否かを判定し、書き換え不能のとき仕様をその部分木
に分割しその各々の部分木に対して新たに設計制御手段
102を起動させる。
【0040】設計知識ベース119は、いくつかのプロ
グラム断片122とその間の関係を表す関係部121と
から構成される設計知識120の集まりから構成される
知識ベースである。
【0041】設計知識選択手段105は、設計知識ベー
ス119から変換すべき部分仕様に適用する設計知識1
20を選択可能なときには選択を行って適合性検査手段
107に渡し、選択可能な設計知識120が存在しない
ときには設計データ要求手段104を用いてその旨を設
計制御手段102に通知する手段である。
【0042】適合性検査手段107は、部分仕様と適用
する設計知識120とが適合するか否かを検査し、適合
するときには仕様変換手段109にその部分仕様と適用
する設計知識120とを渡し、不適合のときは検査デー
タ要求手段106を用いてその旨を設計知識選択手段1
05に通知する手段である。
【0043】束拡張型処理手段108は、適合性検査手
段107からの型の適合性検査のために呼び出される手
段であり、部分仕様の型と設計知識120のプログラム
断片122の型とを型階層から導出された型の束の空間
上にマッピングして、型の適合性を判断し、適合するな
らば適合後の型を決定する。
【0044】仕様変換手段109は、部分仕様と適用す
る設計知識120とから仕様変換処理を選択する手段で
ある。
【0045】書き換え関係処理手段110は、適用する
設計知識120の関係部121が書き換え関係であると
きに仕様変換手段109によって選択される手段であり
、適用する設計知識に基づいて部分仕様を書き換える。
【0046】プリミティブ書き換え処理手段111は、
適用する設計知識120の関係部121がプリミティブ
関係であるときに仕様変換手段109によって選択され
る手段であり、システム固有のプリミティブ変換知識を
用いて部分仕様を書き換える。
【0047】メタプリミティブ処理手段112は、適用
する設計知識120の関係部121がメタプリミティブ
関係であるときに仕様変換手段109によって選択され
る手段である。
【0048】知識ベース取り込み手段113は、メタプ
リミティブ処理手段112から呼び出される手段であり
、設計知識ベース119あるいは設計知識ベース119
の一部を仕様117上に取り込む。
【0049】知識ベース変更手段114は、メタプリミ
ティブ処理手段112から呼び出される手段であり、仕
様117上に記述された設計知識を設計知識ベース11
9に加えたり、仕様117上に記述されたプログラム断
片に適合する設計知識120を設計知識ベース119か
ら削除する。
【0050】デリベーション記録手段115は、仕様変
換手段109から呼び出される手段であり、部分仕様と
適用する設計知識120と変換後の部分仕様との組をプ
ログラムデリベーション123に記録する。
【0051】設計過程報告手段116は、デリベーショ
ン記録手段115によって生成されたプログラムデリベ
ーション123を参照し、設計過程報告124を出力す
る手段である。
【0052】次に、上述のように構成された本実施例の
動作の概略を説明する。
【0053】利用者がプログラムの仕様117を作成し
、本実施例のプログラム自動生成装置に与えると、仕様
入力手段101はこの仕様117を入力し、構文木の形
式に変換して設計制御手段102に与える。設計制御手
段102は設計分割手段103を呼び出す等して、構文
木形式の仕様の変換を制御し、仕様が変換不能になるま
で変換を繰り返す。そして、変換不能になった仕様を変
換結果のプログラム118として出力する。
【0054】設計分割手段103は、設計制御手段10
2から呼び出されると、設計知識ベース119によって
仕様を表す構文木の根のノードが書き換え可能か否かを
判定し、書き換え不能のとき仕様をその部分木に分割し
その各々の部分木に対して新たに設計制御手段102を
起動させる。また書き換え可能ならば設計制御手段10
2を通じて設計知識選択手段105を起動する。
【0055】設計知識選択手段105は、設計知識ベー
ス119から変換すべき部分仕様に適用する設計知識1
20を選択して適合性検査手段107に渡す。なお、選
択可能な設計知識120が存在しないとき設計知識選択
手段105は設計データ要求手段104を用いてその旨
を設計制御手段102に通知し、設計制御手段102は
これにより当該仕様が変換不能になったことを認識する
【0056】適合性検査手段107は設計知識選択手段
105から部分仕様と適用する設計知識120とが渡さ
れると、それらが適合するか否かを検査する。このとき
適合性検査手段107は、型の適合性検査のために適宜
に束拡張型処理手段108を呼び出し、部分仕様の型と
設計知識120のプログラム断片122の型を型階層か
ら導出された型の束の空間上にマッピングさせて型の適
合性を判断させ、適合するならば適合後の型を決定させ
、その結果に基づいて適合性の検査を行う。そして、適
合するとき適合性検査手段107は仕様変換手段109
に部分仕様と適用する設計知識120とを渡す。また、
不適合のときは検査データ要求手段106を用いてその
旨を設計知識選択手段105に通知し、設計知識選択手
段105は設計知識ベース119から当該変換すべき部
分仕様に適用する別の設計知識120の選択を試みる。
【0057】仕様変換手段109は、適合性検査手段1
07から部分仕様と適用する設計知識120とが渡され
ると、これらに基づいて仕様変換処理を選択する。即ち
、適用する設計知識120の関係部121が書き換え関
係であるときは部分仕様を書き換える書き換え関係処理
手段110を選択し、適用する設計知識120の関係部
121がプリミティブ関係であるときはシステム固有の
プリミティブ変換知識を用いて部分仕様を書き換えるプ
リミティブ書き換え処理手段111を選択し、適用する
設計知識120の関係部121がメタプリミティブ関係
であるときはメタプリミティブ処理手段112を選択す
る。なお、メタプリミティブ処理手段112が選択され
ると、それから知識ベース取り込み手段113または知
識ベース変更手段114が呼び出され、知識ベース取り
込み手段113は設計知識ベース119あるいは設計知
識ベース119の一部を仕様上に取り込み、また知識ベ
ース変更手段114は仕様上に記述された設計知識を設
計知識ベース119に加えたり、仕様上に記述されたプ
ログラム断片に適合する設計知識120を設計知識ベー
ス119から削除する。
【0058】他方、仕様変換手段109は1つの仕様変
換を終えると、デリベーション記録手段115を呼び出
して、今回の部分仕様と適用した設計知識120と変換
後の部分仕様との組をプログラムデリベーション123
に記録させる。
【0059】以上のようにして、プログラムの仕様11
7の変換が設計知識ベース119を用いて繰り返し行わ
れて目的とするプログラム118が生成される。また、
生成後、設計過程報告手段116は、プログラムデリベ
ーション123を参照し、設計過程報告124を出力す
る。
【0060】次に図1の各部の詳細を図2〜図24を参
照して説明する。
【0061】本実施例では仕様117を記述する言語の
構文は文脈自由文法で定義されている。また本実施例で
は仕様117および最終的に出力するプログラム118
を表現する言語はプログラム断片をその値域とする変数
を記述する構文とプログラム断片を抽象的に表現する項
を記述する構文とを加えた構文によって定まる言語とす
る。項とはファンクタ名の後ろに複数個の項を並べ括弧
でくくった形式で、ファンクタ名(項、・・・)と言う
形のものである。ファンクタ名とは識別子である。文脈
自由文法はBNFで記述可能である。図2で示されるB
NFで定義された構文に適合する、言語記述x=y+z
は、ファンクタ名assignを持つ項記述、assi
gn(“x”,add(“y”,“z”))と考えるこ
とができる。一方項は、ファンクタ名をノードとして持
ちそのノードからその子どもを構文木に変換したものへ
のアークを張ったものに変換できる。たとえば項記述、
assign(“x”,add(“y”,“z”))は
、図3に示す木に変換できる。この手法により仕様記述
言語で記述された任意の仕様117を、構文木に変換す
ることが可能となる。本実施例の仕様入力手段101は
仕様記述言語で記述された仕様117を入力し、上記に
示した手法により構文木に変換する。
【0062】図4は設計制御手段102の動作を説明す
るフローチャートである。設計制御手段102は、本実
施例のシステム全体をコントロールしている。設計制御
手段102は、仕様入力手段101で構文木の形式にな
った仕様をステップ401で設計制御手段102の内部
処理手段として位置付けられた設計分割手段103に渡
す。次にステップ402で設計分割手段103による処
理結果の値により、変換が起こったか否かを判定する。 変換が起きたのならば再びステップ401によって、変
換された仕様を設計分割手段103に渡すことによって
変換を続ける。変換が起きなかった場合(ステップ40
2でNO)、設計データ要求手段104によって設計デ
ータが要求された時点の現在の仕様が最終結果であるの
で、ステップ403によってその仕様をプログラム11
8として出力する。
【0063】図5は設計分割手段103の動作を説明す
るフローチャートである。設計分割手段103は、はじ
めに設計対象の仕様が現在アクセスしている設計知識ベ
ース119によって変換される可能性があるか否かを検
査する。そのためにまずステップ501によって設計知
識ベース119中にまだ未検査の設計知識120がのこ
っているか否かを判断する。未検査の設計知識120が
のこっていたならば、ステップ502によって設計知識
120をひとつ取り出し、その設計知識120によって
設計対象の仕様が変換される可能性があるか否かをステ
ップ503によって検査する。変換の可能性があるなら
ば、ステップ504によってこの設計対象の仕様にたい
して設計知識選択手段105を起動する。ステップ50
1で検査済みの設計知識120がのこっていなかったな
らば、設計知識ベース119中のすべての設計知識12
0にたいしてこの変換対象の仕様自身は変換されること
はないために、設計対象からはずしてよい。そこでこの
仕様の部分仕様である子どもの木にたいしてのみ設計を
行うために、各子どもの木にたいして新たに設計制御手
段102をステップ505によって起動する。ここで仕
様の子どもの木とは、設計対象の仕様がファンクタ1(
項1、項2、…、項n)の形式であるときの項1、項2
、…、項nを表現する部分木(部分仕様)である。
【0064】図6は設計知識選択手段105と設計デー
タ要求手段104の動作を説明するフローチャートであ
る。設計知識選択手段105は設計すべき仕様を設計制
御手段102から受け取ると、ステップ601によって
その仕様に適用する設計知識ベース119をあらためて
得る。次にステップ602によって設計すべき仕様に対
して適用していない設計知識ベース119中の設計知識
120があるか否かを検査する。適用すべき設計知識が
のこっているならばステップ603により、設計知識1
20を取り出し、この設計知識120と設計すべき仕様
との組を適合性検査手段107へ渡して適合性検査を行
わせ、その応答を受け取る(ステップ604)。ステッ
プ605では、適合性検査手段107が応答に検査デー
タ要求手段106を用いたか否かを判定し、用いなけれ
ば適合性検査手段107が返却した変換済み仕様を返却
値として設計制御手段102に制御をもどし、適合性検
査手段107が検査データ要求手段106を用いたなら
ば、次の設計知識を得るためにステップ602へもどる
【0065】ステップ602によって適用すべき設計知
識120がなかったとき、ステップ606を行う。ステ
ップ606では、変換すべき仕様の子どもの木(部分仕
様)のうち、まだ設計知識選択手段105を適用してい
ないものがあるか否かを検査する。まだ設計知識選択手
段105を適用していない部分仕様があるならば、その
部分仕様をステップ607で取り出し、ステップ608
によって設計知識選択手段105自身を起動する。ここ
で子どもの木あるいは部分仕様とは、設計すべき仕様が
ファンクタ1(項1、項2、…、項n)の形式のときの
、項1、項2、…、項nのことである。次にステップ6
09によりこの結果を評価しデータ要求であるならば、
ステップ606にもどり、データ要求でないならば、ス
テップ608の結果得られた変換済み仕様を返却値とし
て終了する。
【0066】他方、ステップ606でのこりの部分仕様
がない場合は、ステップ610で設計データ要求手段1
04を起動する。なお、設計知識選択手段105は設計
制御手段102からの関数呼び出しにより実現すること
ができ、その場合、設計データ要求手段104は特別な
値の返却値をデータ要求を表す値として、その値を含む
関数値を返却することにより実現する。
【0067】図7は適合性検査手段107と検査データ
要求手段106の動作を説明するフローチャートである
。ステップ701で適合性検査手段107は設計知識選
択手段105から、仕様と設計知識120とを受け取り
、設計知識120から一番目のプログラム断片122を
取り出す。次にステップ702で、受け取った仕様と取
り出したプログラム断片122とを、適合性検査手段1
07のサブルーチンであるマッチルーチンに入力する。 次にステップ703で、マッチの結果を評価し、マッチ
が成功したならばステップ704を行う。マッチの結果
がマッチ不成功であるならばステップ705を行う。ス
テップ704では仕様変換手段109を起動し、マッチ
の結果のユニファイヤと仕様と設計知識120とを渡す
。ステップ705では検査データ要求手段106を起動
し、設計知識選択手段105に次の入力データの要求を
行う。なお、適合性検査手段107は設計知識選択手段
105からの関数呼び出しで実現することができ、その
場合、検査データ要求手段106では返却値として特別
な値であるNILを返却することにより検査データの要
求とする。
【0068】図8は適合性検査手段107のサブルーチ
ンであるマッチルーチンの動作を説明するフローチャー
トである。マッチルーチンでは、ステップ801によっ
て入力された仕様とプログラム断片122とを二つの構
造aとbとして扱う。ステップ802では、二つの構造
aとbがリテラル(定数値)として同じものであれば等
しいと判断する。等しいならばステップ811によって
空のユニファイヤを生成しステップ815により空のユ
ニファイヤを返却する。ステップ802で等しいと判断
されなかったとき、ステップ803で構造aが変数であ
るか否かを判断する。構造aが変数であるとき、構造a
とbの型が適合するか否かをステップ812で束拡張型
処理手段108を起動することによって検査する。ステ
ップ812による検査の結果をステップ813で判定し
、型が適合しなかったならば、ステップ810によって
マッチ不可を返却する。型が適合したならばステップ8
14によって変数aと構造bの組(ユニファイヤ)を作
る。ステップ814で生成されたユニファイヤをステッ
プ815によって返却する。
【0069】ステップ803で構造aが変数ではないと
判断されたときは、ステップ804によって構造bが変
数であるか否かを判断する。構造bが変数であるとき、
構造bとaの型が適合するか否かをステップ812で束
拡張型処理手段108を起動することによって検査する
。ステップ812による検査の結果をステップ813で
判定し、型が適合しなかったならば、ステップ810に
よってマッチ不可を返却する。型が適合したならばステ
ップ814によって変数bと構造aの組(ユニファイヤ
)を作る。そして、ステップ814で生成されたユニフ
ァイヤをステップ815によって返却する。
【0070】ステップ804で構造bが変数ではないと
判断されたとき、ステップ805で構造aと構造bの型
が適合するか否かを束拡張型処理手段108を用いて検
査する。次にステップ806によってステップ805に
よる検査結果から型がマッチするか否かを判定する。型
が適合しない場合マッチ不可を返却する(ステップ81
0)。構造aの形式がファンクタa(子どもa1 、子
どもa2 、…、子どもaj )の形で、構造bの形式
がファンクタb(子どもb1 、子どもb2 、…、子
どもbk )の形であるときに、型が適合した場合はj
=kである。 ステップ807では、型が適合した場合に、構造aと構
造bの各対応するすべての子どもに対して、再びマッチ
ルーチン自身を起動する。ここで対応するすべての子ど
もとは、mを1≦m≦jとするときの、構造am と構
造bm のことである。その結果をステップ808によ
って判定し、すべての対応する子どもに対してマッチ可
能であるときは、ステップ809によって各マッチで得
られたユニファイヤの並びを返却する。マッチ不可の子
どもがあった場合、ステップ810によってマッチ不可
を返却する。
【0071】図9は束拡張型処理手段108の動作を説
明するフローチャートである。先ずステップ901によ
って束拡張型処理手段108は、二つの構造のうちの一
つである構造aの構造型を、束拡張型処理手段108の
サブルーチンである構造型取得手続きによって取得する
。次にステップ902によって束拡張型処理手段108
は二つの構造のうちの他の一つである構造bの構造型を
、束拡張型処理手段108のサブルーチンである構造型
取得手続きによって取得する。ステップ903ではステ
ップ901とステップ902で取得した構造aと構造b
の構造型の交わりの構造型を、束拡張型処理手段108
のサブルーチンである構造型交わり手続きによって取得
する。そしてステップ904で、ステップ903で得ら
れた交わりの構造型が空であるか否かを判定する。交わ
りの構造型が空ではなかった場合は、構造aと構造bの
型は適合したとみなされ、ステップ905でこの交わり
の構造型を返却する。交わりの構造型が空の場合は、構
造aと構造bの型は適合しないとみなされ、ステップ9
06で型の不適合を返却する。
【0072】図16は束拡張型処理手段108のサブル
ーチンである構造型取得手続きの動作を説明するフロー
チャートである。この図16のフローチャートによる動
作の説明を行う前に、束拡張型処理手段108で用いる
データ構造とその意味について説明する。
【0073】束拡張型処理手段108では構造の型の適
合性を検査する。この構造とは適合性検査手段107で
見たように、仕様(部分仕様)あるいはプログラム断片
122のものである。仕様(部分仕様)あるいはプログ
ラム断片122は、その構造は図10に示すような、“
ファンクタ名(項、…)”の形式をした木構造であり、
構造中のファンクタ名により分類することができる。フ
ァンクタ名を分類する名前をソートと呼ぶ。一般的には
ソート間には半順序関係が定められており、ソート階層
を形成している。図11はソートとソート階層の例を表
す図である。プログラム要素1101と文1102と式
1103と条件文1104と代入1105と加算式11
06と減算式1107とがソートである。矢印→が張ら
れているソート間には順序関係が存在する。例えば、構
造“IF(x==y,x=x+1,x=x+2)”のフ
ァンクタ“IF”は条件文1104に分類される。
【0074】二つの構造が同じソートに分類されるか、
あるいはどちらかの構造が分類されたソートが一方の構
造が分類されたソートの、順序関係において推移閉包関
係にあるソートである場合に、これらの二つの構造は型
が適合すると言える。例えば一つの構造が加算式110
6に分類され、もう一方の構造が式1103に分類され
たとき、ソートである加算式1106とソートである式
1103の間には順序関係が定まっているので、順序関
係において推移閉包関係にあるソートである。したがっ
てこの加算式1106に分類される構造と、式1103
に分類される構造とは型が適合すると言える。
【0075】しかし二つの構造が変数であるとき、二つ
の構造が同じソートに分類されるか、あるいはどちらか
の分類されたソートが一方の構造が分類されたソートの
、順序関係において推移閉包関係にあるソートである場
合以外にも、型が適合したと考えられる場合がある。 例えば、二つの変数がそれぞれ文1102と式1103
に分類されたとする。文1102と式1103は同じソ
ートではなく、また順序関係において推移閉包関係にあ
るソート(順序関係が定まらない)でもない。しかしこ
の変数のマッチの後条件文1104かあるいは代入11
05とマッチさせることが可能である。なぜならば条件
文1104は文1102と、代入1105は式1103
と順序関係において推移閉包関係にあるためである。こ
のため本発明では、図11に示すようなソート階層を、
ソート階層の束に拡張して型の適合性を検査する。
【0076】すべてのソートの集まり(集合)をSor
tsとするとき、Sortsのべき集合P(Sorts
)とP(Sorts)上の包含関係⊂によって構成され
る半順序集合が存在する。この半順序集合を本実施例で
はPOW_SORTS[P(Sorts),⊂]であら
わす。例えば図12で与えられた三つのソートa,b,
cから成るソート階層をSortsとするとき、POW
_SORTS[P(Sorts),⊂]は図13のよう
になる。図11のソート階層においても図13に対応す
るPOW_SORTS[P(Sorts),⊂]の階層
を考えることができる。このような階層構造は一般に束
と呼ばれている。
【0077】Sortsの任意の要素sに対し集合lo
wer(s)={x|x∈Sorts,x≦s}を与え
ることができる。このように生成されたlower(s
)の集合を本実施例ではLowersと呼ぶ。つまり       Lowers={x|x=lower(s
),s∈Sorts}である。ここで集合Lowers
ではその要素間に、包含関係に定まる半順序関係が存在
する。この半順序関係によって定まる階層はもとのSo
rtsによって定まるソート階層を保存している。図1
2で与えられたソート階層をSortsとすると、その
Lowersは図14に示すようになる。図11で与え
られたソート階層をSortsとすると、そのLowe
rsは図15に示すようになる。これらのソート階層S
ortsの構造は、Lowersで与えられる構造と一
対一に対応することがわかる。さらに図14で示す集合
Lowersは図13で示したSortsのべき集合P
(Sorts)の部分集合となる。Lowersの要素
はすべて、P(Sorts)の要素であり、且つLow
ers上の要素の順序関係がP(Sorts)上でも保
存されていることがわかる。これらのことから、ソート
階層Sorts上での型の適合性は、Sortsのべき
集合P(Sorts)上での型の適合性に拡張すること
ができる。
【0078】本実施例では、以上のことより図9に詳細
を示した束拡張型処理手段108で用いる構造型をソー
ト階層Sortsのべき集合P(Sorts)の要素と
する。
【0079】さて、図16の束拡張型処理手段108の
サブルーチンである構造型取得手続きでは、ステップ1
601で、入力された構造が変数であるか否かを判定す
る。構造が変数であった場合は、ステップ1604で構
造型を取得する。本実施例では、変数である構造には構
造型をその変数の属性として持つようにしているので、
ステップ1604では変数である構造から構造型を表す
属性値を取得することにより、変数の構造型を得る。構
造が変数ではない場合は、ステップ1602で構造のフ
ァンクタ名とファンクタ名の定義から、その構造の属す
るソートを取得する。ステップ1603では、ステップ
1602で得たソート名を使い、SortsからLow
ersを得る関数Lowerを用いて構造型を得る。こ
のSortsからLowersを得る関数Lowerは
、 Lower(s)={x|x∈Sorts,x≦s}と
定義される。構造型取得手続きはステップ1603ある
いはステップ1604で求めた構造型を返却する。
【0080】図17は束拡張型処理手段108のサブル
ーチンである交わりの構造型を得る手続きの動作を説明
するフローチャートである。以上の説明のように、構造
型はソート階層Sortsのべき集合P(Sorts)
の要素であり、構造型の間には集合の交わりに対応する
演算操作を定義できる。ステップ1701では、二つの
構造型の交わり演算を行い、得られた構造型を、交わり
の構造型を得る手続きの返却値とする。この返却値が空
集合ならば、ステップ904によってその二つの構造型
は適合しないと判定される。
【0081】図18は仕様変換手段109の動作を説明
するフローチャートである。仕様変換手段109は、適
合性検査手段107から、部分仕様と適用する設計知識
120とユニファイヤとを入力する。まずステップ18
01によって、適用する設計知識120の関係部121
に含まれる関係名を得る。次にステップ1802によっ
て関係名が書き換え関係であるか否かを判定し、関係名
が書き換え関係であるときは、ステップ1803で書き
換え関係処理手段110を起動して入力した部分仕様を
変換する。関係名が書き換え関係でなかったときは、ス
テップ1804によって関係名がプリミティブであるか
否かを判定し、関係名がプリミティブであるときは、ス
テップ1805でプリミティブ書き換え処理手段111
を起動して入力した部分仕様を変換する。関係名がプリ
ミティブでなかったときは、ステップ1806によって
関係名がメタプリミティブであるか否かを判定し、関係
名がメタプリミティブであるときは、ステップ1807
でメタプリミティブ処理手段112を起動して入力した
部分仕様を変換する。関係名がメタプリミティブでなか
ったときは、ステップ1809によって関係名を利用者
が用意した関数名と見立てて、その関数に部分仕様と適
用する設計知識120とユニファイヤとを渡して、変換
を行う。次にステップ1810では、部分仕様と適用し
た設計知識120とユニファイヤとどの変換を行ったか
の情報と変換後の部分仕様とをアーギュメントとしてデ
リベーション記録手段115を起動する。最後に変換後
の部分仕様を適合性検査手段107に返却して終了する
【0082】図19は書き換え関係処理手段110の動
作を説明するフローチャートである。書き換え関係処理
手段110は変換すべき部分仕様と適用する設計知識1
20とユニファイヤとを受け取る。まずステップ190
1では、入力仕様117中の受け取った部分仕様に対応
する部分木を特別な定数であるholeで置き換える。 ステップ1902ではユニファイヤ処理に入力仕様11
7と受け取ったユニファイヤとを与えて入力仕様中のユ
ニファイヤで与えられた変数に対する置き換えを行う。 ステップ1903では、受け取った設計知識120の関
係部121から関係名を取り出す。ステップ1904で
は、関係名がeqであるか否かを判定する。本実施例で
は、書き換え関係である関係名としてeqを提供してい
る。関係名eqである関係部121をもつ設計知識はプ
ログラム断片122を二つもつ。そこで関係名がeqの
ときは、ステップ1905で、受け取った設計知識12
0の第二番目のプログラム断片122を取り出す。次に
ステップ1907で、ユニファイヤ処理に二番目のプロ
グラム断片122と受け取ったユニファイヤとを与えて
入力仕様中のユニファイヤで与えられた変数に対する置
き換えを行う。関係名がeqでないときは、ステップ1
906で、ユニファイヤ処理に受け取った部分仕様と受
け取ったユニファイヤとを与えて入力仕様中のユニファ
イヤで与えられた変数に対する置き換えを行う。ステッ
プ1908では、ステップ1907あるいはステップ1
906でユニファイヤ処理を行った構造で、ステップ1
901で作った入力仕様117中の定数holeを置き
換える。そして、ステップ1908で変換した入力仕様
を返却して終了する。
【0083】図20は書き換え関係処理手段110のサ
ブルーチンであるユニファイヤ処理の動作を説明するフ
ローチャートである。
【0084】まずステップ2001で、受け取った構造
が変数か否かを判定する。変数のときは、ステップ20
02で受け取ったユニファイヤ中のその変数に対応する
組を取り出す。例えばユニファイヤが<<変数X、構造
A>、<変数Y、構造B>>のとき、変数Yに対応する
組とは<変数Y、構造B>であり、変数Zに対応する組
は存在しない。ステップ2003では、ステップ200
2の結果対応する組が存在したか否かを判定する。対応
する組が存在する時は、ステップ2004で変数をその
対応する組の構造で置き換える。たとえば受け取った構
造が変数Xであり、受け取ったユニファイヤが<<変数
X、構造A>、<変数Y、構造B>>のとき、変数Xの
代わりに構造Aを返却値とする。対応する組が存在しな
いときは、受け取った変数そのものを返却する。たとえ
ば受け取った構造が変数Zであり、受け取ったユニファ
イヤが<<変数X、構造A>、<変数Y、構造B>>の
とき、変数Zを返却値とする。受け取った構造が変数で
なかった場合はその構造は“ファンクタ名(子の構造、
…、子の構造m)”の形式をしている。このときステッ
プ2005によってすべての子の構造に対してユニファ
イヤ処理を行う。いま構造Aに対してユニファイヤ処理
を行った結果を、“Unif(構造A)”とするとき、
ステップ2005によって、“ファンクタ名(Unif
(子の構造1)、…、Unif(子の構造m))”を得
て返却値とする。
【0085】図21はプリミティブ書き換え処理手段1
11の動作を説明するフローチャートである。プリミテ
ィブ書き換え処理手段111は、適用する設計知識12
0の関係部121がプリミティブ関係であるときにシス
テム固有のプリミティブ変換知識を用いて部分仕様を書
き換える。本実施例ではシステム固有のプリミティブ変
換知識としてequalを提供している。まずステップ
2101で、受け取った構造のファンクタを得る。次に
ステップ2102でファンクタ名がequalか否かを
判定する。equalでないとき、ステップ2103で
、受け取った構造をそのまま返却する。equalのと
きは、ステップ2104で、受け取った構造の各子ども
の構造が等しいか否かを検査し、ステップ2105で検
査結果を判定する。等しいならばステップ2106で、
構造“TRUE()”を返却する。等しくないならばス
テップ2107で、構造“FALSE()”を返却する
。このプリミティブ書き換え手段111によって以下の
ような設計知識120を記述できるようになる。
【0086】 Rel eq  IF(TRUE,X,Y)−>  X
.Rel eq  IF(FALSE,X,Y)−> 
 Y.Rel prim  equal(X,Y)−>
.Rel eq  not(TRUE)−>  FAL
SE.Rel eq  not(FALSE)−>  
TRUE.Rel eq  if(X==Y)Z;−>
  IF(equal(X,Y),Z,). このように設計知識120として、構造の同値関係を扱
えるようになる。
【0087】図22はメタプリミティブ処理手段112
の動作を説明するフローチャートである。本実施例では
メタプリミティブとして、knowledge,rem
ove,setkbを用意している。まずステップ22
01で、受け取った構造のファンクタ名を得る。次にス
テップ2202でファンクタ名がknowledgeで
あるか否かを判定する。ファンクタ名がknowled
geであるならば、ステップ2203で知識ベース取り
込み手段113を起動する。ファンクタ名がknowl
edgeでないならば、ステップ2204でファンクタ
名がremoveであるか否かを判定する。ファンクタ
名がremoveであるならば、ステップ2205で知
識ベース変更手段114をremoveとして起動する
。ファンクタ名がremoveでないならば、ステップ
2206でファンクタ名がsetkbであるか否かを判
定する。ファンクタ名がsetkbであるならば、ステ
ップ2207で知識ベース変更手段114をsetkb
として起動する。ファンクタ名がsetkbでないなら
ば、ステップ2208で構造をそのまま返却する。
【0088】図23は知識ベース取り込み手段113の
動作を説明するフローチャートである。知識ベース取り
込み手段113で受け取る構造は、“knowledg
e(子の構造)”である。まず、ステップ2301では
、受け取った構造の子どもの構造を取り出す。次にステ
ップ2302で、取り出した子どもの構造と同じ構造を
第一番目のプログラム断片122としてもつ設計知識1
20を設計知識ベース119から一つ取り出す。次にス
テップ2303で、対応する設計知識120が見つかっ
たか否かを判定する。対応する設計知識120が見つか
ったならば、ステップ2304で、取り出した設計知識
120の関係部121から関係名に対応するファンクタ
を生成する。そしてこのファンクタ名と設計知識120
のすべてのプログラム断片122とから構成される構造
を作る。ステップ2305では、ステップ2304で作
られた構造を知識ベース取り込み手段113の結果とし
てメタプリミティブ処理手段112へ返却する。対応す
る設計知識120が見つからなかった場合は、ステップ
2306で受け取った構造をそのままメタプリミティブ
処理手段112へ返却する。
【0089】図24は知識ベース変更手段114の動作
を説明するフローチャートである。まずステップ240
1で、メタプリミティブ処理手段112からremov
eとして呼び出されたか否かを判定する。remove
として呼び出されたのであるならば、受け取った構造は
“remove(部分構造)”の形式をしており、ステ
ップ2402で構造の部分構造を取り出す。次にステッ
プ2403で、取り出した部分構造に適合するプログラ
ム断片122を第一番目のプログラム断片122として
もつ設計知識120をすべて、設計知識ベース119か
ら取り除く。その後ステップ2404で、空構造を返却
する。removeとして呼び出されたのでないならば
、ステップ2405でメタプリミティブ処理手段112
からsetkbとして呼び出されたか否かを判定する。 setkbとして呼び出されたのであるならば、受け取
った構造は“setkb(部分構造)”の形式をしてお
り、ステップ2406で構造の部分構造を取り出す。ス
テップ2407では、取り出された部分構造のファンク
タ名を対応する関係名に変換し、この関係名と部分構造
の子どもの構造とから設計知識120を生成する。次に
ステップ2408で、生成された設計知識120を設計
知識ベース119へ登録する。その後ステップ2404
で、空構造を返却する。removeでもsetkbで
もなければ、ステップ2409で、受け取った構造をそ
のまま返却する。
【0090】次にデリベーション記録手段115と設計
過程報告手段116について説明する。デリベーション
記録手段115は仕様変換手段109から呼び出され、
部分仕様と適用する設計知識120とユニファイヤと仕
様変換手段109で用いた変換の種類と変換後の部分仕
様との組をプログラムデリベーション123に記録する
。設計過程報告手段116は、仕様の変換過程が終了し
た後に起動することができ、デリベーション記録手段1
15で生成されたプログラムデリベーション123を参
照し、設計過程にそって、変換の種類にあわせて編集さ
れた設計過程報告124を出力する。
【0091】
【発明の効果】以上説明した本発明のプログラム自動生
成装置によれば、以下の効果を得ることができる。
【0092】(1)部分仕様とその部分仕様の詳細化を
行う設計知識との組を一つずつ生成したことによって、
適用可能な組を無駄に生成しないことが可能となる。
【0093】(2)設計分割手段を備えているので設計
対象の問題領域を分割して設計することができ、これに
よって部分仕様の検索を常に仕様全体から行わずに済む
ため、検索時間を大幅に減少させることが可能となる。
【0094】(3)部分仕様と設計知識上の変数どうし
の型検査において、束拡張型処理手段により、階層上か
ら求められる型の束構造上で型検査を行うことによって
従来不当に不適合とみなされた構造どうしもその後のマ
ッチによって正しく解釈可能である場合、適合すると解
釈できる。
【0095】(4)プリミティブ書き換え処理手段を備
えることにより、プリミティブ関係を導入しプリミティ
ブとして部分仕様の等価性判定を用意することができ、
仕様上の構造の違いを認識して書き換えを起こすことが
可能となる。
【0096】(5)プログラムの自動生成過程中に設計
知識ベース内の知識を扱えるため、入力された仕様中に
設計知識を取り込み、後の設計詳細化に用いることが可
能となる。
【0097】(6)プログラムの自動生成過程中に設計
知識ベースに新たな知識を付け加えたり、或る設計知識
を削除することができるために、入力された仕様中の情
報から部品情報を得て後の設計詳細化に用いたり、設計
過程で或る特定の設計知識を適用不能にして設計知識ベ
ースの複雑化を防止したりできる。
【0098】(7)デリベーション記録手段と設計過程
報告手段とを備えることにより、プログラムの自動生成
過程中の選ばれた部分仕様と設計知識とを記録すること
によって、設計結果のプログラム中に不備な点があった
ときなど、知識ベースの不正箇所や入力仕様の不正箇所
を検出することが可能となる。
【図面の簡単な説明】
【図1】本発明の一実施例を示す全体構成図である。
【図2】BNFで定義された構文の例を表す図である。
【図3】BNFで定義された構文によって記述された記
号列を木に変換した例を表す図である。
【図4】設計制御手段102の動作を説明するフローチ
ャートである。
【図5】設計分割手段103の動作を説明するフローチ
ャートである。
【図6】設計知識選択手段105と設計データ要求手段
104の動作を説明するフローチャートである。
【図7】適合性検査手段107と検査データ要求手段1
06の動作を説明するフローチャートである。
【図8】適合性検査手段107のサブルーチンであるマ
ッチルーチンの動作を説明するフローチャートである。
【図9】束拡張型処理手段108の動作を説明するフロ
ーチャートである。
【図10】構造の木とファンクタ形式の木との関連を表
す図である。
【図11】ソートとソート階層の例を表す図である。
【図12】ソート階層の例を表す図である。
【図13】ソート階層から生成される束構造を表す図で
ある。
【図14】ソート階層と対応するべき集合の部分集合を
表す図である。
【図15】第11図のソート階層に対応するべき集合の
部分集合を表す図である。
【図16】束拡張型処理手段108のサブルーチンであ
る構造型取得手続きの動作を説明するフローチャートで
ある。
【図17】束拡張型処理手段108のサブルーチンであ
る交わりの構造型を得る手続きの動作を説明するフロー
チャートである。
【図18】仕様変換手段109の動作を説明するフロー
チャートである。
【図19】書き換え関係処理手段110の動作を説明す
るフローチャートである。
【図20】書き換え関係処理手段110のサブルーチン
であるユニファイヤ処理の動作を説明するフローチャー
トである。
【図21】プリミティブ書き換え処理手段111の動作
を説明するフローチャートである。
【図22】メタプリミティブ処理手段112の動作を説
明するフローチャートである。
【図23】知識ベース取り込み手段113の動作を説明
するフローチャートである。
【図24】知識ベース変更手段114の動作を説明する
フローチャートである。
【符号の説明】
101…仕様入力手段               
 116…設計過程報告手段 102…設計制御手段               
 117…仕様103…設計分割手段        
        118…プログラム 104…設計データ要求手段          11
9…設計知識ベース 105…設計知識選択手段            1
20…設計知識 106…検査データ要求手段          12
1…関係部107…適合性検査手段         
     122…プログラム断片 108…束拡張型処理手段            1
23…プログラムデリベーション 109…仕様変換手段               
 124…設計過程報告 110…書き換え関係処理手段 111…プリミティブ書き換え処理手段112…メタプ
リミティブ処理手段 113…知識ベース取り込み手段 114…知識ベース変更手段 115…デリベーション記録手段

Claims (7)

    【特許請求の範囲】
  1. 【請求項1】  設計知識ベースを用いてプログラムの
    仕様の変換を繰り返し目的とするプログラムを生成する
    プログラム自動生成装置において、仕様を入力し構文木
    の形式に変換する仕様入力手段と、該仕様入力手段で得
    られた構文木形式の仕様の変換を制御する設計制御手段
    と、いくつかのプログラム断片とその間の関係を表す関
    係部とから構成される設計知識の集まりから構成される
    設計知識ベースと、該設計知識ベースから変換すべき部
    分仕様に適用する設計知識を選択可能なときには選択を
    行い、選択可能な設計知識が存在しないときにはその旨
    を前記設計制御手段に通知する設計知識選択手段と、変
    換すべき部分仕様と前記設計知識選択手段で選択された
    適用する設計知識とが適合するか否かを検査し、適合す
    るときにはその部分仕様と適用する設計知識とを出力し
    、不適合のときにはその旨を前記設計知識選択手段に通
    知する適合性検査手段と、該適合性検査手段から出力さ
    れた部分仕様と適用する設計知識とから仕様変換処理を
    選択する仕様変換手段と、適用する設計知識の関係部が
    書き換え関係であるときに前記仕様変換手段から選択さ
    れ、前記適用する設計知識に基づいて部分仕様を書き換
    える書き換え関係処理手段とを有することを特徴とする
    プログラム自動生成装置。
  2. 【請求項2】  設計知識ベースを用いてプログラムの
    仕様の変換を繰り返し目的とするプログラムを生成する
    プログラム自動生成装置において、仕様を入力し構文木
    の形式に変換する仕様入力手段と、該仕様入力手段で得
    られた構文木形式の仕様の変換を制御する設計制御手段
    と、いくつかのプログラム断片とその間の関係を表す関
    係部とから構成される設計知識の集まりから構成される
    設計知識ベースと、前記設計制御手段から呼び出され、
    前記設計知識ベースによって仕様を表す構文木の根のノ
    ードが書き換え可能か否かを判定し、書き換え不能のと
    き仕様をその部分木に分割しその各々の部分木に対して
    新たに前記設計制御手段を起動させる設計分割手段と、
    前記設計知識ベースから変換すべき部分仕様に適用する
    設計知識を選択可能なときに選択を行う設計知識選択手
    段と、変換すべき部分仕様と前記設計知識選択手段で選
    択された適用する設計知識とが適合するか否かを検査し
    、適合するときにその部分仕様と適用する設計知識とを
    出力する適合性検査手段と、該適合性検査手段から出力
    された部分仕様と適用する設計知識とから仕様変換処理
    を選択する仕様変換手段と、適用する設計知識の関係部
    が書き換え関係であるときに前記仕様変換手段から選択
    され、前記適用する設計知識に基づいて部分仕様を書き
    換える書き換え関係処理手段とを有することを特徴とす
    るプログラム自動生成装置。
  3. 【請求項3】  設計知識ベースを用いてプログラムの
    仕様の変換を繰り返し目的とするプログラムを生成する
    プログラム自動生成装置において、仕様を入力し構文木
    の形式に変換する仕様入力手段と、該仕様入力手段で得
    られた構文木形式の仕様の変換を制御する設計制御手段
    と、いくつかのプログラム断片とその間の関係を表す関
    係部とから構成される設計知識の集まりから構成される
    設計知識ベースと、該設計知識ベースから変換すべき部
    分仕様に適用する設計知識を選択可能なときに選択を行
    う設計知識選択手段と、変換すべき部分仕様と前記設計
    知識選択手段で選択された適用する設計知識とが適合す
    るか否かを検査し、適合するときにその部分仕様と適用
    する設計知識とを出力する適合性検査手段と、前記適合
    性検査手段から呼び出され、部分仕様の型と設計知識の
    プログラム断片の型とを型階層から導出された型の束の
    空間上にマッピングして型の適合性を判断し変数の型を
    決定する束拡張型処理手段と、前記適合性検査手段から
    出力された部分仕様と適用する設計知識とから仕様変換
    処理を選択する仕様変換手段と、適用する設計知識の関
    係部が書き換え関係であるときに前記仕様変換手段から
    選択され、前記適用する設計知識に基づいて部分仕様を
    書き換える書き換え関係処理手段とを有することを特徴
    とするプログラム自動生成装置。
  4. 【請求項4】  設計知識ベースを用いてプログラムの
    仕様の変換を繰り返し目的とするプログラムを生成する
    プログラム自動生成装置において、仕様を入力し構文木
    の形式に変換する仕様入力手段と、該仕様入力手段で得
    られた構文木形式の仕様の変換を制御する設計制御手段
    と、いくつかのプログラム断片とその間の関係を表す関
    係部とから構成される設計知識の集まりから構成される
    設計知識ベースと、該設計知識ベースから変換すべき部
    分仕様に適用する設計知識を選択可能なときに選択を行
    う設計知識選択手段と、変換すべき部分仕様と前記設計
    知識選択手段で選択された適用する設計知識とが適合す
    るか否かを検査し、適合するときにその部分仕様と適用
    する設計知識とを出力する適合性検査手段と、該適合性
    検査手段から出力された部分仕様と適用する設計知識と
    から仕様変換処理を選択する仕様変換手段と、適用する
    設計知識の関係部が書き換え関係であるときに前記仕様
    変換手段から選択され、前記適用する設計知識に基づい
    て部分仕様を書き換える書き換え関係処理手段と、適用
    する設計知識の関係部がプリミティブ関係であるときに
    前記仕様変換手段から選択され、システム固有のプリミ
    ティブ変換知識を用いて部分仕様を書き換えるプリミテ
    ィブ書き換え処理手段とを有することを特徴とするプロ
    グラム自動生成装置。
  5. 【請求項5】  設計知識ベースを用いてプログラムの
    仕様の変換を繰り返し目的とするプログラムを生成する
    プログラム自動生成装置において、仕様を入力し構文木
    の形式に変換する仕様入力手段と、該仕様入力手段で得
    られた構文木形式の仕様の変換を制御する設計制御手段
    と、いくつかのプログラム断片とその間の関係を表す関
    係部とから構成される設計知識の集まりから構成される
    設計知識ベースと、該設計知識ベースから変換すべき部
    分仕様に適用する設計知識を選択可能なときに選択を行
    う設計知識選択手段と、変換すべき部分仕様と前記設計
    知識選択手段で選択された適用する設計知識とが適合す
    るか否かを検査し、適合するときにその部分仕様と適用
    する設計知識とを出力する適合性検査手段と、該適合性
    検査手段から出力された部分仕様と適用する設計知識と
    から仕様変換処理を選択する仕様変換手段と、適用する
    設計知識の関係部が書き換え関係であるときに前記仕様
    変換手段から選択され、前記適用する設計知識に基づい
    て部分仕様を書き換える書き換え関係処理手段と、適用
    する設計知識の関係部がメタプリミティブ関係であると
    きに前記仕様変換手段から選択されるメタプリミティブ
    処理手段と、該メタプリミティブ処理手段から呼び出さ
    れ前記設計知識ベースの内容を前記仕様上に取り込む知
    識ベース取り込み手段とを有することを特徴とするプロ
    グラム自動生成装置。
  6. 【請求項6】  設計知識ベースを用いてプログラムの
    仕様の変換を繰り返し目的とするプログラムを生成する
    プログラム自動生成装置において、仕様を入力し構文木
    の形式に変換する仕様入力手段と、該仕様入力手段で得
    られた構文木形式の仕様の変換を制御する設計制御手段
    と、いくつかのプログラム断片とその間の関係を表す関
    係部とから構成される設計知識の集まりから構成される
    設計知識ベースと、該設計知識ベースから変換すべき部
    分仕様に適用する設計知識を選択可能なときに選択を行
    う設計知識選択手段と、変換すべき部分仕様と前記設計
    知識選択手段で選択された適用する設計知識とが適合す
    るか否かを検査し、適合するときにその部分仕様と適用
    する設計知識とを出力する適合性検査手段と、該適合性
    検査手段から出力された部分仕様と適用する設計知識と
    から仕様変換処理を選択する仕様変換手段と、適用する
    設計知識の関係部が書き換え関係であるときに前記仕様
    変換手段から選択され、前記適用する設計知識に基づい
    て部分仕様を書き換える書き換え関係処理手段と、適用
    する設計知識の関係部がメタプリミティブ関係であると
    きに前記仕様変換手段から選択されるメタプリミティブ
    処理手段と、該メタプリミティブ処理手段から呼び出さ
    れ、前記仕様上に記述された設計知識を前記設計知識ベ
    ースに加えたり、前記仕様上に記述されたプログラム断
    片に適合する設計知識を前記設計知識ベースから削除す
    る知識ベース変更手段とを有することを特徴とするプロ
    グラム自動生成装置。
  7. 【請求項7】  設計知識ベースを用いてプログラムの
    仕様の変換を繰り返し目的とするプログラムを生成する
    プログラム自動生成装置において、仕様を入力し構文木
    の形式に変換する仕様入力手段と、該仕様入力手段で得
    られた構文木形式の仕様の変換を制御する設計制御手段
    と、いくつかのプログラム断片とその間の関係を表す関
    係部とから構成される設計知識の集まりから構成される
    設計知識ベースと、該設計知識ベースから変換すべき部
    分仕様に適用する設計知識を選択可能なときに選択を行
    う設計知識選択手段と、変換すべき部分仕様と前記設計
    知識選択手段で選択された適用する設計知識とが適合す
    るか否かを検査し、適合するときにその部分仕様と適用
    する設計知識とを出力する適合性検査手段と、該適合性
    検査手段から出力された部分仕様と適用する設計知識と
    から仕様変換処理を選択する仕様変換手段と、適用する
    設計知識の関係部が書き換え関係であるときに前記仕様
    変換手段から選択され、前記適用する設計知識に基づい
    て部分仕様を書き換える書き換え関係処理手段と、前記
    仕様変換手段から呼び出され、部分仕様と適用した設計
    知識と変換後の部分仕様との組を記録するデリベーショ
    ン記録手段と、該デリベーション記録手段で生成された
    デリベーションを参照し、設計過程を報告する設計過程
    報告手段とを有することを特徴とするプログラム自動生
    成装置。
JP3069135A 1991-03-08 1991-03-08 プログラム自動生成装置 Pending JPH04280320A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP3069135A JPH04280320A (ja) 1991-03-08 1991-03-08 プログラム自動生成装置
FR9202784A FR2673734B1 (fr) 1991-03-08 1992-03-09 Systeme de generation automatique de programme.
US07/847,962 US5526522A (en) 1991-03-08 1992-03-09 Automatic program generating system using recursive conversion of a program specification into syntactic tree format and using design knowledge base

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP3069135A JPH04280320A (ja) 1991-03-08 1991-03-08 プログラム自動生成装置

Publications (1)

Publication Number Publication Date
JPH04280320A true JPH04280320A (ja) 1992-10-06

Family

ID=13393901

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3069135A Pending JPH04280320A (ja) 1991-03-08 1991-03-08 プログラム自動生成装置

Country Status (3)

Country Link
US (1) US5526522A (ja)
JP (1) JPH04280320A (ja)
FR (1) FR2673734B1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06175908A (ja) * 1992-12-10 1994-06-24 Nec Corp 項書き換えソフトウエア生成システム知識ベース管理システム
JPH07121361A (ja) * 1993-10-25 1995-05-12 Nec Corp 事務処理システム開発支援ツール

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2643234C (en) * 1993-10-29 2012-05-15 Microsoft Corporation Method and system for generating a computer program
US5812436A (en) * 1994-10-20 1998-09-22 Tandem Computers Incorporated Method and apparatus for testing and analyzing the conformance of a proposed set of requirements for a proposed network management application
US5715373A (en) * 1994-10-20 1998-02-03 Tandem Computers Incorporated Method and apparatus for preparing a suite of test scripts for testing a proposed network management application
US5678052A (en) * 1995-01-19 1997-10-14 International Business Machines Corporation Methods and system for converting a text-based grammar to a compressed syntax diagram
US5815717A (en) * 1995-10-27 1998-09-29 Authorgenics, Inc. Application program and documentation generator system and method
US5930798A (en) * 1996-08-15 1999-07-27 Predicate Logic, Inc. Universal data measurement, analysis and control system
CA2329345A1 (en) * 1997-04-22 1998-10-29 Greg Hetherington Method and apparatus for processing free-format data
US6256618B1 (en) 1998-04-23 2001-07-03 Christopher Spooner Computer architecture using self-manipulating trees
US6742175B1 (en) 1998-10-13 2004-05-25 Codagen Technologies Corp. Component-based source code generator
US6336214B1 (en) 1998-11-10 2002-01-01 International Business Machines Corporation System and method for automatically generating browsable language grammars
US6820070B2 (en) 2000-06-07 2004-11-16 Insyst Ltd. Method and tool for data mining in automatic decision making systems
US6973639B2 (en) * 2000-01-25 2005-12-06 Fujitsu Limited Automatic program generation technology using data structure resolution unit
US6675370B1 (en) * 2000-02-02 2004-01-06 International Business Machines Corporation System and method for imbedding hyperlinked language grammar notation in a “literate” programming environment
US20040199516A1 (en) * 2001-10-31 2004-10-07 Metacyber.Net Source information adapter and method for use in generating a computer memory-resident hierarchical structure for original source information
WO2005066840A1 (en) * 2003-12-05 2005-07-21 Edgenet, Inc. A method and apparatus for database induction for creating frame based knowledge tree
US7805461B2 (en) * 2003-12-05 2010-09-28 Edgenet, Inc. Method and apparatus for database induction for creating frame based knowledge tree
US8914770B2 (en) * 2006-01-26 2014-12-16 International Business Machines Corporation Generating compatible partner processes in BPEL
US8402451B1 (en) 2006-03-17 2013-03-19 Epic Games, Inc. Dual mode evaluation for programs containing recursive computations
US20090070074A1 (en) * 2007-09-12 2009-03-12 Anilkumar Chigullapalli Method and system for structural development and optimization
US8898628B2 (en) 2011-09-23 2014-11-25 Ahmad RAZA Method and an apparatus for developing software
US10942710B1 (en) 2019-09-24 2021-03-09 Rockwell Automation Technologies, Inc. Industrial automation domain-specific language programming paradigm
US11048483B2 (en) 2019-09-24 2021-06-29 Rockwell Automation Technologies, Inc. Industrial programming development with an extensible integrated development environment (IDE) platform
US11080176B2 (en) 2019-09-26 2021-08-03 Rockwell Automation Technologies, Inc. Testing framework for automation objects
US11042362B2 (en) 2019-09-26 2021-06-22 Rockwell Automation Technologies, Inc. Industrial programming development with a trained analytic model
US11163536B2 (en) * 2019-09-26 2021-11-02 Rockwell Automation Technologies, Inc. Maintenance and commissioning
US11733687B2 (en) 2019-09-26 2023-08-22 Rockwell Automation Technologies, Inc. Collaboration tools
US11392112B2 (en) 2019-09-26 2022-07-19 Rockwell Automation Technologies, Inc. Virtual design environment
US11733669B2 (en) * 2019-09-27 2023-08-22 Rockwell Automation Technologies, Inc. Task based configuration presentation context
US11366567B2 (en) 2019-09-27 2022-06-21 Rockwell Automation Technologies, Inc. Preferential automation view curation
US11308447B2 (en) 2020-04-02 2022-04-19 Rockwell Automation Technologies, Inc. Cloud-based collaborative industrial automation design environment

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4398249A (en) * 1970-08-12 1983-08-09 Pardo Rene K Process and apparatus for converting a source program into an object program
SE467229B (sv) * 1983-08-19 1992-06-15 Kurt Katzeff Anordning foer bildande av en information och/eller instruktion avsedd att inmatas i en datamaskins programminne
US4686623A (en) * 1985-06-07 1987-08-11 International Business Machines Corporation Parser-based attribute analysis
US4734854A (en) * 1985-10-08 1988-03-29 American Telephone And Telegraph Company System for generating software source code components
JPS62293352A (ja) * 1986-06-11 1987-12-19 Hitachi Ltd 知識情報処理システム
JPS6476322A (en) * 1987-09-18 1989-03-22 Hitachi Ltd Program synthesizing method
US5084813A (en) * 1988-04-20 1992-01-28 Kabushiki Kaisha Toshiba Rule based system for synthesizing a program suited for a target system in response to an input target system specification
JP2834171B2 (ja) * 1989-02-06 1998-12-09 株式会社日立製作所 コンパイル方法
US5159687A (en) * 1989-11-14 1992-10-27 Caseworks, Inc. Method and apparatus for generating program code files

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06175908A (ja) * 1992-12-10 1994-06-24 Nec Corp 項書き換えソフトウエア生成システム知識ベース管理システム
JPH07121361A (ja) * 1993-10-25 1995-05-12 Nec Corp 事務処理システム開発支援ツール

Also Published As

Publication number Publication date
US5526522A (en) 1996-06-11
FR2673734B1 (fr) 1997-06-27
FR2673734A1 (fr) 1992-09-11

Similar Documents

Publication Publication Date Title
JPH04280320A (ja) プログラム自動生成装置
US5632031A (en) Method and means for encoding storing and retrieving hierarchical data processing information for a computer system
US5870590A (en) Method and apparatus for generating an extended finite state machine architecture for a software specification
US5778223A (en) Dictionary for encoding and retrieving hierarchical data processing information for a computer system
US5664181A (en) Computer program product and program storage device for a data transmission dictionary for encoding, storing, and retrieving hierarchical data processing information for a computer system
JPH1063707A (ja) 論理回路検証装置および論理回路検証方法
CN106484401A (zh) 一种面向对象软件的自动化重构方法
US6219802B1 (en) System for generating test data
CN112799673B (zh) 一种网络协议数据的校核方法及装置
CN109408385B (zh) 一种基于缺陷规则和分类反馈的缺陷发现方法
CN108881032B (zh) 一种基于匹配优化的p4流水线性能提升方法
JP2003216425A (ja) 類似度計測システム
CN114706558B (zh) 基于K-Truss的复杂软件关键模块识别方法
Fletcher et al. A framework for testing object oriented software using formal specifications
CN113918473B (zh) 一种基于Swagger文档的RESTful APIs组合测试方法
JP2007535013A (ja) コンピュータプログラムの設計
CN114595464B (zh) 智能合约重入漏洞检测方法、装置、存储介质及相关设备
JPH08235033A (ja) オブジェクト指向データベース管理システムにおける結合演算方式
JP7462542B2 (ja) 生成装置、および生成方法
CN112231175B (zh) 一种基于动态仿真的软件状态监控点选择方法及系统
JP2585460B2 (ja) テストデータ作成方法
JP2795110B2 (ja) 有向グラフ作成装置
Young Verified compilation in micro-Gypsy
Scagnetto et al. Reasoning about names in higher-order abstract syntax
CN111736806A (zh) 控件注入方法、装置及终端设备