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

プログラム自動合成装置

Info

Publication number
JP2904112B2
JP2904112B2 JP8090128A JP9012896A JP2904112B2 JP 2904112 B2 JP2904112 B2 JP 2904112B2 JP 8090128 A JP8090128 A JP 8090128A JP 9012896 A JP9012896 A JP 9012896A JP 2904112 B2 JP2904112 B2 JP 2904112B2
Authority
JP
Japan
Prior art keywords
rewrite
subtree
rewriting
rule
function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP8090128A
Other languages
English (en)
Other versions
JPH09258970A (ja
Inventor
実 友部
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
Nippon Electric 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 Nippon Electric Co Ltd filed Critical Nippon Electric Co Ltd
Priority to JP8090128A priority Critical patent/JP2904112B2/ja
Publication of JPH09258970A publication Critical patent/JPH09258970A/ja
Application granted granted Critical
Publication of JP2904112B2 publication Critical patent/JP2904112B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、複数用意された書
き換え規則に基づき、木構造で表現されるプログラム仕
様の変換を繰り返してプログラムを合成するプログラム
自動合成技術に関する。
【0002】
【従来の技術】プログラム自動合成装置の一種に、左辺
部にプログラム仕様中の変換を行う部分木の構造を、右
辺部にその部分木の変換後の構造をそれぞれ定義した書
き換え規則の集合を用いて、関数記号を節とする木構造
で表現されたプログラム仕様の変換を繰り返すことによ
ってプログラムを自動生成する装置がある。なお、書き
換え対象となるプログラム仕様中に書き換え規則によっ
て書き換え可能な部分が複数ある場合、どれを優先的に
書き換えるかを定める戦略として、プログラム仕様の木
構造上で最も根に近い部分で且つ最も左側の部分を書き
換える最左最外戦略と、最も葉に近い部分で且つ最も左
側の部分を書き換える最左最内戦略とがあるが、本発明
では、このうちの後者の最左最内戦略を用いるプログラ
ム自動合成装置を対象としている。
【0003】図2は木構造で表されたプログラム仕様の
例を、図3は書き換え規則の集合の例を、図4はそれら
の書き換え規則を木構造で表現した図を、それぞれ示
す。ここで、小文字の英数字は関数記号を、大文字の英
数字は変数を表している。また、図5は図3および図4
に示す書き換え規則を用いて図2に示すプログラム仕様
の変換を繰り返す過程を示している。従来のプログラム
自動合成装置における変換は以下のように進められる。
【0004】最左最内戦略では、プログラム仕様の最左
最内部(最も葉に近い部分で且つ左側の部分)から書き
換えを行う。そこで先ず、図2のプログラム仕様の最左
最内部に適合する部分木を左辺部に持つ書き換え規則を
図3,図4に示す書き換え規則集合中から探索し、図5
の501の左辺部を持つ書き換え規則33を得て、プロ
グラム仕様の最左最内部および規則33の右辺部の内容
に基づき、図5に示す「書き換え1」を実行し、プログ
ラム仕様22の最左最内部を書き換える。
【0005】次に、この書き換え後のプログラム仕様の
最左最内部に適合する部分木を左辺部に持つ書き換え規
則を書き換え規則集合中から探索し、図5の502の左
辺部を持つ書き換え規則31を得て、プログラム仕様の
最左最内部および規則31の内容に基づき、図5に示す
「書き換え2」を実行し、プログラム仕様の最左最部を
再度書き換える。
【0006】次に、この書き換え後のプログラム仕様の
最左最内部に適合する部分木を左辺部に持つ書き換え規
則を書き換え規則集合中から探索し、図5の503の左
辺部を持つ書き換え規則32を得て、プログラム仕様の
最左最内部および規則32の内容に基づき、図5に示す
「書き換え3」を実行し、プログラム仕様の最左最部を
再度書き換える。
【0007】次に、この書き換え後のプログラム入力仕
様の最左最内部に適合する部分木を左辺部に持つ書き換
え規則を書き換え規則集合中から探索し、図5の501
の左辺部を持つ書き換え規則33を得て、プログラム仕
様の最左最内部および規則33の内容に基づき、図5に
示す「書き換え4」を実行し、プログラム入力仕様の最
左最内部を再び書き換える。そして、この書き換え後の
プログラム仕様は、これ以上書き換えが行われない正規
形であるため、書き換えを終了する。
【0008】
【発明が解決しようとする課題】前述したように従来の
装置では、木構造で表現されたプログラム仕様を書き換
え規則を用いて書き換え、新たな木構造が生成された際
に再びその木構造から書き換え規則集合中の書き換え規
則のうちで適用可能な規則を選択していた。このため、
書き換え規則によって生成される構造が、直接他の書き
換え規則によって書き換えが行われることが決定的な場
合も、常にあらためて書き換え規則の選択を行わなけれ
ばならず、その結果、書き換え処理が遅くなるという問
題がある。ここで、書き換え規則によって生成される構
造が、直接他の書き換え規則によって書き換えが行われ
ることが決定的な場合が生じるのは、各々の書き換え規
則を他の全ての書き換え規則を考慮して作成しておくこ
とが困難であること、既存の書き換え規則集合に対して
不足する書き換え規則を順次追加していって書き換え規
則集合の充実を図るようにしていること、デバッグ等の
ために規則自体を利用者が理解し易い形式で作成してい
ること等が、主な要因である。
【0009】そこで本発明の目的は、書き換え規則集合
を予め解析しておくことによって、或る書き換え規則の
適用後に生成される木構造が、書き換え規則集合中の他
の書き換え規則によって書き換えられる可能性がある場
合、書き換え規則を再度選択することなく直接書き換え
られるようにして、書き換え可能な部分に適用可能な書
き換え規則の選択に要するコストを低減し、もってプロ
グラム合成処理の速度を向上させることにある。
【0010】なお、本発明と同様に書き換えの効率化を
図った装置として、本発明者の提案にかかる特開平6−
251066号公報がある。この従来技術は、予め書き
換え規則の集合を解析して書き換え対象の候補となる関
数記号の集合を求め、この集合に含まれない関数記号は
そもそも変換の対象とはならないので、入力プログラム
仕様中のそのような関数記号に事前にマークを付けてお
き、プログラム仕様中から書き換え可能な部分を探索す
る際にマークが付けられた部分を探索範囲から除外する
ものである。この従来技術は、プログラム仕様中の探索
範囲を絞り込むことによる効率化を狙ったものである。
これに対して本発明は、書き換え規則の選択頻度の削減
による効率化を狙ったものであり、両者は同じ目的を有
するが、それを達成するためのアプローチの仕方が相違
している。
【0011】
【課題を解決するための手段】最左最内戦略を採用する
場合、書き換え規則の集合に含まれる書き換え規則のう
ち、その右辺部に現れる関数記号が、自身の書き換え規
則または他の書き換え規則の左辺部に定義された部分木
の最外部関数記号(最も根に近い位置の関数記号)と同
じである場合、その書き換え規則によって書き換えた後
の部分木が、その直後に、自身の書き換え規則または前
記他の書き換え規則によって再度書き換えられる可能性
がある。そこで本発明では、書き換え規則の集合を事前
に解析して上述のような関係にある書き換え規則を洗い
出し、或る書き換え規則の適用後に生成される木構造
が、書き換え規則集合中の他の書き換え規則によって書
き換えられる可能性がある場合、書き換え規則を再度選
択することなく直接書き換えれるようにする。
【0012】
【0013】即ち、本発明は、左辺部にプログラム仕様
中の変換を行う部分木の構造を、右辺部にその部分木の
変換後の構造をそれぞれ定義した書き換え規則の集合を
用いて、関数記号を節とする木構造で表現されたプログ
ラム仕様の変換を繰り返してプログラムを生成するプロ
グラム自動合成装置において、書き換え規則の集合を入
力し、左辺部に定義された部分木の最外部関数記号が同
一である書き換え規則のグループ毎に、呼び出し元から
引数で与えられる変換対象部分木構造に基づき当該グル
ープの何れの書き換え規則の左辺部が変換対象部分木と
マッチするかを判断し、且つ、マッチする左辺部に対応
する右辺部に定義された部分木中に自グループおよび
グループの何れかの書き換え規則の左辺部に定義された
部分木の最外部関数記号が存在するときは当該右辺部の
定義に基づく変換後の部分木の構造を引数として当該存
在した最外部関数記号に対応する書き換え関数を呼び出
してその返却値を呼び出し元に返却し、そのような最外
部関数記号が存在しないときは当該右辺部の定義に基づ
く変換後の部分木の構造を返却値として呼び出し元に返
却する書き換え関数を生成する書き換え規則コンパイル
部と、変換対象とするプログラム仕様に対して最左最内
戦略に基づいて探索した変換対象部分木の構造を引数に
してその部分木の最外部関数記号に対応する書き換え関
数を呼び出し、その返却される変換後の部分木の構造に
基づき前記変換対象部分木の書き換えを行う処理を、変
換可能な部分木が無くなるまで繰り返す書き換え装置と
を備えることを特徴とする。
【0014】更に本発明は、前記書き換え規則コンパイ
ル部に、左辺最外部関数記号登録部と、書き換え規則登
録部と、入力した書き換え規則の集合に含まれる書き換
え規則を解析し、書き換え規則の左辺部に定義された部
分木の最外部関数記号の種類を前記左辺最外部関数記号
登録部に登録すると共に、入力した書き換え規則を前記
最外部関数記号の種類毎にグループ化して前記書き換え
規則登録部に登録する書き換え規則解析部と、前記書き
換え規則登録部に登録された書き換え規則の右辺部に定
義された部分木中に前記左辺最外部関数記号登録部に登
録された種類の関数記号が存在するか否かを調べ、存在
した右辺部の関数記号にマークを付ける右辺マーク部
と、前記書き換え規則登録部に登録された書き換え規則
のグループ毎に、呼び出し元から引数で与えられる変換
対象部分木構造に基づき当該グループの何れの書き換え
規則の左辺部が変換対象部分木とマッチするかを判断
し、且つ、マッチする左辺部に対応する右辺部にマーク
が付いているときは当該右辺部の定義に基づく変換後の
部分木の構造を引数として当該マークが付いている関数
記号に対応する書き換え関数を呼び出してその返却値を
呼び出し元に返却し、マークが付いていないときは当該
右辺部の定義に基づく変換後の部分木の構造を返却値と
して呼び出し元に返却する書き換え関数を生成する書き
換え関数生成部とを含むことを特徴とする。
【0015】
【発明の実施の形態】次に本発明の実施の形態の例につ
いて図面を参照して詳細に説明する。
【0016】図1を参照すると、本発明の一実施例のプ
ログラム自動合成装置10は、書き換え規則集合24を
用いて、プログラム仕様22の変換を繰り返すことによ
ってプログラム23を生成する装置であり、仕様入力部
11,書き換え装置12,プログラム出力部13,書き
換え関数格納部14,書き換え規則コンパイル部15お
よび書き換え規則集合入力部21を備えている。
【0017】本実施例のプログラム自動合成装置10
は、大別して、書き換え規則集合24から書き換え関数
を生成する部分と、この生成された書き換え関数を使用
して、プログラム仕様22からプログラム23を生成す
る部分とに分けられる。以下では、先ず前者の部分につ
いて説明し、次いで後者の部分について説明する。
【0018】書き換え規則集合24から書き換え関数を
生成する部分は、書き換え規則集合24を入力する書き
換え規則集合入力部21と、入力された書き換え規則集
合24から書き換え関数を生成する書き換え規則コンパ
イル部15と、生成された書き換え関数を格納する書き
換え関数格納部14とで構成される。
【0019】図3に書き換え規則集合24の一例を示
す。また、図4に図3の書き換え規則集合24中の各々
の書き換え規則31〜33を木構造で表現した図を示
す。なお、図3および図4において、小文字の英数字は
関数記号を、大文字の英数字は変数を、それぞれ示す。
各々の書き換え規則31〜33は、図3に示すように、
左辺部と右辺部とそれらを結合する記号(矢印)とで構
成される。左辺部は、プログラム仕様中の変換を行う部
分木の構造を定義し、右辺部はその部分木の変換後の構
造を定義している。
【0020】この例の書き換え規則集合24は、そのま
ま適用すると、プログラム仕様中のa(X,1)または
a(X,0)となる最左最内部に関して、書き換え規則
の選択が冗長になる。即ち、プログラム仕様中の最左最
部が、若しa(X,1)ならば、書き換え規則31が選
択されてa(X,0)に変換されると、最左最内戦略で
は再び最左最内部に対する変換を行うので、次に書き換
え規則32が選択されて最左最部がb(X)に変換さ
れ、更に書き換え規則33が選択されて、最終的にXに
変換され、合計3回の書き換え規則の選択が行われるか
らである。同様に、プログラム仕様中の最左最内部が、
若しa(X,0)ならば、書き換え規則32,書き換え
規則33の順に選択されて、最終的にXに変換され、合
計2回の書き換え規則の選択が必要となる。そこで、本
実施例では、このような冗長性を排するため、プログラ
ム仕様中の最左最内部が若しa(X,1)またはa
(X,0)ならば、その変換結果として直ちにXを返却
するような書き換え関数を、書き換え規則集合24に基
づき生成する。この生成は、書き換え規則コンパイル部
15が行う。
【0021】書き換え規則コンパイル部15は、図1に
示すように、書き換え関数生成部16と、左辺最外部関
数記号登録部17と、右辺マーク部18と、書き換え規
則登録部19と、書き換え規則解析部20とから構成さ
れている。
【0022】左辺最外部関数記号登録部17は、書き換
え規則集合24に含まれる書き換え規則31〜33の左
辺部に定義された部分木の最外部関数記号の種類を保持
する部分であり、書き換え規則解析部20から書き込み
が行われ、書き換え関数生成部16から参照される。こ
こで、部分木の最外部関数記号とは、その部分木の最も
根に近い位置の関数記号を意味し、書き換え規則31,
32の場合はa,書き換え規則33の場合はbである。
【0023】書き換え規則登録部19は、書き換え規則
集合24に含まれる書き換え規則31〜33を、左辺部
の最外部関数記号の種類毎にグループ化して保持する部
分であり、書き換え規則解析部20から書き込みが行わ
れ、右辺マーク部18によって参照されると共にマーク
付けされ、また書き換え関数生成部16によって参照さ
れる。
【0024】書き換え規則解析部20は、書き換え規則
集合入力部21を通じて書き換え規則集合24を入力
し、入力した書き換え規則集合24に含まれる書き換え
規則31〜33を解析し、書き換え規則の左辺部に定義
された部分木の最外部関数記号の種類を左辺最外部関数
記号登録部17に登録すると共に、入力した書き換え規
則を最外部関数記号の種類毎にグループ化して書き換え
規則登録部19に登録する手段である。
【0025】右辺マーク部18は、書き換え規則登録部
19に登録された書き換え規則の右辺部に定義された部
分木中に左辺最外部関数記号登録部17に登録された種
類の関数記号が存在するか否かを調べ、存在した右辺部
の関数記号にマークを付ける手段である。
【0026】書き換え関数生成部16は、書き換え規則
登録部19に登録された書き換え規則のグループ毎に、
1つの書き換え関数を生成して、書き換え関数格納部1
4に格納する手段である。生成される書き換え関数は、
次のような機能、つまり呼び出し元から引数で与えられ
る変換対象部分木構造に基づき当該グループの何れの書
き換え規則の左辺部が変換対象部分木とマッチするかを
判断し、且つ、マッチする左辺部に対応する右辺部に定
義された部分木中に自グループまたは他グループの書き
換え規則の左辺部に定義された部分木の最外部関数記号
が存在するときは当該右辺部の定義に基づく変換後の部
分木の構造を引数として当該存在した最外部関数記号に
対応する書き換え関数を呼び出してその返却値を呼び出
し元に返却し、そのような最外部関数記号が存在しない
ときは当該右辺部の定義に基づく変換後の部分木の構造
を返却値として呼び出し元に返却する機能を持つ。
【0027】図6は書き換え規則コンパイル部15の処
理例を示すフローチャートである。以下、図1および図
6を参照して書き換え規則コンパイル部15の動作を説
明する。
【0028】初期の状態においては、左辺最外部関数記
号登録部17および書き換え規則登録部19の内容はク
リアされている。コンパイル時、先ず、書き換え規則解
析部20は、書き換え規則集合入力部21を通じて書き
換え規則集合24を入力する(S1)。
【0029】次に、入力した書き換え規則集合24に含
まれる書き換え規則の各々に対してステップS2〜S5
の処理を行う。先ず、その書き換え規則の左辺部におけ
る最外部の関数記号(左辺最外部関数記号)が左辺最外
部関数記号登録部17に登録されているか否かを調べ
(S3)、登録されていなければ登録した後(S4)、
その書き換え規則をその左辺最外部関数記号に関連付け
て書き換え規則登録部19へ登録する(S5)。他方、
その書き換え規則の左辺最外部関数記号が既に左辺最外
部関数記号登録部17に登録されていれば、ステップS
4をスキップして、今回の書き換え規則をその左辺最外
部関数記号に関連付けて書き換え規則登録部19へ登録
する(S5)。以上の処理を全ての書き換え規則に対し
て繰り返した時点で(S6でYES)、書き換え規則解
析部20の処理が終了する。この時点で、左辺最外部関
数記号登録部17に、書き換え規則集合24に含まれる
書き換え規則の左辺部に定義された部分木の最外部関数
記号の種類が全て登録され、また、書き換え規則登録部
19に全ての書き換え規則が左辺最外部関数記号の種類
毎にグループ化されて登録されたことになる。
【0030】次に、右辺マーク部18は、書き換え規則
登録部19に登録されている書き換え規則の各々に対し
てステップS7〜S9の処理を行う。先ず、その書き換
え規則の右辺部に、左辺最外部関数記号登録部17に登
録されている関数記号が存在するか否かを調べ(S
8)、存在すれば、書き換え規則登録部19上でその存
在した関数記号にマークを付ける(S9)。他方、存在
しなければマーク付け処理は行わない。以上の処理を全
ての書き換え規則に対して繰り返した時点で(S10で
YES)、右辺マーク部18の処理が終了する。この時
点で、書き換え規則登録部19に格納されている書き換
え規則のうち、その右辺部に定義された部分木中に自グ
ループまたは他グループの書き換え規則の左辺部に定義
された部分木の最外部関数記号と同じ関数記号を持つ書
き換え規則については、その関数記号にマークが付けら
れたことになる。
【0031】次に、書き換え関数生成部16による書き
換え関数の生成と書き換え関数格納部14への格納とが
実行される(S11)。
【0032】図7は図6のステップS11の詳細を示す
フローチャートである。以下、図1および図7を参照し
て書き換え関数生成部16の動作を説明する。
【0033】書き換え関数生成部16は、左辺最外部関
数記号登録部17に登録されている関数記号単位に、ス
テップS21〜S30を実行することにより、その関数
記号に対応する書き換え関数を生成する。
【0034】先ず、左辺最外部関数記号登録部17に登
録されている1つの関数記号に注目し(S21)、それ
に対応する書き換え関数名を生成し、書き換え関数スケ
ルトンを生成する(S22)。次に、その関数記号に関
連付けられた全ての書き換え規則を書き換え規則登録部
19から入力し(S23)、その各々の書き換え規則に
ついて、ステップS24〜S28の処理を実行する。
【0035】先ず、1つの書き換え規則に注目し(S2
4)、その左辺部から必要に応じパターンマッチを行う
プログラム断片をスケルトン部に生成する(S25)。
パターンマッチを行うプログラム断片は、左辺部に定義
された部分木の構造に従ってパターンマッチを行うプロ
グラム部分、並びに左辺部に現れる変数の代入処理を行
うプログラム部分から構成される。次に、パターンがマ
ッチした場合に書き換え後の部分木の構造を返却するプ
ログラム断片を生成するが、右辺部にマークが有る場合
と無い場合とで作成するプログラム断片が異なるので、
現注目中の書き換え規則の右辺部にマークがあるか否か
を判定し、処理を切りわける(S26)。
【0036】右辺部にマークが有る場合は、当該右辺部
の定義に基づく変換後の部分木の構造を引数として当該
マークの付いた関数記号に対応する書き換え関数を呼び
出してその返却値を呼び出し元に返却するプログラム断
片をスケルトン部に生成する(S28)。
【0037】他方、右辺部にマークが無い場合は、当該
右辺部の定義に基づく変換後の部分木の構造を返却値と
して呼び出し元に返却するプログラム断片をスケルトン
部に生成する(S27)。
【0038】以上の処理を、ステップS23で入力した
全ての書き換え規則、つまり同じ左辺最外部関数を持つ
書き換え規則に対して実行することにより(S29)、
当該左辺最外部関数に対応する1つの書き換え関数を生
成し、これを書き換え関数格納部14に格納する(S3
0)。
【0039】以上のような処理を、左辺最外部関数記号
登録部17に登録された全ての関数記号単位に実行し終
えると(S31)、書き換え関数格納部14に、各左辺
最外部関数記号に対応する書き換え関数が格納されたこ
とになり、書き換え関数生成部16の処理が終了する。
【0040】図8は図3で例示した書き換え規則集合2
4に対して書き換え規則コンパイル部15の書き換え規
則解析部20および右辺マーク部18による処理が行わ
れた後の、左辺最外部関数記号登録部17および書き換
え規則登録部19の内容例を示している。図3に示す3
つの書き換え規則31〜33には、左辺最外部関数記号
として、a,bの2種類が存在するため、図8に示すよ
うに左辺最外部関数記号登録部17にはa,bの2つが
登録される。また、書き換え規則31,32はaを、書
き換え規則33はbを左辺最外部関数として持つため、
書き換え規則登録部19上では、書き換え規則31およ
び32が左辺最外部関数aを持つグループ81として登
録され、書き換え規則33は左辺最外部関数bを持つグ
ループ82として登録される。さらに、書き換え規則3
1および32の右辺部には、左辺最外部関数記号登録部
17に登録されている関数記号aが存在するため、図8
に示すように各々にマークが付けられる。
【0041】図9は書き換え関数格納部14に格納され
た書き換え関数の例を示す。この例の書き換え関数は、
図8で例示した左辺最外部関数記号登録部17および書
き換え規則登録部19の内容に基づき書き換え関数生成
部16によって生成されたものであり、何れもC言語の
一つの関数として生成されている。このうち、書き換え
関数91は、図8の書き換え規則登録部19に登録され
ているグループ81に属する2つの書き換え規則31,
32に基づき生成された、関数記号aを書き換える関数
であり、書き換え関数92はグループ82に属する1つ
の書き換え規則33に基づき生成された、関数記号bを
書き換える関数である。
【0042】書き換え関数91には、引数として変数
X,Yが与えられる。また、書き換え規則31の左辺部
の構造は(X,1)であるため、そのパターンマッチを
行うif文として、変数Yが1か否かを調べるプログラ
ム断片「if(Y==1)」と、変数Yが1の場合の処
理を記述するプログラム断片「retrun a(X,
0)」とが含まれる。この後者のプログラム断片は、マ
ークが付いていない場合は書き換え規則31の右辺部の
構造に基づき変換後の部分木の構造「a(X,0)」を
返却値として呼び出し元に返却するプログラム断片とな
るが、マークが付いている場合には、この例に示すよう
に、右辺部の定義に基づく変換後の部分木の構造を引数
として関数記号aに対応する書き換え関数91(この例
の場合は自分自身)を直接呼び出してその返却値を呼び
出し元に返却するプログラム断片となる。同様に、書き
換え規則32の左辺部の構造は(X,0)であるため、
そのパターンマッチを行うif文として、変数Yが0か
否かを調べるプログラム断片「if(Y==0)」と、
変数Yが0の場合の処理を記述するプログラム断片「r
etrun b(X)」とが含まれる。この後者のプロ
グラム断片は、マークが付いていない場合は書き換え規
則32の右辺部の構造に基づき変換後の部分木の構造
「b(X)」を返却値として呼び出し元に返却するプロ
グラム断片となるが、マークが付いている場合には、こ
の例に示すように、右辺部の定義に基づく変換後の部分
木の構造を引数として関数記号aに対応する書き換え関
数92を直接呼び出してその返却値を呼び出し元に返却
するプログラム断片となる。なお、変数Yが1でも0で
もない場合は、書き換えが失敗した旨を示すNULL値
を呼び出し元に返却し得るようにするために、プログラ
ム断片「return NULL」が追加されている。
【0043】他方、書き換え関数92は、引数として変
数Xが与えられる。そして、この場合、パターンマッチ
の必要性が無いので、変数Xを呼び出し元に返却するプ
ログラム断片(return X)が記述されている。
【0044】次に、図1において、生成された書き換え
関数を使用して、プログラム仕様22からプログラム2
3を生成する部分について説明する。この部分は、仕様
入力部11と、書き換え装置12と、プログラム出力部
13と、書き換え関数格納部14とで構成される。
【0045】図10は書き換え装置12の処理例を示す
フローチャートである。以下、図1および図10を参照
してその動作を説明する。
【0046】書き換え装置12は、先ず、仕様入力部1
1を通じてプログラム仕様22を入力して内部に展開す
る(S41)。次に、このプログラム仕様22に対して
最左最内戦略に基づいて探索した変換対象部分木の構造
を引数にしてその部分木の最外部関数記号に対応する書
き換え関数を呼び出す(S44)。そして、その返却さ
れる変換後の部分木の構造に基づき前記変換対象部分木
の書き換えを行い(S45)、ステップS42に戻って
再び最左最内戦略に基づいて変換対象部分木を探索す
る。以上の処理を書き換え可能な部分が無くなるまで繰
り返し(S43)、書き換え可能な部分が無くなった時
点の変換後の結果を自動生成結果のプログラムとしてプ
ログラム出力部13を通じて出力する(S46)。
【0047】例えば、書き換え関数格納部14に図9に
示される書き換え関数91,92が格納されており、図
2に例示したようなプログラム仕様22が入力された場
合、書き換え装置12は、先ず、最左最内部に現れる関
数記号bに対応する書き換え関数92を変数X=1を引
数として呼び出す。書き換え関数92は図9に示す通
り、変数Xをそのまま返却するので、書き換え装置12
は、最左最内部を変数Xに書き換える。つまり、図5の
「書き換え1」のような書き換えを行う。
【0048】次に、書き換え装置12は、最左最内部に
現れる関数記号aに対応する書き換え関数91(以下、
第1の関数と呼ぶ)を変数X=1,Y=1を引数として
呼び出す。第1の関数である書き換え関数91は図9に
示す通り、変数Yが1の場合、変数X=1,Y=0を引
数として書き換え関数91(つまり自分自身。以下第2
の関数と呼ぶ)を直接呼び出す。この呼び出された第2
の関数である書き換え関数91では、変数Yが0なの
で、変数X=1を引数として書き換え関数92を直接呼
び出す。この呼び出された書き換え関数92では、その
変数X=1をそのまま呼び出し元の第2の関数に返却
し、第2の関数はそれを第1の関数に返却し、そして、
第1の関数である書き換え関数91は、呼び出し元の書
き換え装置12にそれを返却する。この結果、書き換え
装置12は、変換後の部分木の構造として、X=1を得
ることになり、最左最内部をX=1に書き換える。これ
は、図5に示す「書き換え5」に相当する。つまり、従
来必要であった「書き換え2」,「書き換え3」,「書
き換え4」が、1つの「書き換え5」で済むことにな
る。
【0049】
【発明の効果】以上説明したように本発明によれば、木
構造を持つプログラム仕様を書き換え規則の集合を用い
て書き換えを行ってプログラムを生成する場合、書き換
え規則集合を予め解析しておくことによって、或る書き
換え規則の適用後に生成される木構造が、書き換え規則
集合中の他の書き換え規則によって書き換えられる可能
性がある場合、書き換え装置は書き換え規則を再度選択
することなく直接書き換えることができ、書き換え可能
な部分に適用可能な書き換え規則の選択に要するコスト
を低減でき、高速な書き換え、つまりプログラム生成が
可能となる。
【図面の簡単な説明】
【図1】本発明の一実施例のプログラム自動合成装置の
ブロック図である。
【図2】プログラム仕様の一例を示す図である。
【図3】書き換え規則集合の一例を示す図である。
【図4】図3の書き換え規則集合に含まれる各書き換え
規則を木構造で示す図である。
【図5】書き換え規則によってプログラム仕様の変換を
繰り返す過程の説明図である。
【図6】書き換え規則コンパイル部の処理例を示すフロ
ーチャートである。
【図7】図6のステップ11の詳細な処理を示すフロー
チャートである。
【図8】左辺最外部関数記号登録部および書き換え規則
登録部の登録内容の一例を示す図である。
【図9】書き換え関数格納部に格納された書き換え関数
の例を示す図である。
【図10】書き換え装置の処理例を示すフローチャート
である。
【符号の説明】
10…プログラム自動合成装置 11…仕様入力部 12…書き換え装置 13…プログラム出力部 14…書き換え関数格納部 15…書き換え規則コンパイル部 16…書き換え関数生成部 17…左辺最外部関数記号登録部 18…右辺マーク部 19…書き換え規則登録部 20…書き換え規則解析部 21…書き換え規則集合入力部 22…プログラム仕様 23…プログラム 24…書き換え規則集合

Claims (2)

    (57)【特許請求の範囲】
  1. 【請求項1】 左辺部にプログラム仕様中の変換を行う
    部分木の構造を、右辺部にその部分木の変換後の構造を
    それぞれ定義した書き換え規則の集合を用いて、関数記
    号を節とする木構造で表現されたプログラム仕様の変換
    を繰り返してプログラムを生成するプログラム自動合成
    装置において、 書き換え規則の集合を入力し、左辺部に定義された部分
    木の最外部関数記号が同一である書き換え規則のグルー
    プ毎に、呼び出し元から引数で与えられる変換対象部分
    木構造に基づき当該グループの何れの書き換え規則の左
    辺部が変換対象部分木とマッチするかを判断し、且つ、
    マッチする左辺部に対応する右辺部に定義された部分木
    中に自グループおよび他グループの何れかの書き換え規
    則の左辺部に定義された部分木の最外部関数記号が存在
    するときは当該右辺部の定義に基づく変換後の部分木の
    構造を引数として当該存在した最外部関数記号に対応す
    る書き換え関数を呼び出してその返却値を呼び出し元に
    返却し、そのような最外部関数記号が存在しないときは
    当該右辺部の定義に基づく変換後の部分木の構造を返却
    値として呼び出し元に返却する書き換え関数を生成する
    書き換え規則コンパイル部と、 変換対象とするプログラム仕様に対して最左最内戦略に
    基づいて探索した変換対象部分木を引数にしてその部分
    木の最外部関数記号に対応する書き換え関数を呼び出
    し、その返却される変換後の部分木の構造に基づき前記
    変換対象部分木の書き換えを行う処理を、変換可能な部
    分木が無くなるまで繰り返す書き換え装置とを備えるこ
    とを特徴とするプログラム自動合成装置。
  2. 【請求項2】 前記書き換え規則コンパイル部は、 左辺最外部関数記号登録部と、 書き換え規則登録部と、 入力した書き換え規則の集合に含まれる書き換え規則を
    解析し、書き換え規則の左辺部に定義された部分木の最
    外部関数記号の種類を前記左辺最外部関数記号登録部に
    登録すると共に、入力した書き換え規則を前記最外部関
    数記号の種類毎にグループ化して前記書き換え規則登録
    部に登録する書き換え規則解析部と、 前記書き換え規則登録部に登録された書き換え規則の右
    辺部に定義された部分木中に前記左辺最外部関数記号登
    録部に登録された種類の関数記号が存在するか否かを調
    べ、存在した右辺部の関数記号にマークを付ける右辺マ
    ーク部と、 前記書き換え規則登録部に登録された書き換え規則のグ
    ループ毎に、呼び出し元から引数で与えられる変換対象
    部分木構造に基づき当該グループの何れの書き換え規則
    の左辺部が変換元対象部分木とマッチするかを判断し、
    且つ、マッチする左辺部に対応する右辺部にマークが付
    いているときは当該右辺部の定義に基づく変換後の部分
    木の構造を引数として当該マークが付いている関数記号
    に対応する書き換え関数を呼び出してその返却値を呼び
    出し元に返却し、マークが付いていないときは当該右辺
    部の定義に基づく変換後の部分木の構造を返却値として
    呼び出し元に返却する書き換え関数を生成する書き換え
    関数生成部とを含むことを特徴とする請求項記載のプ
    ログラム自動合成装置。
JP8090128A 1996-03-19 1996-03-19 プログラム自動合成装置 Expired - Fee Related JP2904112B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP8090128A JP2904112B2 (ja) 1996-03-19 1996-03-19 プログラム自動合成装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP8090128A JP2904112B2 (ja) 1996-03-19 1996-03-19 プログラム自動合成装置

Publications (2)

Publication Number Publication Date
JPH09258970A JPH09258970A (ja) 1997-10-03
JP2904112B2 true JP2904112B2 (ja) 1999-06-14

Family

ID=13989880

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8090128A Expired - Fee Related JP2904112B2 (ja) 1996-03-19 1996-03-19 プログラム自動合成装置

Country Status (1)

Country Link
JP (1) JP2904112B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4526833B2 (ja) * 2004-02-19 2010-08-18 株式会社ジャストシステム 情報処理システム、蓄積装置、処理装置、ならびに、情報処理方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
「情報処理学会研究報告」Vol.95,No.114(95−PRO−4−3)P.13−18

Also Published As

Publication number Publication date
JPH09258970A (ja) 1997-10-03

Similar Documents

Publication Publication Date Title
US5671416A (en) Apparatus and a method for searching and modifying source code of a computer program
US4860203A (en) Apparatus and method for extracting documentation text from a source code program
US6219831B1 (en) Device and method for converting computer programming languages
Swierstra et al. Higher order attribute grammars
US20040154009A1 (en) Structuring program code
JPH07219758A (ja) 仕様書生成方法
US7065753B2 (en) Method, system and computer program for syntax validation
Tai Syntactic error correction in programming languages
JP2904112B2 (ja) プログラム自動合成装置
JPH0667871A (ja) プログラム自動更新方式
Pugh Extending Graham-Glanville techniques for optimal code generation
JP3001427B2 (ja) ソフトウェアコーディングシステム
JPH1185536A (ja) 原始プログラムのエラー自動修正装置及び方法
Alblas Incremental attribute evaluation
JP2722358B2 (ja) プログラム作成支援システム
JPS6349856A (ja) 隣接構成デ−タベ−スを生成する方法
JPH08272622A (ja) プログラム変換装置
EP1465068A1 (en) Improvements in structuring program code
JPH08328841A (ja) ソフトウェア生成装置
Goettsche Integrating pattern matching within string scanning
Harford et al. A new parsing method for non‐LR (1) grammars
EP0153106A2 (en) Retargetable code generator using up/down parsing
Costagliola et al. Towards syntax-aware editors for visual languages
Swierstra et al. Higher order attribute grammars, Lecture notes of the International Summer School on Attribute Grammars, applications and systems
Alblas Attributed tree transformations with delayed and smart re-evaluation

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080326

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090326

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090326

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100326

Year of fee payment: 11

LAPS Cancellation because of no payment of annual fees