JPH0553780A - プログラム自動合成装置 - Google Patents

プログラム自動合成装置

Info

Publication number
JPH0553780A
JPH0553780A JP3244595A JP24459591A JPH0553780A JP H0553780 A JPH0553780 A JP H0553780A JP 3244595 A JP3244595 A JP 3244595A JP 24459591 A JP24459591 A JP 24459591A JP H0553780 A JPH0553780 A JP H0553780A
Authority
JP
Japan
Prior art keywords
program
similar
input
constraint
output
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.)
Withdrawn
Application number
JP3244595A
Other languages
English (en)
Inventor
Masanori Koizumi
昌紀 小泉
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 JP3244595A priority Critical patent/JPH0553780A/ja
Publication of JPH0553780A publication Critical patent/JPH0553780A/ja
Withdrawn legal-status Critical Current

Links

Abstract

(57)【要約】 【目的】 類似した入出力例題を持つプログラムから合
成に役立つ情報を取り出して仕様としての情報を増やす
ことにより、与えられた入出力例題仕様のみから目的の
プログラムを自動合成する機能を有するプログラム自動
合成装置を提供する。 【構成】 本発明のプログラム自動合成装置は、与えら
れた入出力例題仕様から類似プログラムを検索する検索
部1と、与えられた入出力例題仕様から制約条件を求
め、類似プログラムの制約条件との共通制約を求める仕
様解析部3と、類似プログラムをプログラムの典型的な
構造を表現した内部構造に変換するプログラム認識部4
と、内部構造のうち共通制約に関連した部分を抽出する
類似部分抽出部5と、類似した以外の部分を修正してコ
ードを出力するコード生成部6とから構成される。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明はプログラム自動合成装置
に関する。
【0002】
【従来の技術】近年必要とされるソフトウェアの量が増
大し、それに伴ってプログラミングの作業量も増えてい
る。プログラミングの作業は人間にとって負担の大きな
仕事であり、またプログラミングを行なうひとによって
出来不出来があり、プログラムの品質も一定しない。こ
れらの問題点を解決するための方法の一つとして、プロ
グラムが本来目的とすることを簡単に記述した仕様を与
えることによって要求をみたすプログラムを自動的に合
成する「プログラム合成」技術がある。
【0003】プログラム合成手法を考える際に、最も重
要なのは仕様をどのような形で与えるかという問題であ
る。従来、仕様の与え方として、我々の用いている自然
言語や、プログラムの意味をフォーマルに記述した論理
式等が考えられてきた。なかでも、仕様として入出力例
題を与える方法は最も人間の直観に合った方法だと考え
られている。これは、入出力例題だけを与えれば仕様を
記述することに注意を払わなくてもよいので、人間がプ
ログラムを明確に表現する方法としては自然で容易であ
り、有望な方法である。入出力例題とは、例えばPro
logの表記で書けば、 p([],[],[]). p([],[a],[a]). p([a],[b],[a,b]). p([a,b],[c],[a,b,c]). のような形をしたものである。これは2つのリストを結
合する例であるが、「2つのリストを結合するプログラ
ム」を作成するよりは、このような入出力例題を与える
方が人間にとってはるかに記述しやすい。
【0004】従来のプログラム自動合成装置は、一例と
して図3のブロック図に示すように、類似プログラムを
利用しない形態になっていた。すなわち、仕様解析部7
において与えられた入出力例題仕様の特徴を抽出し、コ
ード生成部14は、これをキーにして検索したプログラ
ムテンプレートを用いることにより、目的のプログラム
を合成する。コード生成部においては帰納推論を用いる
方法が一般的である。
【0005】
【発明が解決しようとする課題】上述した従来の技術は
帰納推論をもとにしており、プログラム合成は決められ
た探索空間の探索という形をとる。したがって、探索を
行えば理論的にはどのようなプログラムでも合成できる
はずである。しかし、入出力例題に含まれる情報が少な
いので、複雑なプログラムを合成しようとすると探索空
間が巨大になり実際的でないという問題点があった。し
たがって、入出力例題によるプログラム合成手法が対象
とするのは初歩的なプログラムに限られており、複雑な
プログラムを合成する際には利用者が補助プログラムや
制御情報などの付加的情報を指定しなければならなかっ
た。
【0006】本発明の目的は、与えられた入出力例題と
類似した入出力例題を持つプログラムから合成に役立つ
情報を取り出して仕様としての情報を増やすことによ
り、利用者が補助プログラム・制御情報など付加的な情
報を与えることなしに、入出力例題仕様のみから目的の
プログラムを自動合成する機能を有するプログラム自動
合成装置を提供することにある。
【0007】
【課題を解決するための手段】本発明のプログラム自動
合成装置は、プログラムとこのプログラムの制約条件と
がペアで予め格納されているプログラム格納部と、目的
プログラムに関し与えられた入出力例題仕様に基づき前
記プログラム格納部に格納されているプログラムの中か
ら該目的プログラムに類似する類似プログラムを検索す
る検索部と、与えられた前記入出力例題仕様から制約条
件を求め、前記類似プログラムの制約条件との共通制約
を求める仕様解析部と、前記類似プログラムをプログラ
ムの典型的な構造を表現した内部構造に変換するプログ
ラム認識部と、前記内部構造のうち前記共通制約に関連
した部分を抽出する類似部分抽出部と、前記目的プログ
ラムのうちで前記プログラム格納部に格納されているプ
ログラムに類似した部分以外の部分を修正してコードを
出力するコード生成部とから成る。
【0008】
【作用】本プログラム合成装置は、類似プログラムを利
用することによりプログラムを合成する。仕様解析部が
データ型解析部と意味制約解析部とから成り仕様に関す
る詳細な情報を解析できる。それをプログラム構造と関
連付けることができるため、類似プログラムの有用な情
報を同定できる。類似プログラムには補助プログラム情
報や制御情報などが含まれているので、利用者はこれら
の情報を与える必要がなく、入出力例題仕様を与えるだ
けでよい。
【0009】
【実施例】次に、本発明について図面を参照して説明す
る。本発明の一実施例におけるデータの流れを図1に、
処理の流れを図3にそれぞれ示す。本システムは、入出
力例題を与えるとそれらを満たすプログラムを合成す
る。 A 検索部1は入出力例題仕様中の入出力モードをキー
してプログラム格納部2から類似プログラムを検索す
る。ここで、プログラム格納部2中のプログラムについ
ては予め制約条件を計算してあり、プログラム格納部2
にはその制約条件とプログラムとがペアで格納されてい
る。 B 仕様解析部3は、与えられた入出力例題仕様から入
出力例題仕様の特徴を表現した制約条件を求める。ここ
で、仕様解析部3の構成は図4に示す通りである。まず
データ型解析部31において、与えられた入出力例題か
らデータ型に関する情報を抽出する。次に意味制約抽出
部32において、与えられた入出力例題からデータ型よ
りもプログラムの意味を表現する制約を抽出する。共通
制約抽出部33は、与えられた入出力例題仕様に関し、
データ型解析部31および意味制約抽出部32で抽出さ
れた制約条件と、上記ステップAで検索された類似プロ
グラムの制約条件との共通制約を求める。 C プログラム認識部4はステップAで検索された類似
プログラムをプログラム構造を明示的に記述した内部構
造に変換する。 D 類似部分抽出部5は、ステップCで得た内部構造の
うち、ステップBで求めた共通制約に関連した部分を抽
出する。抽出された部分は、類似プログラムの中で目的
プログラムを合成するのに利用できる部分である。もし
類似部分が抽出されなければ他のプログラムを検索しA
からDまでのステップを繰り返す。 E コード生成部6は、入出力例題仕様に適合するよう
に、類似部分以外の部分を生成する。
【0010】一例として、合成の対象とするプログラム
を論理型言語Prologで書かれたリスト処理を行な
う再帰プログラムに限定し、合成過程を具体的に説明す
る。
【0011】説明のために単純な例としてinters
ect(積集合を求めるプログラム)を合成する例を用
いる。intersectの入出力例題は次のような形
で与える。 mode intersect(+,+,−). intersect([],[],[]). intersect([],[b,c],[]). intersect([b],[b,c],[b]). intersect([a,b],[b,c],
[b]). A 入出力モードをキーにして類似しているプログラム
をライブラリから検索する。ここでは、interse
ctの入出力モード情報(第1引数、第2引数が入力
(+)、第3引数が出力(−))をキーにして、uni
on(和集合を求めるプログラム)を検索するとして話
を進める。 B 求めるプログラムの入出力例題と類似のプログラム
の入出力例題に成り立つ共通の制約をまず抽出する。
【0012】データ型解析部31においては、図5に示
すようにリストの型を分類した表現を用いる。意味制約
解析部32においては、図5に示すように4つに大別し
た表現を用いる。ここでeqlen(X,Y)はXとY
の長さが等しいこと、perm(X,Y)はXはYのp
ermutaionであること、eqocc(X,Y)
はXとYには同じアトムが出現すること、joint
(X,Y)はXとYは共通要素が存在することを表して
いる。また、複数入出力例題の制約の統合方法として、
全ての入出力例題についてその制約が成り立つand
と、ある入出力例題についてその制約が成り立つorが
ある。
【0013】この例では、類似プログラムの制約条件
と、データ型解析と意味制約解析を行なった結果の目的
プログラムの入出力例題intersectの入出力例
題に対応する制約条件はそれぞれ以下のようになる。 {set(+1),set(+2),set(-1),joint(+1,+2),suffix(+2,-1)} {set(+1),set(+2),set(-1),joint(+1,+2),subset(-1,+2)} この2つの制約から共通制約 {set(+1),set(+2),set(-1),joint(+1,+2)} を求める。この共通制約は、第1入力引数、第2入力引
数のデータ型がset型、第1出力引数のデータ型がs
et型であり、第1引数と第2引数の間には共通要素が
あるという意味制約があることを表している。 C プログラム認識部4は類似プログラムをプログラム
構造を明示的に記述した内部構造に変換する。例えば、
プログラム構造として分割統治法を用いる。分割統治法
は P←Decomp,Guard,Q,P,Comp. のように表現できる。これは、入力を2つに分解(De
comp)し、分岐条件(Guard)に当てはまれ
ば、補助述語(Q)と再帰(P)にかけ、出力を合成
(Comp)するということである。4つのパラメータ
にはそれぞれ述語を用いる。 D 類似部分抽出部5は、この内部構造のうち共通制約
に関連した部分を抽出する。内部構造のうち、共通の制
約と関連付けられた部分を取り出す。
【0014】このような制約と構造の関係を表現したル
ールを図6に示す。構文1はデータ型と述語の関係を表
したものである。ある引数のデータ型とその引数を用い
ている述語は関係していることを表している。例えば、
Rule1とRule2は構文1を用いたルールの例で
ある。Rule1は入力引数の型はリストの分解方法D
ecompに関係すること、Rule2は出力引数の型
はリストの併合方法Compに影響することを記述して
いる。
【0015】構文2はデータ型よりも詳細な関係を表し
ている。あるデータ型・演算型・統治型と述語の関係を
表したものである。例えば、Rule3とRule4は
構文1を用いたルールの例である。Rule3は、入力
の2引数の間に、あるデータ型で、ある意味制約があ
り、orという統治方法を用いているならば、条件分岐
Guardが起こることを表している。
【0016】ただし、以上のルールは制約から構造への
一対多関係であり、ひとつの制約に対してそれを実現し
た構造は複数ある。すなわち、ルールは常に成立するわ
けではない。ソース領域において成立するルールだけが
意味を持ち、それをターゲット領域に写像する。
【0017】例えば、類似プログラム(union)に
おいて、制約と構造の関係付けの際に利用されたルール
は図7に示した通りである。Rule1は、第1入力引
数、第2入力引数はset型なので、対応する構造とし
てDecompのfirstrestを用いることを示
している。同様にRule2は、第1出力引数はset
型なので、対応する構造としてCompのconsを用
いることを示している。Rule3は、第1入力引数と
第2入力引数の間に共通要素があるjoint(+1,
+2)という関係が成立する場合が存在する(or)の
で、対応する構造としてGuardのmemberを用
いることを示している。この中で、新しい入出力例題
(intersect)制約が成立するルールはRul
e1とRule3であり、これらを写像する。 E 最後に、コード生成部は、入出力例題仕様に適合す
るように、類似部分以外の部分を合成し利用者に提示す
る。順に述語を生成することにより、メタインタープリ
タ上で、入出力例題をみたすかどうかを検査する。そし
て、検査の結果うまくいった述語を写像されたプログラ
ム構造に埋め込むことにより、目的のプログラムを求め
る。この例では、写像されずに残ったパラメータをプロ
グラム構造に埋め込むことにより、目的のプログラム intersect([],Ys,[]). intersect([X|Xs],Ys,[X|Zs]):− member(X,Ys),intersect(Xs,Ys,Zs). intersect([X|Xs],Ys,Zs):− not member(X,Ys),intersect(Xs,Ys,Z s). を得る。
【0018】
【発明の効果】以上に説明したように、本発明は、利用
者が補助プログラム・制御情報など付加的な情報を与え
ることなしに、入出力例題仕様のみからプログラムを自
動合成することができるという結果を有する。
【図面の簡単な説明】
【図1】本発明の一実施例を示す構成図である。
【図2】本発明を使用しない従来のプログラム合成装置
の説明図である。
【図3】図1の実施例における処理の流れを表すフロー
チャートである。
【図4】図1の実施例における仕様解析部の説明図であ
る。
【図5】図1の実施例における仕様解析部で用いられる
分類の例を示す図である。
【図6】図1の実施例における類似部分抽出部で適用さ
れるルールの例を示す図である。
【図7】図1の実施例における類似部分抽出部で適用さ
れるルールの例を示す図である。
【符号の説明】
1 検索部 2 プログラム格納部 3 仕様解析部 4 プログラム認識部 5 類似部分抽出部 6 コード生成部

Claims (2)

    【特許請求の範囲】
  1. 【請求項1】 プログラムとこのプログラムの制約条件
    とがペアで予め格納されているプログラム格納部と、目
    的プログラムに関し与えられた入出力例題仕様に基づき
    前記プログラム格納部に格納されているプログラムの中
    から該目的プログラムに類似する類似プログラムを検索
    する検索部と、与えられた前記入出力例題仕様から制約
    条件を求め、前記類似プログラムの制約条件との共通制
    約を求める仕様解析部と、前記類似プログラムをプログ
    ラムの典型的な構造を表現した内部構造に変換するプロ
    グラム認識部と、前記内部構造のうち前記共通制約に関
    連した部分を抽出する類似部分抽出部と、前記目的プロ
    グラムのうちで前記プログラム格納部に格納されている
    プログラムに類似した部分以外の部分を修正してコード
    を出力するコード生成部とから成ることを特徴とするプ
    ログラム自動合成装置。
  2. 【請求項2】 前記仕様解析部がデータ型解析部と意味
    制約解析部と共通制約抽出部とから成ることを特徴とす
    る請求項1に記載のプログラム自動合成装置。
JP3244595A 1991-08-28 1991-08-28 プログラム自動合成装置 Withdrawn JPH0553780A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP3244595A JPH0553780A (ja) 1991-08-28 1991-08-28 プログラム自動合成装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP3244595A JPH0553780A (ja) 1991-08-28 1991-08-28 プログラム自動合成装置

Publications (1)

Publication Number Publication Date
JPH0553780A true JPH0553780A (ja) 1993-03-05

Family

ID=17121062

Family Applications (1)

Application Number Title Priority Date Filing Date
JP3244595A Withdrawn JPH0553780A (ja) 1991-08-28 1991-08-28 プログラム自動合成装置

Country Status (1)

Country Link
JP (1) JPH0553780A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009262279A (ja) * 2008-04-25 2009-11-12 Nec Corp ロボット、ロボットプログラム共有システム、ロボットプログラム共有方法およびプログラム
KR20220123950A (ko) * 2021-03-02 2022-09-13 한양대학교 에리카산학협력단 프로그램 합성 장치 및 방법
WO2022230190A1 (ja) * 2021-04-30 2022-11-03 日本電信電話株式会社 プログラム生成装置、プログラム生成方法及びプログラム
WO2022239179A1 (ja) * 2021-05-13 2022-11-17 日本電信電話株式会社 プログラム生成装置、プログラム生成方法及びプログラム

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009262279A (ja) * 2008-04-25 2009-11-12 Nec Corp ロボット、ロボットプログラム共有システム、ロボットプログラム共有方法およびプログラム
KR20220123950A (ko) * 2021-03-02 2022-09-13 한양대학교 에리카산학협력단 프로그램 합성 장치 및 방법
WO2022230190A1 (ja) * 2021-04-30 2022-11-03 日本電信電話株式会社 プログラム生成装置、プログラム生成方法及びプログラム
WO2022239179A1 (ja) * 2021-05-13 2022-11-17 日本電信電話株式会社 プログラム生成装置、プログラム生成方法及びプログラム

Similar Documents

Publication Publication Date Title
CN108446540B (zh) 基于源代码多标签图神经网络的程序代码抄袭类型检测方法与系统
CN111428044A (zh) 多模态获取监管识别结果的方法、装置、设备及存储介质
CN110633264B (zh) 应用专利数据库的研发辅助系统及其方法
CN106843840A (zh) 一种基于相似度分析的源代码版本演化注释复用方法
US7853595B2 (en) Method and apparatus for creating a tool for generating an index for a document
JPH07244666A (ja) 自然言語自動翻訳方法及び自然言語自動翻訳装置
US6154754A (en) Automatic synthesis of semantic information from multimedia documents
EP3999950B1 (en) Automatically converting a program written in a procedural programming language into a dataflow graph and related systems and methods
Abbas et al. A review of nlidb with deep learning: findings, challenges and open issues
CN113486187A (zh) 佛学知识图谱构建方法、装置、设备及存储介质
Hamreras et al. Content based image retrieval by convolutional neural networks
O'Neill Automatic translation of VDM specifications into Standard ML programs
Sheneamer CCDLC detection framework-combining clustering with deep learning classification for semantic clones
Zhou et al. Effective approaches to combining lexical and syntactical information for code summarization
JP2010061176A (ja) テキストマイニング装置、テキストマイニング方法、および、テキストマイニングプログラム
JPH0553780A (ja) プログラム自動合成装置
CN115794105A (zh) 一种微服务的提取方法、装置以及电子设备
Hou et al. A novel machine learning algorithm to reduce prediction error and accelerate learning curve for very large datasets
Espinoza-Stapelfeld et al. Comparative quantitative evaluation of distributed methods for explanation generation and validation of floor plan recommendations
Cook et al. SHAMROQ: Towards semantic models of regulations.
Koskimies et al. Modelling of space‐efficient one‐pass translation using attribute grammars
Mubarak-Ali et al. Code Clone Detection Model: A SWOT Analysis Perspective
Varma et al. Implementation of Reduct and Core features of Rough Set Theory on FPGA
Kanehara et al. A flexible image retrieval using explicit visual instruction
Bodenhofer et al. Special issue on soft computing for information mining

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 19981112