JP2727026B2 - プログラム構造自動設計装置 - Google Patents

プログラム構造自動設計装置

Info

Publication number
JP2727026B2
JP2727026B2 JP2138712A JP13871290A JP2727026B2 JP 2727026 B2 JP2727026 B2 JP 2727026B2 JP 2138712 A JP2138712 A JP 2138712A JP 13871290 A JP13871290 A JP 13871290A JP 2727026 B2 JP2727026 B2 JP 2727026B2
Authority
JP
Japan
Prior art keywords
type
data
entity
nodes
node
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
JP2138712A
Other languages
English (en)
Other versions
JPH03116229A (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.)
Ei Tei Aaru Tsushin Shisutemu Kenkyusho Kk
Original Assignee
Ei Tei Aaru Tsushin Shisutemu Kenkyusho Kk
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 Ei Tei Aaru Tsushin Shisutemu Kenkyusho Kk filed Critical Ei Tei Aaru Tsushin Shisutemu Kenkyusho Kk
Priority to US07/536,919 priority Critical patent/US5200888A/en
Priority to EP90111237A priority patent/EP0402916B1/en
Priority to DE69031719T priority patent/DE69031719T2/de
Publication of JPH03116229A publication Critical patent/JPH03116229A/ja
Application granted granted Critical
Publication of JP2727026B2 publication Critical patent/JP2727026B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Description

【発明の詳細な説明】 [産業上の利用分野] この発明はプログラム構造自動設計装置に関する。よ
り特定的には、この発明は非手続的なプログラムの仕様
記述言語で記述されたプログラム仕様に基づいて、コン
ピュータを利用することによって、手続的なプログラミ
ング言語で表されるプログラムの構造自動設計装置に関
する。
[従来の技術] プログラム構造の設計において、入出力データの構造
不一致と呼ばれる問題がある。これは計算の実行タイミ
ングの流れが同期しないという問題でもある。この問題
は「M.A.Jackson:Principles of Program Design,p.29
9,Academic Press,London(1975),(鳥居広次訳:構
造的プログラム設計の原理、P.318、日本コンピュータ
協会、東京(1980)」に示されており、従来では以下の
3つの方法で取扱われてきていた。
プログラム作成者が予め構造不一致を検出した後、
その不一致を解決しておいてから、その解決の結果に基
づいて非手続的なプログラム仕様記述言語でプログラム
仕様を記述する。このため、プログラム仕様から手続的
なプログラミング言語で表されるプログラムの構造を自
動的に設計する際には、構造不一致の検出と解決は行な
わなくて済む。
プログラムの作成者は構造不一致を意識することな
く、すなわち構造不一致の検出と解決は行なわずにプロ
グラムの仕様を記述する。しかも、プログラム仕様から
手続的なプログラミング言語で表されるプログラムの構
造を自動設計する際にも構造不一致は検出せず、常に構
造不一致が存在することを前提としたプログラム構造を
設計する。
配列および配列の要素に適用できる関数を有するこ
とを特徴とする非手続的なMODEL言語を用いて、プログ
ラム作成者が構造不一致を意識せずに、プログラム仕様
を記述する。そこで、プログラム仕様から手続的なプロ
グラミング言語で表されるプログラムの構造を自動設計
する際に、構造不一致を検出の上その不一致を解決す
る。
MODEL言語については文献「N.S.Prywes,A.Pnueli:Com
pilation of Nonprocedural Specifications into Comp
uter Programs,IEEE Trans.Softw.Eng.,Vol.SE−9,No.
3,pp.267−279(1983).」に示されている。
なお、特開昭63−14240(出願日昭和62年(1987年)
5月29日)「コンピュータ・プログラム・コードを変換
する方法(米国出願番号882737)においては、配列およ
び配列に適用できる関数を有することを特徴とする非手
続的な言語から、手続的なプログラミング言語で表され
るプログラムを自動作成するための方法を説明している
が、それには構造不一致を自動的に検出の上解決するこ
とは含まれていない。
[発明が解決しようとする課題] 入出力データの構造不一致は、本来プログラム構造を
設計する際に現れる問題である。すなわち、構造不一致
はプログラムの構造設計に関わる問題であり、プログラ
ムの機能を表すためのプログラム仕様に反映されるべき
ものではない。このため、構造不一致がプログラムの仕
様に反映され、プログラム作成者が構造不一致を意識し
なければならないことは、プログラムの仕様の記述しや
すさと理解しやすさを阻害する要因になっている。前述
ので説明した事項はこの阻害要因を含んでおり、問題
となる。
ところで、構造不一致が存在し、その構造不一致が入
力データのソーティングによって解決できなければ、計
算機の主記憶上や二次記憶上に定義された多くのデータ
を蓄積できる領域を用いて構造不一致を解決しなければ
ならない。すなわち、主記憶上に定義された配列変数
や、二次記憶上に定義されたファイルやデータベースに
多くのデータを一時蓄積して待ち合わせを行なうことに
よって、タイミングの流れの同期をとらなければならな
い。
一方、構造不一致が存在しなければ、配列変数やファ
イルやデータベースは不要であり、主記憶上に定義され
たスカラ変数でデータを処理できる。ここで、スカラ変
数を用いてデータを処理する方が、配列変数やファイル
やデータベースを用いてデータを処理するよりもプログ
ラムの実行効率がよいのは当然である。このため、構造
不一致が存在する箇所を検出し、その箇所にのみ主記憶
上や二次記憶上に定義された多くのデータを蓄積できる
領域を割当て、構造不一致が存在しない箇所には、主記
憶上のスカラ変数を割当てることが、プログラムの実行
効率をよくするために必要である。
しかし、前述ので説明した事項は、本来主記憶上の
スカラ変数を適用できる箇所にも、主記憶上や二次記憶
上に定義された多くのデータを蓄積できる領域を割当て
ることになるので、プログラムの実行効率の上で問題と
なる。
前述ので説明した事項は、プログラム仕様から手続
的なプログラミング言語で表されるプログラムの構造を
自動設計する際に、構造不一致を検出の上解決してい
る。しかし、その検出と解決の方法は、非手続的なMODE
L言語の配列の性質を用いており、集合と写像は配列よ
りも抽象的な概念であるので、集合と写像との性質を用
いた構造不一致の検出と解決とには適用できないことが
問題となる。
ところで、プログラム入出力データについて見ると、
それはデータ形式を持つと同時に情報を表している。こ
こで、情報はプログラムで処理する対象の世界によって
決まってくるが、データ形式はその情報のほか、プログ
ラムの処理効率も考慮して決まってくる。このように、
情報とデータ形式とはそれぞれ違った要因で決まってく
るため、情報とデータ形式についてプログラム仕様を分
け、しかも情報とデータ形式のそれぞれに適合した方法
でプログラム仕様を記述することは、プログラム仕様の
記述しやすさと理解しやすさのために必要である。
そこで、データ形式については、記述要素として配列
も含んだ記述方法で記述するのがよいが、情報について
は、対象世界を認識したとおりに表せる集合と写像との
性質を持った記述要素で記述することが必要である。し
かし、上述ので述べた事項の言語は、集合と写像との
性質を持った記述要素を有しないので、プログラム仕様
の記述しやすさと理解しやすさの上で問題がある。
それゆえ、この発明の主たる目的は、プログラム仕様
の記述しやすさと理解しやすさのために、プログラム作
成者が構造不一致を意識しなくてよい上に、集合や写像
の性質を持った記述要素で記述できるプログラム仕様に
基づいて、構造不一致を自動的に検出し、解決すること
によって実行効率のよいプログラム構造自動設計装置を
提供することである。
[課題を解決するための手段] 請求項1に係る発明は、集合の性質を持った記述要素
と、集合の間で集合要素相互の対応付を行なうための写
像の性質を持った記述要素とを有し、写像で対応付けら
れた集合要素の上で、集合要素が持つ値を得るのに必要
な計算方法を定めるための記述要素を有することを特徴
とする、非手続的なプログラムの仕様記述言語で記述さ
れたプログラム仕様に基づいて、手続的なプログラミン
グ言語で表されるプログラムの構造を自動設計する装置
であって、プログラムの仕様に記述されている集合の性
質を持った記述要素と計算方法を定めた記述要素に節点
を対応付け、その節点の間に計算方法を定めた記述要素
に基づいて有向枝を張ることによって有向グラフを作成
する有向グラフ作成手段と、作成された有向グラフを集
合と写像との性質および有向グラフの大局的性質の観点
から解析して計算の実行タイミングの流れが同期してい
る有向枝と節点や同期していない有向枝と節点とを検出
する検出手段と、集合の性質を持った記述要素に対応し
ている節点のうち、検出された実行タイミングの流れが
同期している節点には同一集合に属するデータは1つし
か保持できないデータ領域を割当て、実行タイミングの
流れが同期していない節点には、同一集合に属するデー
タをすべて保持できるデータ領域を割当てることによっ
てデータ構造を決定するデータ構造決定手段と、実行タ
イミングの流れが同期していない節点が部分グラフの境
界点となり、実行タイミングの流れが同期している節点
は部分グラフの内部点となり、節点を介してつながった
実行タイミングの流れが同期している有向枝同士は同一
の部分グラフに含まれるように有向グラフを連結有向部
分グラフに分割し、それぞれの部分グラフへ手続ブロッ
クを割当て、さらにそれぞれの節点へ手続を割当てるこ
とによって手続構造を決定する手続構造決定手段とを備
えて構成される。
請求項2に係る発明は、複数のエンティティ・タイプ
とリレーションシップ・タイプとデータ・タイプとを含
むとともに、各エンティティ・タイプごとにアトリビュ
ートが定められた集合の性質を持った記述要素と、リレ
ーションシップ・タイプを含む写像の性質を持った記述
要素とを有し、写像で対応付けられた集合要素の上で、
集合要素が持つ値を得るのに必要な計算方法を定めるた
めのコンストレイトを含む記述要素を有することを特徴
とする、非手続的なプログラムの仕様記述言語で記述さ
れたプログラム仕様に基づいて、手続的なプログラミン
グ言語で表わされるプログラムの構造を自動設計する装
置であって、プログラム仕様に記述されているエンティ
ティ・タイプとアトリビュートとリレーションシップ・
タイプとデータ・タイプとコンストレイトとに節点を対
応付け、その節点の間にコンストレイトに基づいて有向
枝を張ることによって有向グラフを作成する有向グラフ
作成手段と、作成された有向グラフの集合と写像との性
質および有向グラフの大局的性質の観点から解析してコ
ンストレイト実行タイミングの流れが同期している有向
枝と節点が同期していない有向枝と節点とを検出する検
出手段と、エンティティ・タイプとアトリビュートとリ
レーションシップ・タイプとデータ・タイプの節点のう
ち、検出された実行タイミングの流れが同期している節
点には、エンティティ・タイプかアトリビュート値かリ
レーションシップかデータを1つしか保持できないデー
タ域を割当て、実行タイミングの流れが同期していない
節点には、同一タイプのエンティティかを同一アトリビ
ュートの値か同一タイプのリレーションシップか同一タ
イプのデータをすべて保持できるデータ域を割当てるこ
とによって、データ構造を決定するデータ構造決定手段
と、実行タイミングの流れが同期していない節点が部分
グラフの境界点となり、実行タイミングの流れが同期し
ている節点は部分グラフの内部点となり、節点を介して
つながった実行タイミングの流れが同期している有向枝
同士は同一の部分グラフに含まれるように有向グラフを
連結有向部分グラフに分割して、それぞれの部分グラフ
へ手続ブロックを割当て、さらにそれぞれの節点へ手続
を割当てることによって手続構造を決定する手続構造決
定手段とを備えて構成される。
[作用] この発明に係るプログラム構造を自動設計する方法
は、プログラム仕様を入力して、その仕様の中に記述さ
れている集合の性質を持った記述要素と計算方法とを定
めた記述要素に節点を対応付ける。この節点の間に計算
方法を定めた記述要素に基づいて有向枝を張ることによ
って、プログラム仕様を有向グラフに展開する。展開さ
れた有向グラフを集合と写像の性質および有向グラフの
大局的な性質の観点から解析して、計算の実行タイミン
グの流れが同期している有向枝と節点や、同期していな
い有向枝と節点とを検出する。実行タイミングの流れが
同期していることが検出された節点に対応している集合
の性質を持った記述要素へそれぞれ、その集合の要素を
1つだけ格納できる計算機の主記憶上のスカラ変数を割
当るようにデータ構造を決定する。実行タイミングの流
れが同期していないことが検出された節点に対応してい
る集合の性質を持った記述要素へそれぞれ、その集合の
要素をいくつも蓄積できる計算機の主記憶上や二次記憶
上の領域を割当るようにデータ構造を決定し、その領域
にいくつもの集合要素を蓄積して待ち合わせを行なうこ
とによって、計算の実行タイミングの流れを同期させな
がら計算を実行できるようにする。実行タイミングの流
れが同期していることが検出された有向枝のみで結合さ
れている節点に対応している計算は、同じ手続ブロック
の中で実行できるようにし、実行タイミングの流れが同
期していないことが検出された有向枝を経由して結合さ
れている節点に対応している計算は、異なる手続ブロッ
クの中で実行されるように手続構造を決定し、この処理
を繰返すことによってプログラム構造を自動的に設計す
る。
[発明の実施例] 第1図はこの発明の一実施例の構成を示す概略ブロッ
ク図である。第1図を参照して、この発明の一実施例で
は、有向グラフ展開部2とプログラム仕様解析部3とプ
ログラム構造決定部4とから構成されていて、これらは
従来から知られている中央処理装置とメモリとを含むコ
ンピュータによって構成される。有向グラフの展開部2
はプログラム仕様1が入力されると、その仕様に記述さ
れている集合の性質を持った記述要素と計算方法を定め
た記述要素に節点を対応付け、その節点の間に計算方法
を定めた記述要素に基づいて、有向枝を張ることによっ
て有向グラフを作成し、プログラム仕様解析部3に与え
る。
プログラム仕様解析部3は上述の有向グラフへプログ
ラム仕様も加えたものを集合と写像との性質および有向
グラフの大局的な性質の観点から解析する。そして、プ
ログラム仕様解析部3は計算の実行タイミングの流れが
同期している有向枝と節点や、同期していない有向枝と
節点とを検出し、その検出結果をプログラム構造決定部
4に与える。
プログラム決定部4は、上述の検出結果へ有向グラフ
とプログラム仕様も加えたものに基づいて、実行タイミ
ングの流れが同期していることが検出された節点に対応
している集合の性質を持った記述要素のそれぞれへ、そ
の集合の要素を1つだけ格納できる計算機の主記憶上の
スカラ変数を割当てるようにデータ構造を決定する。プ
ログラム構造決定部4は実行タイミングの流れが同期し
ていないことが検出された節点に対応している集合の性
質を持った記述要素のそれぞれへ、その集合の要素をい
くつも蓄積できる計算機の主記憶上や二次記憶上の領域
を割当てるようにデータ構造を決定する。
さらに、プログラム構造決定部4はその領域にいくつ
もの集合要素を蓄積して待ち合わせを行なうことによっ
て、計算の実行タイミングの流れを同期させながら計算
を実行できるようにする。実行タイミングの流れが同期
していることが検出された有向枝のみで結合されている
節点に対応している計算は、同じ手続ブロックの中で実
行できるようにする。実行タイミングの流れが同期して
いないことが検出された有向枝を経由して結合されてい
る節点に対応している計算は、異なる手続ブロックの中
で実行されるように手続構造が決定され、そのデータ構
造と手続構造とをプログラム構造5として出力する。
この発明の一実施例の使用環境として、上述のプログ
ラム構造5をプログラム・コード・ジェネレータに与え
て、例えばC言語やCOBOL言語などの手続的なプログラ
ミング言語で表されたプログラムを自動生成することが
挙げられる。もう1つの使用環境として、プログラム作
成者が上述のプログラム構造5に基づいてプログラムを
コーティングすることが挙げられる。
第2図はプログラム仕様記述言語を説明するための図
であり、第3図はプログラム仕様の例の内容を説明する
ための図である。
次に、第2図および第3図を参照して、プログラム仕
様記述言語の実施例について説明する。この言語はPSDL
(Program Specification Description Language)と呼
び、プログラム仕様を以下の3階層に分けて記述する。
まず、エンティティ・タイプとリレーションシップ・タ
イプとアトリビュートおよびコンストレイントを記述す
るための情報層について説明する。情報層は、PSDLにお
いて、第2図の00行目に示すINFORMATION文(INFORMATI
ON−layer文)と26行目に示すDATA文(DATA−layer文)
の間に記述される。また、第3図においては、点線で囲
まれた上段の四角形の中10に表される。
エンティティ・タイプ 対象世界に存在する「もの」や「こと」をエンティテ
ィと称し、そのエンティティを種類に基づいて集めた集
合をエンティティ・タイプと呼ぶ。エンティティ・タイ
プは、PSDLにおいて第2図の01行目に示すE文(Entity
−type文)で記述される。また、プログラムを実行する
際に、そのエンティティ・タイプの中に現れるエンティ
ティの個数は第2図の02行目に示すEN文(Entity Numbr
文)で記述される。エンティティの個数が決まっていれ
ば整数値が記述され、エンティティの最大個数が決まっ
ていれば、「一最大個数」の形で記述される。たとえ
ば、02行目の「−50」は最大個数が50であることを示し
ている。エンティティの個数が不定の場合は「M」と記
述される。第3図においては、エンティティ・タイプは
実線の四角形11で表されている。その四角形の中にいく
つものエンティティ12が表されている。エンティティ・
タイプはエンティティの集合であるのでE文は集合の性
質を持った記述要素である。アトリビュートとプライマ
リ・キー・アトリビュート それぞのエンティティの性質はアトリビュート(属
性)の値で表される。また、エンティティ・タイプとい
う集合の中で、それぞれのエンティティを識別するため
に用いられる特別なアトリビュートはプライマリ・キー
(主キー)と呼ばれる。プライマリ・キー・アトリビュ
ートは、PSDLにおいて、エンティティ・タイプのE文に
続けて、第2図の03行目に示すK文(primary Key文)
で記述される。
プライマリ・キーでないアトリビュートは非プライマ
リ・キー・アトリビュートと呼ばれ、第2図の04行目に
示すA文(Attribute文)で記述される。第3図におい
ては、エンティティ・タイプを表している四角形11の下
に、プライマリ・キー・アトリビュートが下線つきのア
トリビュート名13で表され、非プライマリ・キー・アト
リビュートが下線なしのアトリビュート名14で表され
る。
K文やA文の中に記述されている「NUM」は、そのア
トリビュートの値が数値(NUMber)であることを示し、
「STR」は文字列(STRing)であることを示している。
1つのエンティティ・タイプに対して、プライマリ・キ
ー・アトリビュートと、非プライマリ・キー・アトリビ
ュートとをそれぞれいくつ定めてもよい。
リレーションシップ・タイプ エンティティを相互に対応づけるものをリレーション
シップと称し、そのリレーションシップを、種類に基づ
いて集めた集合はリレーションシップ・タイプと呼ばれ
る。リレーションシップ・タイプは、PSDLにおいて第2
図の05行目に示すR文(Relationship−type文)で記述
される。
さらに、そのR文に続いて、リレーションシップで対
応づけられるエンティティが属するエンティティ・タイ
プが第2図の06行目と08行目に示す2つ以上のC文(Co
llection文)で記述される。C文には、エンティティが
リレーションシップの中で果たすロール(役割)も加え
て、ピリオドで区切り、「ロール.エンティティ・タイ
プ」の形で記述される。
第3図においては、リレーションシップ・タイプは菱
形15で表し、エンティティ・タイプとの間が実線16でつ
ながれる。リレーションシップはエンティティをつない
でいる点線17で表される。このとき、1つのエンティテ
ィにつながっているリレーションシップの本数に着目す
ると、1本の場合と複数本の場合と0本の場合とがあ
る。第2図の07行目と09行目のRN文(Relationship Num
ber文)はこの本数について記述する。エンティティ・
タイプの中のすべてのエンティティが同じ本数のリレー
ションシップを持っている場合は、その整数値が記述さ
れる。エンティティ・タイプの中のエンティティが持っ
ているリレーションシップの最大数が決まっている場合
は、「一最大数」の形で記述される。最大数が不定の場
合は「M」と記述される。
リレーションシップ・タイプは同じエンティティ・タ
イプの間にも定義でき、その場合にはロールの記述が必
須である。たとえば、同じエンティティ・タイプ「人」
(person)の間に定義したリレーションシップ・タイプ
「夫婦」(couple)において、一方のエンティティは夫
(husband)のロールを果たし、他方のエンティティは
妻(wife)のロールを果たす。このリレーションシップ
・タイプは以下のように記述される。
E person K name STR A age NUM R couple C husband.person C wife.person なお、リレーションシップ・タイプで対応づけられた
エンティティ・タイプが相互に異なっていれば、第2図
の06行目と08行目に示すC文のようにロールを省略して
もよい。
リレーションシップ・タイプはリレーションシップの
集合であるので、R文とC文は集合の性質を持った記述
要素である。同時に、リレーションシップはエンティテ
ィを相互に対応づけているので、R文とC文は写像の性
質を持った記述要素でもある。そこで、RN文は写像の数
量関係を定めるための記述要素になっている。
アトリビュート値従属性コンストレイント あるエンティティのアトリビュートの値をそのエンテ
ィティへリレーションシップで対応づけられた他のエン
ティティのアトリビュートの値から計算して得るために
定めた計算方法を、アトリビュート値従属性コンストレ
イントと称する。ここで、アトリビュート値が得られる
エンティティの他のアトリビュートも、計算のためにそ
の値を参照してよい。なお、値が得られるアトリビュー
トは非プライマリ・キー・アトリビュートでなければな
らない。
このコンストレイントはPSDLにおいて、非プライマリ
・キー・アトリビュートを記述したA文に続いて、第2
図の15行目に示す=文(equal文)で記述される。15行
目の=文の中の「*」は掛算を示す演算記号である。第
3図においては、値が得られるアトリビュートと、値が
参照されるアトリビュートとをつなぐ矢印付の曲線18で
表される。
=文の中から、値が得られるエンティティとは異なる
エンティティのアトリビュート値を参照する場合は、ピ
リオドで区切られた「ロール1.リレーションシップ・タ
イプ.ロール2.エンティティ・タイプ.アトリビュー
ト」の形で記述される。ここで、ロール1はアトリビュ
ート値が得らるエンティティのロールであり、ロール2
はアトリビュート値が参照されるエンティティのロール
である。ロールは上述のリレーションシップ・タイプの
項で述べたのと同じ理由により省略してもよい。第2図
ではロールを省略している。また、=文の中から値が在
られるエンティティが持っている他のアトリビュート値
を参照する場合は、単に「アトリビュート」の形で記述
する。アトリビュート値従属性コンストレイントを定め
た記号の=文は、計算方法を定めるための記述要素であ
る。
エンティティ存在従属性コンストレイント あるエンティティに基づいて、他に存在するエンティ
ティを得るために定めた計算方法をエンティティ存在従
属性コンストレイントと称する。なお、得られたエンテ
ィティについては、そのプライマリ・キー・アトリビュ
ートの値をそのエンティティの存在の基となったエンテ
ィティのアトリビュート値から計算して得なければなら
ない。
このため、このコンストレイントは以下に示すよう
に、PSDLにおいて、それぞれのプライマリ・キー・アト
リビュートを記述したK文に続けて=文(equal文)で
記述される。
E entity−type K primary−key−1 STR =function−1(parameter−11,parameter−12,
…,parameter−1n) K primary−key−2 NUM =function−2(parameter−21,parameter−22,
…,parameter−2m) ここで、関数「function−1,function−2」のパラメ
ータ「parameter−11,parameter−12,…,parameter−1
n,parameter−21,parameter−22,…,parameter−2m」は
すべて、ピリオドで区切られた「ロール1.リレーション
シップ・タイプ.ロール2.エンティティ・タイプ.アト
リビュート」の形で記述される。ロール1は得られたエ
ンティティのロールであり、ロール2はそのエンティテ
ィの存在の基となったエンティティのロールである。ロ
ールは上述のリレーションシップ・タイプの項で述べた
のと同じ理由により省略してもよい。
このコンストレイントには関数のほか、算術演算記号
や文字列演算記号を含んだ式を記述してもよい。ところ
で、同じプライマリ・キー・アトリビュート値を持つエ
ンティティがいくつ得られても、それらは1つのエンテ
ィティと見なし、そのプライマリ・キー・アトリビュー
ト値を持つエンティティは1つしか存在しない。エンテ
ィティ存在従属性コンストレイントを定めた=文は、計
算方法を定めるための記述要素である。
リレーションシップ存在従属性コンストレイント いくつかのエンティティに基づいて、そのエンティテ
ィの間に存在するリレーションシップを得るために定め
た計算方法をリレーションシップ存在従属性コンストレ
イントと称する。このコンストレイントは以下に示すよ
うに、PSDLにおいて、リレーションシップ・タイプを記
述したR文とC文とRN文に続けて、RC文(Relationship
existence dependency Constraint文)で記述する。
R relationship−type C role−1.entity−type−1 RN 1 C role−2.entity−type−2 RN M RC predicate(parameter−1,parameter−2,…,par
ameter−n) ここで、述語「predicate」のパラメータ「parameter
−1,parameter−2,…,parameter−n」はすべてピリオ
ドで区切られた「ロール.エンティティ・タイプ.アト
リビュート」の形で記述される。この中の「ロール.エ
ンティティ・タイプ」は上述のC文で記述したいずれか
に等しく、「アトリビュート」はそのエンティティ・タ
イプのアトリビュートである。ロールは上述のリレーシ
ョンシップ・タイプの項で述べたのと同じ理由により省
略してもよい。
そこで、リレーションシップ・タイプで対応づけられ
たエンティティ・タイプのそれぞれから、任意に1つず
つ取出されたエンティティの組へ述語を適用し、述語が
真になれば、それらのエンティティの間にリレーション
シップが存在する。なお、このコンストレイントには述
語の形のほか、算術比較記号や文字列比較記号を含んだ
条件式を記述してもよい。リレーションシップ存在従属
性コンストレイントを定めたRC文は計算方法を定めるた
めの記述要素である。
データ層 データ層はPSDLにおいて第2図の26行目に示すDATA文
(DATA−layer文)と、61行目に示すACCESS文(ACCESS
−layer文)の間に記述される。第3図においては、点
線で囲まれた中段の四角形の中20に表される。
エレメント・データ・タイプ エレメント・データ・タイプはそれ以上分解すると意
味がなくなるデータのタイプである。このデータ・タイ
プは、PSDLにおいて第2図の31行目に示す記号の%文で
記述される。その%文の中の「%12s」は、プログラミ
ング言語Cと同じように12個の文字からなる文字列のデ
ータ形式を定義している。第3図ではエレメント・デー
タ・タイプはレコードの中のフィールド21で表されてい
る。
シーケンス・グループ・データ・タイプ いくつかのデータ・タイプから1つずつ取出されたデ
ータが順序を持って並んでできたデータのタイプを、シ
ーケンス・グループ・データ・タイプと呼ぶ。このデー
タ・タイプは、PSDLにおいて第2図の30行目に示すQ文
(seQuence group data type文)で記述する。なお、シ
ーケンス・グループ・データ・タイプの定義に用いられ
たデータ・タイプは、そのQ文に続いて記述される。定
義に用いられたデータ・タイプがエレメント・データ・
タイプであれば、第2図の31行目と33行目に示すように
%文で記述される。
一方、定義に用いられたデータ・タイプがシーケンス
・グループ・データ・タイプか、後述のイテレーション
・グループ・データ・タイプか、セレクション・グルー
プ・データ・タイプのいずれかであれば、以下のG文
(Group date type文)で記述される。
G group−data−type 第3図ではシーケンス・グループ・データ・タイプは
いくつかのフィールドがつながったレコード22で表され
ている。
イテレーション・グループ・データ・タイプ 同じデータ・タイプのいくつものデータが繰返してで
きたデータのタイプはイテレーション・グループ・デー
タ・タイプと呼ばれる。このデータ・タイプにはデータ
の繰返しの中で個々のデータを識別するためのインデク
スと、繰返しの終了を定めるための条件が付随する。
このデータ・タイプは、PSDLにおいて第2図の27行目
に示すI文(Iteration group data type文)で記述さ
れる。このI文に続いてインデクスが第2図の28行目に
示すIX文(IndeX文)で記述される。イテレーション・
グループ・データ・タイプの定義に用いられたデータ・
タイプは、そのIX文に続いて記述される。前述のシーケ
ンス・グループ・データ・タイプの項で述べたのと同じ
ように、定義に用いられたデータ・タイプはその種類に
応じて%文かG文で記述される。
なお、繰返しの終了を定めるための条件は、定義に用
いられたデータ・タイプを記述している文の後部にON句
で記述される。たとえば、第2図の29行目に記述された
ON句「ON ENDOFFILE(product−file)」は、ファイル
の終了を示すEOF(End Of File)が、product−fileか
ら検出されるとデータの繰返しが終了することを示して
いる。
また、第2図の50行目に記述されたON句「ON ENTITYN
UMBER(sale)」は、データの繰返し数がエンティティ
・タイプ「sale」のエンティティ数に等しくなれば、繰
返しが終了することを示している。第3図ではイテレー
ション・グループ・データ・タイプはいくつかのレコー
ドの繰返し23で表されている。
セレクション・グループ・データ・タイプ いくつかのデータ・タイプのデータのうち、いずれか
1つだけ現れるデータのタイプは、セレクション・グル
ープ・データ・タイプと呼ばれる。このデータ・タイプ
には、データ・タイプの選択条件が付随する。セレクシ
ョン・グループ・データ・タイプは以下に示すように、
PSDLにおいてS文(Selection group date type文)で
記述される。
S Selection−group−date−type−1 %10s elementary−data−type−1 ON pred icate
−1(parameter−1) %10d elementary−data−type−2 ON pred icate
−2(parameter−2) %10s elementary−data−type−3 ON pred icate
−3(parameter−3) ここで、セレクション・グループ・データ・タイプの
定義に用いられたデータ・タイプは、セレクション・デ
ータ・タイプを記述したS文に続いて記述される。前述
のシーケンス・グループ・データ・タイプの項で述べた
のと同じように、定義に用いられたデータ・タイプはそ
の種類に応じて%文かG文で記述される。
なお、データ・タイプの選択条件は、定義に用いられ
たデータ・タイプを記述している文の後部にON句で記述
される。前述のON句の中の述語「predicate−1,predica
te−2,predicate−3」がデータ・タイプの選択条件で
あり、その述語のパラメータ「parameter−1,parameter
−2,parameter−3」には、エレメント・データ・タイ
プやインデクスやアトリビュートを記述できる。そこ
で、predicate−1(parameter−1)が真であればelem
entary−data−type−1が選択され、predicate−2(p
arameter−2)が真であればelementary−data−type−
2が選択され、predicate−3(parameter−3)が真で
あればelementary−data−type−3が選択される。な
お、述語の形のほか、算術比較記号や文字列比較記号を
含んだ条件式を記述してもよい。
上述のごとく、データ・タイプは階層的に定義される
ので木構造をなしている。この木構造の葉の位置にエレ
メント・データ・タイプが来る。また、木構造の根に位
置するデータ・タイプは1つだけデータを持っているも
のとする。この1つのデータが木構造を葉の方向へ分解
されながら伝達され、最終的にはエレメント・データ・
タイプのデータになる。
ところで、データ・タイプはデータの集合になってい
るので、%文とQ文とI文とS文は集合の性質を持った
記述要素になっている。また、シーケンス・グループ・
データ・タイプとイテレーション・グループ・データ・
タイプとセレクション・グループ・データ・タイプは、
その定義に用いられたデータ・タイプに属しているデー
タと、自分自身のデータ・タイプに属しているデータを
相互に対応付けているので、Q文とI文とS文は集合要
素相互の対応付けを行なうための写像の性質を持った記
述要素にもなっている。
情報層とデータ層の対応コンストレイント このコンストレイントはデータ層と情報層とをつなぐ
ために記述される。ところで、入出力データやインデク
スの値は対象世界の情報を表現しており、その情報の枠
組みはエンティティ・タイプやそのアトリビュートやリ
レーションシップ・タイプとして定められる。このた
め、入出力データやインデクスの値はエンティティやそ
のアトリビュート値やリレーションシップを表現するも
のとみなす。
そこで、エンティティの表現については、どのエレメ
ント・データ・タイプやインデクスがどのエンティティ
・タイプのエンティティを表すかを定めたものをエンテ
ィティの表現に関するコンストレイントと称する。
このコンストレイントはPSDLにおいてエレメント・デ
ータ・タイプを記述した%文に続けて、第2図の32行目
に示す=文(equal文)で記述される。また、このコン
ストレイントの=文を、インデクスを記述したIX文に続
けて記述してもよい。これらの=文には、エンティティ
・タイプと、そのプライマリ・キー・アトリビュートは
ピリオドで区切られて、「エンティティ・タイプ.プラ
イマリ・キー・アトリビュート」の形で記述される。
リレーションシップの表現については、そのリレーシ
ョンシップで対応づけられたエンティティも同時に表現
しなければならない。そこで、どのエレメント・データ
・タイプやインデクスが、どのリレーションシップ・タ
イプのリレーションシップで対応づけられたエンティテ
ィを表すかを定め、これがリレーションシップとエンテ
ィティの表現に関するコンストレイントと呼ばれる。
このコンストレイントは、PSDLにおいて、エレメント
・データ・タイプを記述した%文に続けて、第2図の40
行目と45行目に示す=文(equal文)で記述される。ま
た、このコンストレイントの=文を、インデクスを記述
したIX文に続けて記述してもよい。これらの=文には、
リレーションシップ・タイプとエンティティ・タイプ
と、そのロールとプライマリ・キー・アトリビュートと
がピリオドで区切られて、「リレーションシップ・タイ
プ.ロール.エンティティ・タイプ.プライマリ・キー
・アトリビュート」の形で記述される。ロールは上述の
リレーションシップ・タイプの項で述べたのと同じ理由
により省略してもよい。
このコンストレイントを記述する場合、1つのリレー
ションシップ・タイプについて2つ以上の記号の=文を
記述しなければならない。イテレーション・グループ・
データ・タイプを記述したI文の後に2つ以上の=文が
記述されていれば、同じインデクス値を持つデータを対
象にしてコンストレイントが適用される。
なお、同じエレメント・データ・タイプにおいてイン
デクス値が前後するデータを対象にしてコンストレイン
トを適用したい場合、以下のようにON句を付けて記述さ
れる。
ここで、「PRIOR」は前のインデクス値を示し、「NEX
T」は後のインデクス値を示す。
Q sequence−group−data−type IX i ON ENDOFFILE(file) %10s elementary−data−type−1 =relationship−type.role−1.entity−type.prim a
ry−key−attribute ON PRIOR =relationship−type.role−2.entity−type.prim a
ry−key−attribute ON NEXT %5d elementary−data−type−2 さて、アトリビュート値の表現については、どのエレ
メント・データ・タイプやインデクスがどのエンティテ
ィ・タイプのアトリビュートの値を表すかを定めたもの
が、アトリビュート値の表現に関するコンストレイント
と称される。ただし、このアトリビュートは非プライマ
リ・キー・アトリビュートでなければならない。このコ
ンストレイントは、PSDLにおいて、エレメント・データ
・タイプを記述した%文に続けて、第2図の34行目に示
す記号の=文(equal文)で記述される。また、このコ
ンストレイントの=文を、インデクスを記述したIX文に
続けて記述してもよい。これらの=文には、エンティテ
ィ・タイプとそのアトリビュートがピリオドで区切ら
れ、「エンティティ・タイプ.アトリビュート」の形で
記述される。
ところで、イテレーション・グループ・データ・タイ
プを記述したI文の後に、このコンストレイントの=文
が記述されていれば、同じインデクス値を持つデータへ
適用されたエンティティの表現に関するコンストレイン
トや、リレーションシップとエンティティの表現に関す
るコンストレイントで表現されるエンティティについ
て、そのアトリビュート値が表現されるものとする。
第3図においては、情報層とデータ層の対応コンスト
レイントは、データ層のエレメント・データ・タイプや
インデクスと、情報層のプライマリ・キー・アトリビュ
ートや非プライマリ・キー・アトリビュートやリレーシ
ョンシップ・タイプの間をつないでいる直線24で表され
る。
情報層とデータ層との対応コンストレイントが、エン
ティティ・タイプに属しているエンティティやリレーシ
ョンシップ・タイプに属しているリレーションシップ
と、データ・タイプに属しているデータを相互に対応づ
けているので、集合要素相互の対応づけを行なうための
写像の性質を持った記述要素となっている。
アクセス層 アクセス層はPSDLにおいて、第2図の61行目に示すAC
CESS文(ACCESS−layer文)の後に記述される。プログ
ラム入出力としてのファイルをデータセット・タイプと
呼ぶ。ただし、ファイルはシーケンシャル・アクセス・
ファイルとする。データセット・タイプは、PSDLにおい
て第2図の62行目に示すD文(Data set type文)で記
述する。データセット・タイプの入力と出力の区別は入
出力コンストレイントと呼び、「INPUT」か「OUTPUT」
で記述する。また、入出力レコード長をバイト「Byte」
単位で記述する。データセット・タイプとデータ・タイ
プの対応づけはデータ層とアクセス層の対応コンストレ
イントと呼び、データ層において木構造で定義された根
のデータ・タイプで記述する。
第3図においては、点線で囲まれた下段の四角形の中
30にデータセット・タイプ31を表している。また、入出
力コンストレイントはINPUT32かOUTPUT33で表わしてい
る。データ層とアクセス層の対応コンストレイントは、
データセット・タイプと、上述の木構造の根のデータ・
タイプとの間をつなぐ直線34で表される。
ところで、データ・タイプは1つのファイルを要素と
して含んでいる集合と見なされるので、集合の性質を持
った記述要素と見なすことができる。また、データ層と
アクセス層の対応コンストレイントは、データセット・
タイプに1つだけ含まれている前述の要素と、同じよう
に前述の根のデータ・タイプに1つだけ含まれているデ
ータを対応付けているので、集合要素相互の対応付けを
行なうための写像の性質を持った記述要素と見なすこと
ができる。
有向グラフの展開 第4図は有向グラフを説明するための図であり、第5
図は有向グラフの節点と有向枝の張り方を表に示した図
である。
有向グラフはプログラム仕様を解析するためのもので
あり、節点と有向枝とからなる。節点は第5図の節点欄
に示すものがあり、ストラクチャ節点とコンストレイン
ト節点に分かれる。なお、プライマリ・キー・アトリビ
ュートはエンティティ・タイプ節点が代表して表してい
る。有向枝はストラクチャ節点とコンストレイント節点
の間に、第5図の有向枝欄に示すように張られる。ただ
し、データ・タイプ節点相互にも張ることができる。有
向枝の方向は、データや値が参照される方から設定され
る方を向いている。
第4図において、有向枝はすべて矢印41で表している
が、節点についてはそれぞれエンティティ・タイプ節点
を正方形42で表し、非プライマリ・キー・アトリビュー
ト節点を丸43で表し、リレーションシップ・タイプ節点
を菱形44で表し、データ・タイプ節点を長方形45で表
し、データセット・タイプ節点は、楕円形46で表し、コ
ンストレイント節点はまとめて三角形47で表している。
長方形の中の星印は、そのデータ・タイプ節点がイテ
レーション・グループ・データ・タイプのものであるこ
とを示している。なお、第4図に示すように、データ・
タイプの木構造の中において、木構造の根となっている
データ・タイプのみがイテレーション・グループ・デー
タ・タイプであり、かつ木構造の中にセレクション・グ
ループ・データ・タイプがない場合、そのイテレーショ
ン・グループ・データ・タイプとその構成要素のデータ
・タイプの節点のみを有向グラフに表し、また情報層と
データ層の対応コンストレイントは木構造ごとに1つに
まとめた節点で表しても、解析結果に差は出ない。
また、第4図において、48と49はアトリビュート値従
属性コンストレイント節点であり、50と51と52は情報層
とデータ層の対応コンストレイント節点であり、53と54
と55はデータ層とアクセス層の対応コンストレイント節
点である。
ところで、コンストレイントの評価がプログラムの実
行に対応しているので、その評価の契機を与えるための
タイミングが有向枝を流れるものと見なす。そこで、有
向枝を同期型有向枝と非同期型有向枝に分け、前者にお
いてはストラクチャ節点を介してつながる同期型有向枝
との間でタイミングの流れが同期し、後者においてはス
トラクチャ節点を介してつながるすべての有向枝との間
でタイミングの流れが同期しないものとする。そして、
後に述べるプログラム仕様の解析によって非同期型有向
枝を検出する。
プログラム仕様の解析 次に、プログラム仕様の解析の実施例について説明す
る。有向グラフへプログラム仕様も加えて、集合と写像
の性質を用いてまず局所的に解析し、それから大局的に
解析する。局所的な解析は以下のようにして行なわれ
る。
和集合 エンティティ・タイプの節点へ2本以上の有向枝が流
入する場合、それぞれの枝から到着するエンティティに
同じプライマリ・キー・アトリビュート値を持つものが
あれば、それらは同じエンティティ、すなわち1つのエ
ンティティとして処理しなければならない。このため、
それぞれの枝から到着するエンティティの集合について
和集合をとらなければならない。それゆえに、それぞれ
の有向枝の間でエンティティのプライマリ・キー・アト
リビュート値を照合しなければならない。しかし、入力
ファイルがソートされているといった特殊な場合以外
は、一般的に同じプライマリ・キー・アトリビュート値
を持つエンティティがそのエンティティ・タイプへ同期
して到着するとは限らない。このため、2本以上の流入
有向枝の間でタイミングの流れが同期しない。
また、2本以上の流入有向枝からすべてのエンティテ
ィが到着し、前述の照合が終了した後でなければ、その
エンティティのアトリビュート値を用いるコンストレイ
ントは評価できない。このため、そのエンティティ・タ
イプ節点だけでなく、そのエンティティ・タイプの非プ
ライマリ・キー・アトリビュートの節点も含めて、その
流入有向枝は流出有向枝との間でタイミングの流れが一
般的には同期しない。
ただし、このことは、流出有向枝同士の間でタイミン
グの流れが同期することは妨げていない。したがって、
そのエンティティ・タイプ節点と、そのエンティティ・
タイプの非プライマリ・キー・アトリビュートの節点に
流入している有向枝をすべて非同期型有向枝とする。
リレーションシップ・タイプ節点へ2本以上の有向枝
が流入する場合も、同じ理由によって和集合をとらなけ
ればならないので、その流入有向枝をすべて非同期型有
向枝とする。
写像の数量関係 アトリビュート値従属性コンストレイントやエンティ
ティ存在従属性コンストレイントによって、或るエンテ
ィティ・タイプのアトリビュートの値が、或るリレーシ
ョンシップ・タイプを経由して参照されるものとする。
そこで、前述のリレーションシップ・タイプにおいてRN
文で定められた前述のエンティティ・タイプに対する数
値が1であれば、そのエンティティ・タイプの各エンテ
ィティのアトリビュート値は1回しか参照されない。こ
のため、そのアトリビュートの節点に流入している有向
枝と流出している有向枝との間で、タイミングの流れが
同期している。
一方、前述の数値が1でなくて2以上の数値かMであ
れば、同一のエンティティの同一のアトリビュートの値
が2回以上参照される。このとき、入力ファイルがソー
トされているといった特殊な場合以外は、同一のアトリ
ビュート値に対する2回以上の参照が必ずしも連続して
起きるとは限らない。すなわち、そのアトリビュートに
対応している節点から流出している有向枝と流入してい
る有向枝との間でタイミングの流れが一般的には同期し
ない。ここで、その節点から流出している有向枝が前述
のRN文で定められた1でない数値に対応している。した
がって、そのアトリビュートに対応している節点から流
出している有向枝を非同期型有向枝とする。
ところで、アトリビュート値従属性コンストレイント
によって、或るリレーションシップ・タイプを経由して
参照されたアトリビュート値から、あるエンティティ・
タイプのアトリビュート値が得られるとしよう。そこ
で、前述のリレーションシップ・タイプにおいて、RN文
で定められた前述のエンティティ・タイプに対する数値
が2以上の数値Mになるのは、総計をとるというよう
な、不定個数の値へ適用されるアグリゲーション関数を
用いると現れる。
アグリゲーション関数には中間値を格納するための変
数が必要であり、その変数は前述のエンティティ・タイ
プに属するエンティティごとに必要である。このため、
その変数を、それぞれのエンティティごとに設けるよう
にプログラム構造を設計する。そこで、同じ変数が一般
的には2回以上更新されるが、入力ファイルがソートさ
れているといった特殊な場合以外は、同一の変数に対す
る2回以上の更新が必ずしも連続して起きるとは限らな
い。このため、そのアトリビュートへすべての値が流入
した後でなければ、その変数の最終値をアトリビュート
値として参照するコンストレイントを評価してはならな
い。それゆえに、その節点に流入している有向枝と流出
している有向枝との間で、タイミングの流れが一般的に
は同期しない。ここで、その節点へ流入している有向枝
が前述のRN文で定められた1でない数値に対応してい
る。したがって、そのアトリビュートに対応した節点へ
流入している有向枝を非同期型有向枝とする。
エンティティ存在従属性コンストレイントによって、
あるリレーションシップ・タイプを経由して参照される
或るエンティティ・タイプのエンティティから、他のエ
ンティティ・タイプのエンティティが得られるとしよ
う。そこで、前述のリレーションシップ・タイプにおい
て、エンティティから得られるエンティティ・タイプに
対するRN文で定められた数値が2以上の数値かMになる
のは、参照されている2個以上のエンティティから同一
のエンティティが得られる場合に出現する。このため、
上述の和集合の項で説明したのと同様に和集合をとらな
ければならない。したがって、それと同じ理由によっ
て、エンティティが得られるエンティティ・タイプへ対
応した節点に流入している有向枝を非同期型有向枝とす
る。
リレーションシップ存在従属性コンストレイントにお
いては、前述のプログラム仕様記述言語のリレーション
シップ存在従属性コンストレイントの項で述べたよう
に、リレーションシップ・タイプで対応付けられた各エ
ンティティ・タイプから1個ずつの任意のエンティティ
を取出し、そのエンティティの組へコンストレイントに
記述された述語を適用しなければならない。このため、
同じエンティティの同じアトリビュート値が一般的には
2回以上参照される。それゆえに、RN文で定められる数
値を仮想的にMとみなすことができる。したがって、上
述の同じ理由により、リレーションシップ存在従属性コ
ンストレイント節点へ流入している有向枝を非同期型有
向枝とする。
以上述べた局所的な解析において、非同期型と判定さ
れた有向枝がつながっている節点がアトリビュートのも
のであれば、蓄積されたアトリビュート値のそれぞれが
どのエンティティのものであるかを識別するためにエン
ティティの蓄積も必要であるので、そのアトリビュート
を持つエンティティ・タイプの節点につながっている有
向枝も非同期型とする。
第6図は大局的にプログラム仕様を解析するために、
単一方向閉路を説明するための図である。第6図(a)
に示すように、有向グラフの中に単一方向閉路51がある
場合、エンティティやリレーションシップ自体のつなが
りは閉路を描かず、一般的には何本もの螺旋52と53とを
描くものとする。ここで、コンストレイントは螺旋に沿
って評価しなければならない。なお、第6図以降の図に
おいては、同じ方向を持った有向枝がつながってできた
有向路を矢印つきの一点鎖線で示している。
さて、第6図(b)図に示す線62のように螺旋が分流
し、分流直後のリレーションシップ・タイプ61上にリレ
ーションシップ存在従属性コンストレイントか、エンテ
ィティ存在従属性コンストレイントが定められている
と、コンストレイント評価の1つのタイミングから何個
ものタイミングが発生し、しかも1本の螺旋上でいくつ
もの箇所62と63と64とに発生する。そこで、タイミング
の発生をアトリビュート値に対応付けて表示し、データ
・ドリブン方式で手続を制御するようにプログラム構造
が決定される。このため、タイミングの発生とコンスト
レイントの評価が同期しない。すなわち、タイミングの
流れが同期しない。したがって、タイミング発生が表示
されるストラクチャ節点へ流入している有向枝を非同期
型有向枝とする。
また、第6図(c)に示す線72や73のように螺旋が合
流し、合流直前のリレーションシップ・タイプ71上にリ
レーションシップ存在従属性コンストレイントか、エン
ティティ存在従属性コンストレイントが定められている
と、予め閉路上のコンストレイントを評価してみなけれ
ば、どの螺旋同士が合流するかわからず、しかもコンス
トレイントの評価が済んでいる螺旋へ合流することもあ
る。
このため、コンストレイントの再評価が必要となるの
で、それまでに計算した内容をご破算にするといういわ
ゆるバックトラッキング方式で手続を制御するようにプ
ログラム構造を決定する。コンストレイントが再評価さ
れると、アトリビュート値も再度参照され、設定される
ので、タイミングの流れが同期しなくなる。したがっ
て、その閉路上のコンストレイント節点につながる枝を
すべて非同期型有向枝とする。
第7図はデータ形式による順序を説明するための図で
あり、第8図は方向混在閉路を説明するための図であ
る。
第7図(a)はデータ・タイプが階層的に定義されて
いる木構造を表したものであり、シーケンス・グループ
・データ・タイプ81の定義に使用されたデータ・タイプ
の中に、平行する2個以上のイテレーション・グループ
・データ・タイプ82と83があるとしよう。この場合、イ
テレーション・グループ・データ・タイプ82のデータが
すべて現れた後に、イテレーション・グループ・データ
・タイプ83のデータが現れる。このため、イテレーショ
ン・グループ・データ・タイプ82と83との間に、シーケ
ンス・グループ・データ・タイプ81を境にした先行84と
後行85との関係、すなわち先行後行関係が生じる。
また、第8図(a)図に示すように、非同期型有向枝
91があると、その有向枝91が流入しているか、また流出
しているストラクチャ節点に、そこを通過するすべての
アトリビュート値を蓄積して待ち合わせ92を行ない、そ
の蓄積の完了後、そのアトリビュート値を参照するコン
ストレイントを評価するようにプログラム構造を決定す
る。このため、待ち合わせの節点を境にして先行93と後
行94との関係、すなわち先行後行関係が生じる。
そこで有向グラフの中の方向混在閉路に着目する。た
だし、その閉路上の有向枝の合流点はコンストレイント
節点かデータ・タイプ節点であり、分流点はストラクチ
ャ節点とする。また、その閉路の中に上述の先行後行関
係を持った2個のイテレーション・データ・タイプがあ
れば、第7図(b)に示すように、先行のイテレーショ
ン・グループ・データ・タイプの節点から後行のイテレ
ーション・グループ・データ・タイプの節点へ仮の非同
期型有向枝86を張り、その代わりに、楕円形87で囲まれ
たシーケンス・グループ・データ・タイプの節点につな
がる有向枝を仮に削除する。
その閉路の中に、第8図(b)に示すように、非同期
型有向枝101と102とが同一方向にのみ1個以上存在して
いる場合、その閉路の中の他の有向枝がすべて同期型で
あると仮定すると、先行後行関係に矛盾が生じる。この
矛盾を解決するために、第8図(c)に示すように、そ
れらの非同期型有向枝とは逆の方向を持ち、かつエンテ
ィティ・タイプ節点か非プライマリ・キー・アトリビュ
ート節点かリレーションシップ・タイプ節点につながっ
ている有向枝を少なくとも1つは非同期型有向枝111と
する。
なお、この非同期型有向枝がつながっている節点がア
トリビュートのものであれば、蓄積されたアトリビュー
ト値のそれぞれがどのエンティティのものであるかを識
別するためにエンティティのプライマリ・キー・アトリ
ビュート値の蓄積も必要であるため、そのアトリビュー
トを持つエンティティ・タイプの節点につながっている
有向枝も非同期型とする。
非同期型有向枝が新たに現れることによって、他の方
向混在閉路上で新たに先行後行関係に矛盾が生じること
もある。その場合は上述の処理を繰返して矛盾を解決
し、矛盾が生じなくなれば、繰返しを終了する。
プログラム構造の決定 次に、プログラム構造の決定の実施例について説明す
る。プログラム構造として以下に述べるデータ構造と手
続き構造とを決定する。
データ構造 上述のプログラム仕様の解析によって非同期型と決ま
った有向枝が1本でも流入しているか、あるいは流出し
ているストラクチャ節点を非同期型ストラクチャ節点と
称する。その他の節点は同期型ストラクチャ節点と称す
る。上述の有向グラフの展開の項で述べた非同期型有向
枝の定義からわかるように、非同期型ストラクチャ節点
ではタイミングの流れが同期しないので、その節点に構
造不一致が存在する。このため、その節点に配列変数か
ランダム・アクセス・ファイルを割当てて構造不一致を
解決する。
非同期型ストラクチャ節点がエンティティ・タイプ節
点かアトリビュート節点であれば、そのエンティティ・
タイプのEN文を見る。EN文に定数値が記述されていれ
ば、その数だけ要素を持った配列が割当てられる。一
方、EN文に「M」が記述されていれば、エンティティの
最大数が不定であるため、ランダム・アクセス・ファイ
ルが割当てられる。リレーションシップ・タイプについ
ては、そのリレーションシップ・タイプが対応付けてい
るエンティティ・タイプのEN文に記述されている数値
と、そのリレーションシップ・タイプのRN文に記述され
ている数値から計算してリレーションシップ数が得られ
る。そこで、リレーションシップ数が得られれば、その
数だけ要素を持った配列が割当てられる。一方、リレー
ションシップ数が不定となれば、ランダム・アクセス・
ファイルが割当てられる。
非同期型有向枝が1本もつながっていないストラクチ
ャ節点には、構造不一致が存在しないので、そのアトリ
ビュート値やデータやリレーションシップを1つだけ保
持できるスカラ変数が割当てられる。
第9図は同期型実行領域を説明するための図であり、
第10図はプログラム構造を説明するための図である。
上述のプログラム解析方法によって、第4図に示した
有向グラフを解析すると、第9図に太線の矢印で示して
いる非同期型有向枝121から129までが得られる。このた
め、第9図の節点131から137までが非同期型節点となる
ので、第10図(a)に示すように配列変数「product.na
me」201と、「product.price」202と、「sale.number」
203と、「sale.amount」204と、「buy」205と、「custo
mer.name」206と、「costomer.total」207が割当てられ
る。同期型のストラクチャ節点には、第10図(a)の
「sale.quantity」208に示しているスカラ変数が割当て
られる。なお、データ・タイプ節点には変数は割当てら
れない。
ところで、データ・ドリブン方式が適用される単一方
向閉路上の節点へ割当てた配列やファイルには、エンテ
ィティのアトリビュートごとにタイミング表示フラグを
格納するための変数が付けられる。また、バックトラッ
キング方式が適用される単一方向閉路上の節点へ割当て
た配列やファイルには、エンティティのアトリビュート
ごとに再評価フラグを格納するための変数も付けられ
る。
手続構造 まず、有向グラフを以下に述べる連結グラフに分割す
る。この連結グラフは端点として非同期型ストラクチャ
節点を持ち、その他の節点は内部点として持つ。なお、
データセット・タイプ節点はデータを蓄積したファイル
であるので、非同期型ストラクチャ節点とする。節点を
介してとなりあっている非同期型有向枝同士は同じ連結
グラフに入れられる。また、コンストレイント節点を介
してとなりあっている非同期型有向枝と同期型有向枝は
同じ連結グラフに入れられる。
そこで、連結グラフを同期型実行領域と呼び、その領
域を手続構造における1個の手続ブロックへ対応付け
る。その領域の中には構造不一致が存在しない。上述の
大局的な解析は以下に述べる事項を保証している。すな
わち、となりあっている2つの同期型実行領域につい
て、両者の境界上の非同期型節点へ流入する有向枝はす
べて一方の同期型実行領域に含まれ、しかも他方の同期
型実行領域は境界上の非同期型節点から流出する有向枝
のみを含んでいる。このことは両者の同期型実行領域の
間にプログラムの実行順序があることを示している。こ
のため、同期型実行領域の間に実行の半順序が存在する
ことになる。この半順序から、前述の手続ブロックの実
行順序を決めるための全順序が得られる。
次に、同期型実行領域の中でそれぞれのコンストレイ
ント節点やストラクチャ節点に手続が割付けられる。同
期型実行領域の中ではコンストレイント節点やストラク
チャ節点が有向枝でつながれているので、それらの節点
の間に半順序が存在している。この半順序から手続の実
行順序を決めるための全順序が得られる。
1つの手続ブロックは1つ以上の繰返し制御ループを
含んでいる。この制御ループは、以下に述べるように、
手続ブロックの中で最初に実行されるコンストレイント
で決まる。
入力用のデータセット・タイプ節点につながっている
データ層とアクセス層の対応コンストレイントが最初に
実行される場合は、1つの制御ループが入力用のファイ
ルに対して割当てられて、そのループはファイル内のそ
れぞれの入力レコードごとに繰返される。
アトリビュート値従属性コンストレイントが最初に実
行される場合は、そのコンストレイントを記述している
=文の中に1つだけ現れているリレーションシップ・タ
イプの節点が非同期型になっている。そのリレーション
シップ・タイプに対して1つの制御ループが割当てら
れ、そのループはリレーションシップごとに繰返され
る。
リレーションシップ存在従属性コンストレイントが最
初に実行される場合は、そのコンストレイントが記述さ
れたリレーションシップ・タイプが対応付けている1つ
以上のエンティティ・タイプの節点が非同期型になって
いる。そのエンティティ・タイプに対するごとに1つず
つの制御ループが割当てられ、そのそれぞれのループは
エンティティごとに繰返される。
エンティティ存在従属性コンストレイントが最初に実
行される場合は、そのコンストレイントからアトリビュ
ート値が参照される1つ以上のエンティティ・タイプが
非同期型になっている。そのエンティティ・タイプごと
に1つずつの制御ループが割当てられ、そのそれぞれの
ループはエンティティごとに繰返される。
出力用のデータセット・タイプ節点につながっている
データ層とアクセス層の対応コンストレイントが最初に
実行される場合は、そのコンストレイントが記述されて
いるイテレーション・グループ・データ・タイプのIX文
のON句に記述されているエンティティ・タイプに対して
1つの制御ループが割当てられ、そのループはエンティ
ティごとに繰返される。
たとえば、第9図では節点131から137までと、141か
ら143までが非同期型節点になるので、点線で囲まれた
3個の同期型実行領域151と152と153とが得られる。ま
た、それらの領域の実行順序は節点131から137までへの
流入と流出の順序から、領域151が先行し、次に152とな
り、最後は153になる。そこで、手続構造として、第10
図(b)に示している3つの手続ブロック251と252と25
3とが得られる。それぞれの手続ブロックは1個ずつの
制御ループ261と262と263とで実現され、それぞれのル
ープ上では271から272までの処理と、273から279までの
処理と、280から283までの処理とが実行される。
ところで、データ・ドリブン方式やバックトラッキン
グ方式が適用される単一方向閉路に対応した領域群につ
いては、タイミング表示フラグや再評価フラグが消えて
しまうまで何回も起動しなければならない。このため、
その領域群に対応している手続きブロック群をまとめた
上位の手続きブロックを設け、データ・ドリブン方式や
バックトラッキング方式によるコンストレイントの評価
が完了するまで、その上位ブロックの実行を繰返す。
[発明の効果] 以上のように、この発明によれば、プログラム仕様を
解析することによって個々の集合要素に対する計算の実
行タイミングの流れが同期する箇所と同期しない箇所と
を検出し、実行タイミングの流れが同期する箇所と同期
しない箇所をそれぞれ異なる方法で取扱うようにしたの
で、プログラムの作成者は構造不一致を意識しなくてよ
く、集合や写像の性質を持った記述要素で記述でき、記
述しやすくなり、かつ理解しやすいプログラム仕様から
入出力データ間の構造不一致を検出し、解決することに
よって実行効率のよいプログラム構造を自動的に設計す
ることができる。
【図面の簡単な説明】
第1図はこの発明の一実施例の構成を示す図である。第
2図はプログラム仕様記述言語を説明するための図であ
る。第3図はプログラム仕様の例の内容を説明するため
の図である。第4図は有向グラフを説明するための図で
ある。第5図は有向グラフの節点の種類と有向枝の張り
方を表にした図である。第6図は単一方向閉路を示すた
めの図である。第7図はデータ形式による順序を説明す
るための図である。第8図は方向混在閉路を説明するた
めの図である。第9図は同期型実行領域を説明するため
の図である。第10図はプログラム構造を説明するための
図である。 図において、1はプログラム仕様、2は有向グラフ展開
部、3はプログラム仕様解析部、4はプログラム構造決
定部、5はプログラム構造を示す。

Claims (2)

    (57)【特許請求の範囲】
  1. 【請求項1】集合の性質を持った記述要素と、前記集合
    の間で集合要素相互の対応付けを行なうための写像の性
    質を持った記述要素とを有し、 前記写像で対応付けられた集合要素の上で、集合要素が
    持つ値を得るのに必要な計算方法を定めるための記述要
    素を有することを特徴とする、非手続的なプログラムの
    仕様記述言語で記述されたプログラム仕様に基づいて、
    手続的なプログラミング言語で表されるプログラムの構
    造を自動設計する装置であって、 前記プログラム仕様に記述されている集合の性質を持っ
    た記述要素と計算方法を定めた記述要素に節点を対応付
    け、その節点の間に計算方法を定めた記述要素に基づい
    て有向枝を張ることによって有向グラフを作成する有向
    グラフ作成手段、 前記有向グラフ作成手段によって作成された有向グラフ
    を集合と写像との性質および有向グラフの大局的性質の
    観点から解析して計算の実行タイミングの流れが同期し
    ている有向枝と節点や同期していない有向枝と節点とを
    検出する検出手段、 前記集合の性質を持った記述要素に対応している節点の
    うち、前記検出手段によって検出された実行タイミング
    の流れが同期している節点には、同一集合に属するデー
    タは1つしか保持できないデータ領域を割当て、実行タ
    イミングの流れが同期していない節点には、同一集合に
    属するデータをすべて保持できるデータ領域を割当てる
    ことによってデータ構造を決定するデータ構造決定手
    段、および 前記実行タイミングの流れが同期していない節点が部分
    グラフの境界点となり、実行タイミングの流れが同期し
    ている節点は部分グラフの内部点となり、節点を介して
    つながった実行タイミングの流れが同期している有向枝
    同士は同一の部分グラフに含まれるように前記有向グラ
    フを連結有向部分グラフに分割して、それぞれの部分グ
    ラフへ手続ブロックを割当て、さらにそれぞれの節点へ
    手続を割当てることによって手続構造を決定する手続構
    造決定手段を備えた、プログラム構造自動設計装置。
  2. 【請求項2】複数のエンティティ・タイプとリレーショ
    ンシップ・タイプとデータ・タイプとを含むとともに、
    各エンティティ・タイプごとにアトリビュートが定めら
    れた集合の性質を持った記述要素と、リレーションシッ
    プ・タイプを含む写像の性質を持った記述要素とを有
    し、 前記写像で対応付けられた集合要素の上で、集合要素が
    持つ値を得るのに必要な計算方法を定めるためのコンス
    トレイトを含む記述要素を有することを特徴とする、非
    手続的なプログラムの仕様記述言語で記述されたプログ
    ラム仕様に基づいて、手続的なプログラミング言語で表
    わされるプログラムの構造を自動設計する装置であっ
    て、 前記プログラム仕様に記述されているエンティティ・タ
    イプとアトリビュートとリレーションシップ・タイプと
    データ・タイプとコンストレイトとに節点を対応付け、
    その節点の間にコンストレイトに基づいて有向枝を張る
    ことによって有向グラフを作成する有向グラフ作成手
    段、 前記有向グラフ作成手段によって作成された有向グラフ
    を集合と写像との性質および有向グラフの大局的な性質
    の観点から解析してコンストレイト実行タイミングの流
    れが同期している有向枝と節点が同期していない有向枝
    と節点とを検出する検出手段、 エンティティ・タイプとアトリビュートとリレーション
    シップ・タイプとデータ・タイプの節点のうち、前記検
    出手段によって検出された実行タイミングの流れが同期
    している節点には、エンティティかアトリビュート値か
    リレーションシップかデータを1つしか保持できないデ
    ータ域を割当て、実行タイミングの流れが同期していな
    い節点には、同一タイプのエンティティか同一アトリビ
    ュートの値か同一タイプのリレーションシップか同一タ
    イプのデータをすべて保持できるデータ域を割当てるこ
    とによって、データ構造を決定するデータ構造決定手
    段、および 前記実行タイミングの流れが同期していない節点が部分
    グラフの境界点となり、実行タイミングの流れが同期し
    ている節点は部分グラフの内部点となり、節点を介して
    つながった実行タイミングの流れが同期している有向枝
    同士は同一の部分グラフに含まれるように有向グラフを
    連結有向部分グラフに分割して、それぞれの部分グラフ
    へ手続ブロックを割当て、さらにそれぞれの節点へ手続
    を割当てることによって手続構造を決定する手続構造決
    定手段を備えた、プログラム構造自動設計装置。
JP2138712A 1989-06-14 1990-05-28 プログラム構造自動設計装置 Expired - Fee Related JP2727026B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
US07/536,919 US5200888A (en) 1989-06-14 1990-06-12 Method for automatically designing a program structure
EP90111237A EP0402916B1 (en) 1989-06-14 1990-06-13 Method for automatically designing a program structure
DE69031719T DE69031719T2 (de) 1989-06-14 1990-06-13 Verfahren zum automatischen Entwurf einer Programmstruktur

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP1-151949 1989-06-14
JP15194989 1989-06-14

Publications (2)

Publication Number Publication Date
JPH03116229A JPH03116229A (ja) 1991-05-17
JP2727026B2 true JP2727026B2 (ja) 1998-03-11

Family

ID=15529727

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2138712A Expired - Fee Related JP2727026B2 (ja) 1989-06-14 1990-05-28 プログラム構造自動設計装置

Country Status (1)

Country Link
JP (1) JP2727026B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106716352B (zh) * 2014-07-18 2020-04-28 起元科技有限公司 管理参数集
CN110083339A (zh) * 2018-01-26 2019-08-02 拜椰特(上海)软件技术有限公司 一种新型计算机编程语言

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
「情報処理学会研究報告」 Vol.89,No.11 (89−SE−64−10) (1989−2)

Also Published As

Publication number Publication date
JPH03116229A (ja) 1991-05-17

Similar Documents

Publication Publication Date Title
Banâtre et al. Programming by multiset transformation
Luke et al. Loci: A rule-based framework for parallel multi-disciplinary simulation synthesis
US5361357A (en) Method and apparatus for optimizing computer file compilation
JP5453273B2 (ja) グラフベース計算におけるデータフロー管理
US7801924B2 (en) Decision tree construction via frequent predictive itemsets and best attribute splits
JP2019505877A (ja) プロジェクト階層のオーグメンテーション、探査およびメンテナンスのための方法
Messinger et al. A divide-and-conquer algorithm for the automatic layout of large directed graphs
JPH08234975A (ja) プログラム生成装置および方法
Boltenhagen et al. A discounted cost function for fast alignments of business processes
US5200888A (en) Method for automatically designing a program structure
Salazar et al. Proof-theoretic foundations of normal logic programs
Ates et al. Graph grammar induction on structural data for visual programming
JP2727026B2 (ja) プログラム構造自動設計装置
Zaidi et al. TEMPER: a temporal programmer for time-sensitive control of discrete event systems
CN108363563A (zh) 基于数据图谱、信息图谱和知识图谱架构的uml模型一致性检测方法
Zellweger The branching data model, the foundation for automated tree visualization
CN111339312A (zh) 用于求解高中数学求值题的知识图谱及其构建和求解方法
Say L'Hôpital's filter for QSIM
Cohen A finite domain-testing strategy for computer program testing.
Sigvardsson et al. Walk less, pick more: choosing optimal batches of orders in a warehouse
Boltenhagen Partitionnement d’instances de processus basé sur les techniques de conformité de modèles
Benkler An Approach for Identifying Microservices using Clustering on Control Flow and Data Flow
Pavlovic Drawing Types and Functions
Kaye A visualiser for linear λ-terms as 3-valent rooted maps
Hamaji et al. A MongoDB Document Reconstruction Support System Using Natural Language Processing

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees