(57)【特許請求の範囲】
【請求項１】
キャドシステムにより描画されたプログラム流れ図のオブジェクトデータを記憶するオブジェクトデータ記憶手段に対して、前記プログラム流れ図に対応するように、前記オブジェクトデータを位置づける位置付手段と、
プログラム流れ図に対し、
ａ．２重の一筆書の規則として、入口点から流れ図の流れに沿って走査を開始する、
流れ図の流れ線に沿って、入口点からの行線と、入口点への帰線までをたどる、
２重の一筆書の途中で、点に出合ったならば、次のｂ〜ｅの規則を適用する、
ｂ．分岐点の規則として、分岐点に達したときは、進んで来た方向を基準にして、左右何れかの方向を優先して走査する、
帰線が分岐点に達したときに、未走査の流れ線があれば、その流れ線に従って行線となり、走査を続行する、
一方、帰線が分岐点に達したときに、未走査の流れ線がなければ、そのまま流れを遡る、
ｃ．ループ点の規則として、流れ線に沿って、ループ点に達したとき、最初であれば、ループ点を通過して走査を続行する、
最初でなければ、ループ点を折返し、帰線となって、走査を続行する、
また、帰線がループ点に流れに遡って達したときは、そのまま遡って戻る、
ｄ．合流点の規則として、流れ線に沿って、合流点に達したとき、その到達が最後でなければ、その合流点で折返す、
一方、その到達が最後の行線になる場合には、合流点を通過して走査を続行する、
なお、帰線が合流点に流れに遡って達したときは、そのまま遡って戻る、
ｅ．出口点の規則として、行線が出口点に流れに沿って達したときには、その出口点を折返し、帰線となる、
とする規則に従って前記オブジェクトデータを走査すると共に、その走査順にオブジェクトデータを整列させる走査ソート手段と、
このソート手段により並替えられたオブジェクトをテキストに変換するテキスト変換手段を備えていることを特徴とするプログラムテキスト自動作成装置。
【請求項２】
整列された前記オブジェクトデータに対応するように、前記オブジェクトデータ記憶手段を書換えることを特徴とする請求項１に記載のプログラムテキスト自動作成装置。
【請求項３】
キャドシステムにより描画されたプログラム流れ図のオブジェクトデータを記憶するオブジェクトデータ記憶手段に対して、前記プログラム流れ図に対応するように、前記オブジェクトデータを位置付手段が位置づけ、
プログラム流れ図に対し、
ａ．２重の一筆書の規則として、入口点から流れ図の流れに沿って走査を開始する、
流れ図の流れ線に沿って、入口点からの行線と、入口点への帰線までをたどる、
２重の一筆書の途中で、点に出合ったならば、次のｂ〜ｅの規則を適用する、
ｂ．分岐点の規則として、分岐点に達したときは、進んで来た方向を基準にして、左右何れかの方向を優先して走査する、
帰線が分岐点に達したときに、未走査の流れ線があれば、その流れ線に従って行線となり、走査を続行する、
一方、帰線が分岐点に達したときに、未走査の流れ線がなければ、そのまま流れを遡る、
ｃ．ループ点の規則として、流れ線に沿って、ループ点に達したとき、最初であれば、ループ点を通過して走査を続行する、
最初でなければ、ループ点を折返し、帰線となって、走査を続行する、
また、帰線がループ点に流れに遡って達したときは、そのまま遡って戻る、
ｄ．合流点の規則として、流れ線に沿って、合流点に達したとき、その到達が最後でなければ、その合流点で折返す、
一方、その到達が最後の行線になる場合には、合流点を通過して走査を続行する、
なお、帰線が合流点に流れに遡って達したときは、そのまま遡って戻る、
ｅ．出口点の規則として、行線が出口点に流れに沿って達したときには、その出口点を折返し、帰線となる、
ｆ．分岐点、ループ点及び合流点では、適当な条件付飛越し又は適当な無条件飛越し命令文を使う、
とする規則において、スタックを用い、前記規則の帰線の走査を省略して走査の高速化を図るプログラムをＣＰＵ（中央処理装置）が実行し、
前記オブジェクトデータ記憶手段を前記プログラムが前記スタックに従って走査しつつ、その走査順に前記オブジェクトデータを走査ソート手段が整列させ、
前記オブジェクトデータをテキスト変換手段がプログラムテキストデータに変換し、
変換したプログラムテキストデータを前記オブジェクトデータ記憶手段に格納することを特徴とするプログラムテキスト自動的作成方法。
【請求項４】
走査のエラーを防ぐため、プログラム流れ図にダミー分岐点を導入したことを特徴とする請求項１又は２に記載のプログラムテキスト自動作成装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、流れ図からプログラムテキストを自動的に作成するプログラムテキスト自動作成装置及び作成方法に関する。
【０００２】
【従来の技術】
コンピュータを特定の目的に使用するためのプログラミングは、概ね、次の手順により作成する。
まず、その特定目的と表裏の関係にある問題分析、その問題分析で検討された解決策において、データをどのように処理するかを検討する。
次に、データの処理手順を検討するプログラム設計、その処理手順をプログラム言語で記述するコーディングを行う。
その後、プログラムが前記特定の目的を達成できるか否かの評価テスト、プログラムの修正、変更を行う保守等が含まれる。
前記プログラム設計等を作業面から区別すれば、
ステップ１  プログラム流れ図→（変換）  →ソースプログラム，
ステップ２  ソースプログラム→（コンパイラ）  →オブジェクトプログラム，
ステップ３  オブジェクトプログラム→（リンカ）  →ロードプログラム  になる。
【０００３】
【発明が解決しようとする課題】
上記ステップ２，３ついては、「特開平５−３１３８７８号」をはじめ、多くの自動化技術が開発されている。
しかし、ステップ１については、構造化プログラミングに基づく手法（特開平２−１２３３１号他）があるが、依然として主としてプログラマ或はコーダーと呼ばれる人々の手作業に依存している。
【０００４】
また、構造化プログラミングに基づく手法においても、次のような問題点がある。
構造化プログラミングは、すべてのプログラムを、連接、選択、繰返等の基本的な流れ図パターン（多くても５つ或は６つ）の組合せで構成しようとする。
よって、複雑な制御構造の場合には、上記基本的な流れ図パターンに当てはめ直す必要がある。
これは構造化定理と呼ばれるものであるが、命令文の追加挿入が必要であり、この命令文の追加により、プログラムの実行速度は悪化し、メモリ消費を伴う。
【０００５】
そこで、本願発明は、複雑な制御構造を表したプログラム流れ図であっても、そのままソースプログラムに１対１に自動的に変換できる、また任意の流れ図に適用できる、また低水準プログラム言語から高水準プログラム言語まで適用できる、またプログラム流れ図の不具合が検出することができるプログラムテキスト自動作成装置及びプログラムテキスト自動作成方法を提供することを目的とする。
【０００６】
【課題を解決するための手段】
これらの目的を達成するため、本願発明は、キャドシステムにより記述されたプログラム流れ図（以下、単に流れ図ともいう）のオブジェクトデータを記憶するオブジェクトデータ記憶手段と、前記キャドシステムによって描画される前記プログラム流れ図に対し、そのプログラム流れ図の入口点から流れに沿って走査を開始し、出口点に達したときにその出口点を折返して流れに遡って前記入口点に戻るように、行線と帰線により二重の一筆書きの如き走査を終了すると共に、前記走査の途中で、分岐点に達したときは、未走査の流れがあれば、走査を進めてきた方向を基準にして右又は左方向の流れを優先して走査し、また、その分岐点に戻ってきたときに、未走査の流れがあれば、再び流れに沿って走査し、走査の途中で、ループ点に達したときは、その到達が最初であれば、そのループ点を通過して走査を続行し、一方、最初でなければループ点を折返し 、また、ループ点に流れに遡って達したとき、そのまま流れを遡って戻り、走査の途中で、合流点に流れに沿って達したときは、最後でなければ合流点を折返すように走査し、一方、最後であれば合流点を通過して走査を続行する、とする規則に従って、前記流れ図を走査しつつ、その走査順に前記オブジェクトデータを整列させ、且つ、プログラムテキストに変換するプログラム生成手段からなるプログラムテキスト自動作成装置とした。
【０００７】
また、キャドシステムにより記述されたプログラム流れ図のオブジェクトデータを記憶するオブジェクトデータ記憶手段に対して、前記キャドシステムによって描画される前記プログラム流れ図に対応するように、前記オブジェクトデータを位置づける（ステップ１）。
次に、前記プログラム流れ図の入口点から流れに沿って走査を開始し、出口点に達したときにその出口点を折返して流れに遡って前記入口点に戻るように、行線と帰線により二重の一筆書きの如き走査を終了すると共に、前記走査の途中で、分岐点に達したときは、未走査の流れがあれば、走査を進めてきた方向を基準にして右又は左方向の流れを優先して走査し、また、その分岐点に戻ってきたときに、未走査の流れがあれば、再び流れに沿って走査し、走査の途中で、ループ点に達したときは、その到達が最初であれば、そのループ点を通過して走査を続行し、一方、最初でなければループ点を折返し 、また、ループ点に流れに遡って達したとき、そのまま流れを遡って戻り、走査の途中で、合流点に流れに沿って達したときは、最後でなければ合流点を折返すように走査し、一方、最後であれば合流点を通過して走査を続行する、とする規則に従って、前記オブジェクトデータを走査しつつ、その走査順に前記オブジェクトデータを整列させる（ステップ２）。
且つ、その整列されたオブジェクトデータをプログラムテキストに変換する（ステップ３）するプログラムテキスト自動作成方法とした。
【０００８】
上記走査規則を、図１に示した流れ図及び図２（ａ）〜（ｅ）に示した説明図を参照しつつ、詳細に説明する。
この規則は、流れ図の全ての入口点に関し、次のａ〜ｅの各規則を適用するものである。
なお、図１に示したａ〜ｅは、下記の規則ａ〜ｅに対応し、図２（ａ）〜（ｅ）の各図番は、同規則ａ〜ｅに対応するものである。
【０００９】
ａ．２重の一筆書の規則
入口点から流れ図の流れに沿って走査を開始する。
流れ図の流れ線に沿って、入口点からの行線（実線で表示）と、入口点への帰線（点線で表示）までをたどる２重の一筆書の規則を適用する。
一筆書の途中で、点に出合ったならば、次のｂ〜ｅの規則を適用する。
【００１０】
ｂ．分岐点の規則
分岐点に達したときには、進んで来た方向を基準にして、左右何れかの方向を優先して走査する。ここでは、図１及び図２（ｂ−１）のように、図面上、左方を優先させるものとする。
後述の「ｄ．合流点の規則」により帰線が分岐点に達したときに、未走査の流れ線があれば、その流れ線に従って行線となり、走査を続行する。
一方、図２（ｂ−２）のように、帰線が分岐点に達したときに、未走査の流れ線がなければ、そのまま流れを遡る。
【００１１】
ｃ．ループ点の規則
流れ線に沿って、ループ点に達したとき、最初であれば、ループ点を通過して走査を続行する。
最初でなければ、ループ点を折返し、帰線となって、走査を続行する。
また、帰線がループ点に流れに遡って達したときは、そのまま遡って戻る。
【００１２】
ｄ．合流点の規則
流れ線に沿って、合流点に達したとき、その到達が最後でなければ、その合流点で折返す。
一方、その到達が最後の行線になる場合には、合流点を通過して走査を続行する。
なお、帰線が合流点に流れに遡って達したときは、そのまま遡って戻る。
【００１３】
ｅ．出口点の規則
行線が出口点に流れに沿って達したときには、その出口点を折返し、帰線となる。
【００１４】
なお、上記ｂ．分岐点の規則の規則は、次の規則に置き換えることができる。
ｂ’分岐点の規則
分岐点に達したとき、未走査の流れがあれば、ループの流れを優先して走査する。
ループの流れが複数あるとき、または全くないときは、進んで来た方向を基準に左右何れかの流れを優先して走査する。
そして、分岐点に達したときに、未走査の流れがなければ、流れを遡って戻る。
【００１５】
前記プログラム生成手段が、上記規則に従って流れ図を走査することにより、流れ図をその二次元の記述から、プログラムのような一次元の記述に整列させつつ、プログラムテキストに変換する。
また、行線の後をたどる帰線により、変換が正常に行われたか否かの検査も兼ねることができる。
【００１６】
なお、合流点とループ点の区別を流れ図上において、行うことが好ましく、例えば図３のような記号を採用する。
このような記号がなければ、前記生成手段は、流れ図のかなりの部分を解析した後に、初めて、ループ点や合流点の認識を得ることになり、効率的でなくなる。
【００１７】
また、上記規則による変換においては、分岐点、ループ点及び合流点では、適当な条件付飛越し又は適当な無条件飛越し命令文を使うことが好ましい。
また出口点では、場合によってはＳＴＯＰ命令文、ＲＥＴＵＲＮ命令文、或は適当な無条件飛越し命令文を使うものとする。
【００１８】
上記発明において、整列された前記オブジェクトデータにより、前記オブジェクトデータ記憶手段を書換えることが望ましい（請求項２に記載の発明）。
流れ図を修正した後、プログラムテキストに変換する場合に、その変換処理が効率的で、容易になる。
【００１９】
前記分岐点の規則において、帰線の走査を省略してもよく（請求項３に記載の発明）、この場合には、プログラムテキストへの変換の高速化を図ることができる。
即ち、流れ図の帰線を走査する必要がなくなり、その分、変換（コーディング）の時間短縮につながる。
本発明では、高速化のため、オブジェクトデータに対する制御構造として、ＬＩＦＯ（ｌａｓｔ  ｉｎ  ｆｉｒｓｔ  ｏｕｔ）スタックを利用する。
【００２０】
ここでは、木構造で流れ図を表した図４及びスタックを模式的に図示した図５（イ）〜（ヌ）を用いて、本発明の高速化の構成及び作用を説明する。
なお、木構造の流れ図は、例えば図６に示した流れ図を図７のようにトリミングして、合流点にラベルを付けて、切断点をＧＯＴＯ文に置き換えると、同値の流れ図になる。
【００２１】
図４の走査においては、まず、始点ａから出発してＡ処理を走査し、最初の分岐点▲１▼に出合う。▲１▼は２分岐なのでＳＰ（スタックポインタ）に「１」を立てて、「ＰＵＳＨ▲１▼」を一回実行する（図５イ）。
次ぎにＢ処理を走査して、分岐点▲２▼にたどり着く。ここでは３分岐であるので、前記スタックポインタを加算し、「ＰＵＳＨ▲２▼」を二回実行する（図５ロ，ハ）。
次ぎに処理Ｃを走査した後、終点ｂに出会うので、ここで「ＰＯＰ▲２▼」を実行すると（図５ニ）、走査位置は▲２▼になる。この位置から走査を再開し、終点ｃにたどり着く。また、「ＰＯＰ▲２▼」を実行する（図５ホ）と、走査位置は▲２▼になる。この位置から走査を再開し、終点ｄにたどり着く。
またここで、「ＰＯＰ▲１▼」を実行すると（図５ヘ）、走査位置は▲１▼になり、スタックは空になる（図５ト）。
この位置▲１▼から走査を実行すると分岐点▲３▼に出合うが、この分岐点は２分岐であるので、再度ＳＰに「１」を立てて「ＰＵＳＨ▲３▼」を一回実行する（図５チ）。終点ｅにたどり着くので、「ＰＯＰ▲３▼」を実行する（図５リ）と、走査位置は▲３▼になり、処理Ｇを走査した後、終点ｆに至る。この時点では、スタックは空になっているので、ここで、コーディングは終了する。
【００２２】
前記規則では、行きに最初に通過した分岐点は、帰りには最後に通過する分岐点になり、行きに最後に通過した分岐点は、帰りに最初に通過した分岐点となる。
これは、前記ＬＩＦＯのデータ処理構造にマッチした規則であり、このデータ処理構造を使うことにより、変換処理を高速化することができる。
【００２３】
上記各発明において、走査のエラーを防ぐため、プログラム流れ図にダミー分岐点を導入してもよい（請求項４に記載の発明）。
この発明は、流れ図に上記規則を適用するとエラーになる場合に、ダミー分岐点を入れて、そのダミー分岐点に上記規則を適用し、エラーを回避するものである。
ダミー分岐点とは、上記分岐点の規則が適用されるが、その分岐点自体はコーディングされないものである。
ダミー分岐点の導入理由ついて、平均値を求める流れ図を例示しつつ説明する。
【００２４】
以下の図８〜図１２において、Ｓは和を求める領域、Ｃは入力を数えるカウンタ、Ｈは平均値を意味するものとする。
図８の平均値を求める流れ図では、エラーが発生する。
データが全く無いとき、▲２▼の処理を通過せず、▲１▼から▲３▼に進むが、Ｃの値が零になっているので、「零で割る」ようなエラーが発生する。１回でも▲２▼を通過すれば、このようなエラーは発生しないことになる。
そこで、上記流れ図を図９のように修正すれば、カウンタＣで割る処理の前に、Ｃが零かどうかを判断し、零の場合には、零で割る処理を回避しているので、エラーを回避できる。
しかし、大規模なプログラムにおいて、カウンタＣで割る処理がいたるところに分散している場合に、上記のようなエラー対処策を施していては、プログラムが煩雑になるので、次のような流れ図が好ましい。
即ち、図１０では、ループの前処理として、新たに入力処理を追加し、データがあれば、ループ処理へ移行し、データがなければループ処理を迂回し、終了する。
【００２５】
しかし、この流れ図に前記規則を適用するとエラーになる。
前記規則では、合流点では最後に通過することになっているので、図１０の流れ図の合流点▲１▼、▲２▼で、引き返すことになってしまい、そのためループ処理やその後の処理に移行することが出来ず、コーディングされない。この流れ図において合流点▲２▼は、実はループ点なのであり、ループ点▲３▼はループ経路の単なる通過点に過ぎない。よって図１１のように合流点▲２▼、ループ点をそれぞれループ点、ループ経路になおすと、エラーはなくなる。
一方で、図１１の流れ図は、ループ処理の手順として、処理▲２▼’から入力▲１▼’となっている。これは、通常、データの入力から処理へと進む、自然な処理手順を逆転するものであり、分かり難い流れ図及びプログラムテキストになってしまう。
そこで、自然な順序を維持した流れ図（図１０）に上記規則を適用できるように、ダミー分岐点を導入する。
【００２６】
図１２（イ）は、図１０の流れ図にダミー分岐点▲１▼を導入したもので、このダミー分岐点には分岐条件を記入する必要はない。また、ダミー分岐点からの制御の移行を伴わないことを点線の流れ線で示している。
この流れ図の走査において、このダミー分岐点に出合ったとき、左方優先で進み、合流点▲２▼に出合う。最初なので引き返し、前記ダミー分岐点▲１▼に戻る。未走査の流れ線があるので、その枝（点線）を走査するとループ点▲３▼に出合う。上記規則によりループ点では最初に通過するので、さらに走査を進める。よって、自然な処理手順に沿い、分かり易い流れ図及びプログラムテキストにすることができる。
図１２（ロ）は、図１２（イ）の流れ図を本発明のプログラムテキスト自動作成装置によって、変換したプログラムテキストを示す。
【００２７】
【発明の実施の形態】
本発明に係る実施形態を、図面に基づいて説明する。
図１３は、第１実施形態に係るプログラムテキスト自動作成装置の構成ブロック図である。
なお、図１３及び後述の各図面において、同一の構成は同一の符号を付することにより、重複した説明を省略する。
【００２８】
第１実施形態に係るプログラムテキスト自動作成装置は、キャドシステム１と、このキャドシステム１を構成し、且つ、このキャドシステム１により記述された流れ図のデータを記憶するオブジェクトデータ記憶手段としてのオブジェクトデータメモリ２と、このメモリ２にアクセスして、上記規則ａ〜ｅに従ってオブジェクトデータを走査しつつ、ソートし、且つ、プログラムテキストに変換するプログラム生成手段３からなる。
【００２９】
前記キャドシステム１は、図１３に示したように、キーボード４、マウス５、デジタイザ６等の入力装置と、作図処理や描画処理の制御手順を記述したプログラム及び流れ図記号データ等が格納されているメインメモリ７と、このメインメモリ７にアクセスして、プログラムを読込み、作図処理や描画処理を実行すると共に、加工したデータを前記オブジェクトデータメモリ２に書込むＣＰＵ（中央処理装置）３０と、グラフックメモリ８０を介するＣＲＴ８、プロッタ９、プリンタ１０等の出力装置からなる。
なお、前記オブジェクトデータメモリ２は、メインメモリ７とは独立して設けられているが、前記メインメモリ７にオブジェクトデータ用のメモリ領域を設けてもよい。
【００３０】
このキャドシステム１では、前記キーボード４、マウス５等の入力装置で、必要なオブジェクトを選択し、オブジェクトをＣＲＴ８の画面等に表示させつつ、流れ図を作成する。
この場合、オブジェクトに関するデータは、ＣＲＴ８の表示画面とは異なり、描画された順序で、オブジェクトデータメモリに書込まれている。
【００３１】
このようなキャドシステムに対し、第１実施形態のプログラムテキスト自動作成装置では、まず、前記ＣＲＴ８等で描画されている流れ図に対応するように、前記オブジェクトデータを位置づけ、前記規則ａ〜ｅに従って前記オブジェクトデータを走査しつつ、その規則順にオブジェクトデータを一次元の制御構造に整列させて、プログラムテキストを生成する処理制御手順を記述したプログラム（以下、オイラープログラムともいう）を前記メインメモリ７等に書込み、そのオイラープログラムを前記ＣＰＵ３０で実行することにより、プログラム生成手段３を構成している。
よって、このプログラム生成手段３は、図１４に示したように、前記ＣＲＴ８等で描画されている流れ図に対応するように、前記オブジェクトデータを位置づける位置付手段３１と、前記規則ａ〜ｅに従って前記オブジェクトデータを走査すると共に、その走査順にオブジェクトデータを整列させる走査ソート手段３２と、このソート手段３１により並替えられたオブジェクトをテキストに変換するテキスト変換手段３３を備えている。
【００３２】
前記オブジェクトデータには、キーボード４等の入力装置により選択され、且つ、ＣＲＴ８上に描画されるオブジェクトに対応するオブジェクトＩＤ、描画の表示位置を特定する座標データ等が含まれている。
【００３３】
以上のように構成された第１実施形態に係るソースプログラム自動作成装置の動作例を図１５〜図１８に基づいて、説明する。
図１５のように、▲１▼端子、▲２▼処理、▲３▼端子、▲４▼流れ線、▲５▼流れ線の順序で描いたとする。
この場合、前記メモリ２には、図１６のような順序で、各オブジェクトデータが格納される。
その後、図１７のように、▲６▼の処理、▲７▼の流れ線の修正が加えられたとすると、前記メモリ２には、図１８のような順序で各オブジェクトデータが格納される。
【００３４】
よって表示画像の位置と、オブジェクトの配置は一致しておらず、図１８の前記メモリ２の上から順にテキストに変換しても、正確にテキストプログラムを作成することはできない。
そこで、この第１実施形態では、前記位置付手段３１が、前記メモリ２等に保持されている画像との結合関係を示すリンクを探し、そのリンクに従い、オブジェクトデータを表示画像の通りに整列させる（前記ステップ１）。
そして、走査ソート手段３２が、上記流れ図の端子▲１▼の始点のオブジェクトを前記メモリ２内から探出し、流れ図の流れ、即ち、オブジェクトデータにそって、処理Ｄ、処理Ｂを走査しつつ（前記ステップ２）、テキスト変換手段３３が、プログラムテキストに変換し（前記ステップ３）、端子▲３▼の終点に至ると折返して始点に戻る。
【００３５】
次に、第２実施形態を説明する。
この第２実施形態は、第１実施形態のようなオブジョクトの結合関係が前記メモリ２に保持されていない場合を考慮したものである。
ここでは、前記メモリ２に保持されている座標データに着目する。
この座標データは、通常、画面の左上隅を原点とし、横方向にＸ軸を、縦方向にＹ軸を取っている。
例えば、図１９は端子記号の描画であり、この記号を囲む矩形の点ａ〜ｄのうち、少なくとも点ａ，ｄの座標が、座標データとして格納されている。
よって、他の２隅の座標ｂ，ｃ及び各辺の中点は、ａ及びｄの座標から求めることができる。
即ち、第２実施形態では、２隅の座標から画像の結合関係を割出す割出手段３４を前記ＣＰＵ３に設けている（図２０参照）。
その他の構成は、第１実施形態と同様であるので、同様な作用効果を奏する。
【００３６】
まず、前記位置付手段３１が前記メモリ２から端子オブジェクトを探し出す。そして、前記割出手段３４が、この端子オブジェクトの座標データから、右上隅ｂ、左下隅ｃ、中点ｅ，ｆ，ｇ，ｈの各中点の座標を算出する。
次に、前記位置付手段３１が、この中点ｅ，ｇの座標を元に、これらのＸ座標を持つ流れ線のオブジェクトを前記メモリ２から探し出す。
なお、前記Ｘ座標に限定することなく、そのＸ座標を含む所定の範囲を見込むことが望ましい。これはディジタル誤差を考慮するためである。
【００３７】
流れ線のオブジェクトのＹ座標が、中点ｇのＹ座標の近傍内にある場合には、前記端子記号は始点になる。そこで、前記テキスト変換手段３３が、テキストに変換する。
一方、流れ線のオブジェクトのＹ座標が、中点ｅのＹ座標の近傍内にある場合には、前記端子記号は終点なる。そこで、前記テキスト変換手段３３が、テキストに変換する。
【００３８】
次に位置付手段３１が、前記流れ線のオブジェクト他端のＸ座標近傍の座標が一致するオブジェクト又は左上隅、右下隅のＸ座標の間にあるオブジェクトを探出す。そして、オブジェクトの座標から各オブジェクトの接続関係を求めて行く。
その結果、前記ＣＲＴ８上に表示された流れ図に対応する各オブジェクトの接続関係が特定される（前記ステップ１）。
そして、特定された前記接続関係に従い、前記オブジェクトデータメモリ２を書換える。このことにより後に流れ図を修正し、プログラムテキストに変換する場合に、その変換処理が容易になる。
その後、上記規則に従って、走査ソート手段３２及びテキスト変換手段３３が前記メモリ２を走査しつつ、変換する（前記ステップ２，３）。
【００３９】
前記走査で、分岐点オブジェクトに出会ったときには、そのオブジェクトをテキストに変換した後、前記分岐点の規則に従って、流れ線オブジェクトの座標位置を前記メインメモリ７のスタック領域にスタックする。
例えば図２１の場合には、▲３▼の流れ線オブジェクトの座標位置をスタックにプッシュする。次に、▲２▼の流れ線オブジェクトの座標位置をスタックにプッシュする。
そして、引き返すときに、スタックからポップして、次に走査を開始するオブジェクトの位置を得て、その位置からオブジェクトの変換を続行する。スタックが空になると変換は終了する。
このようなスタックのデータ制御構造を利用することにより、流れ図からプログラムテキストへの変換処理を早めることができる。
【００４０】
次に、第３実施形態を説明する。
この第３実施形態では、第２実施形態のように前記メモリ２のオブジェクトデータを最初から何回も読込まずに、効率の向上を図るものある。
そのため、図２２のように、前記メモリ２に前記オブジェクトデータを記憶するメモリ領域（以下、ＯＭ２０という）の他、ソート用のメモリ領域（以下、ＳＭ２１という）及び出力用のメモリ領域（以下、ＷＭ２２という）を用意する。
その他の構成は、第２実施形態と同様であるので、同様な作用効果を奏する。
【００４１】
予め、前記割出手段３４が、ＯＭ２０にアクセスして、端子の座標から端子の中央線を算出し、その中央線から、所定の距離をおいて座標ＸｌとＸｒを算出し、その座標ＸｌとＸｒ間で中央帯（図２３の斜線部分参照）を確定する。
【００４２】
まず、前記位置付手段３１が、前記ＯＭ２０にアクセスし、端子及びその流れ線オブジェクトを探出し、始点であるならば、それらのオブジェクトデータを前記ＳＭ２１に転送し、一方、ＯＭ２０から前記オブジェクトデータを削除する。
次に、前記位置付手段３１が、前記中央帯を被るオブジェクトを前記ＯＭ２０から抜き出す。
抜き出し方は、オブジェクトデータの左上隅のＸ座標がＸｒより小さいオブジェクトを前記ＯＭ２０から抜き出し、前記ＳＭ２１に転送する。
次にＳＭ２１を走査して、オブジェクトデータの右下隅のＸ座標がＸｌより大きいものはそのままＳＭ２１に残し、小さいものはＯＭ２０に戻せばよい。
これにより、中央帯を被るオブジェクトデータがＳＭ２１に引渡されたことになる。
【００４３】
次に、前記位置付手段３１が、各オブジェクトデータの左上隅のＹ座標をソートキーとして、前記ＳＭ２１を昇順にソートする。
これにより、オブジェクトは縦方向に整列することになる（前記ステップ１）。
【００４４】
次に、前記ＳＭ２１の始点オブジェクトから順に前記規則に従って、前記走査ソート手段３２が、前記ＳＭ２１を走査し（前記ステップ２）、各オブジェクトデータを前記ＷＭ２２に複写する。
流れ線の場合には、そのままＳＭ２１から前記ＷＭ２２に複写する。
分岐点オブジェクトに出会ったときは、前記分岐点の規則に従って接続関係を検査する。検査はＳＭ２１からはじめ、ＯＭ２０まで検査する必要がある。２分岐のみならず、３分岐、多分枝があるからである。
前記第２実施形態と同様に、分岐点の規則に従って、スタックを実施すれば、変換の高速化を図ることができる。
なお、ＯＭ２０からＷＭ２２に転写した場合には、そのオブジェクトデータはＯＭ２０から削除される。
【００４５】
また、ループ点オブジェクトの場合には、ＳＭ２１又はＯＭ２０からＷＭ２２に転写され、ＯＭ２０から削除される。
【００４６】
合流点の場合は、接続関係を検査し、最後でなければ引き返すことになるので、スタックからポップして、分岐点の接続位置から走査を再開する。一方、最後の場合には、ＳＭ２１或いＯＭ２０から合流点オブジェクトをＷＭ２２に転送し、ＯＭ２０から削除する。
終点オブジェクトの場合は、オブジェクトをＳＭ２１或いＯＭ２０からＷＭ２２に転送し、ＯＭ２０から削除する。この後、引き返すことになるので、スタックをポップし、分岐点接続位置から走査を再開する。
走査の途中で、ループ点、合流点、終点、流れ線以外のオブジェクトに前記ＯＭ２０内で出合った場合には、そのオブジェクトを前記ＳＭ２１に転送し、前記中央帯を被るオブジェクトをＯＭ２０から抜き出して、Ｙ座標で昇順にソートした後、ＳＭ２１内を走査する。
スタックが空になると走査は終了する。
【００４７】
その後、ＷＭ２２をＯＭ２０に書き戻す。このＷＭ２２では前記規則に従って一次元にソートされているので、このＯＭ２０を前記テキスト変換手段３３がプログラムテキストに変換すること（前記ステップ３）は、一次元から一次元なので容易である。
なお、端子記号内に記述された文字列「ＳＴＡＲＴ」等もオブジェクトになっいる場合がある。この場合には、端子記号のオブジェクトと文字列のオブジェクトのリンクに従い、変換する。
【００４８】
上記のように構成されたソースプログラム自動作成装置の適用例を図２４〜図２６に基づいて説明する。
【００４９】
図２４は例えばＣＲＴ上に表示された流れ図、図２５は走査方向を示した流れ図、図２６はプリンタ等に出力されたコーディング例を示す。
【００５０】
まず、「スタート」をコーディングし、Ｓ１をコーディングし、ループ点を通過して、Ｓ２をコーディングする。
分岐点に至ると、ＩＦ  ＮＯＴ（Ｐ１）  ＧＯＴＯ＃１とコーディングし、流れ図上、左方向の流れを優先させてＳ３をコーディングし、分岐点に至る。
ここで、ＩＦ  ＮＯＴ（Ｐ２）  ＧＯＴＯ＃２とコーディングして、流れ図上、左方向の流れを優先させて、Ｓ４をコーディングし、ループ点に至るが、ここは既にコーディング済みであるので、分岐点Ｐ２まで戻る。
ここで、前記ラベル＃２を付けて、Ｓ５をコーディングし、合流点に至るが、合流点は最後に通過するので、ここでもＧＯＴＯ＃３とコーディングして戻り、分岐点Ｐ１でラベル＃１を付けてＳ６をコーディングする。
最後に通過する合流点のラベル＃３を付けて、Ｓ７をコーディングしてストップをコーディングした後、遡って前記入口点に戻ってきたときに、走査を終了する。
【００５１】
このように本発明では、ＧＯＴＯ文の活用により、任意の流れ図を同値変形なしに、プログラムテキストに変換することができる。
即ち、図２４の流れ図は、ループに複数の出口が記述されており、構造化プログラミングを適用しようとすれば、同値変形して適正プログラムに変える必要があるが、本発明では、同値変形なしに、複雑な制御構造を表したプログラム流れ図であっても、そのままソースプログラムに１対１に自動的に変換できる。
【００５２】
また、変換された図２６のプログラムテキストにおいて、ループを構成するための飛越しは、テキストの上方へ向っていること、一方、合流を構成するための飛越しは、下方に向っている。
これらは、ループ点の走査の規則では、ループ点では最初に通過することにしたこと、合流点の走査の規則では、合流点を最後に通過することにしたことによる。
以上のことから、この発明によって作られたプログラムテキストでは、ループを構成するための飛越しは、常にテキストの上方への飛越しとなり、合流を構成するための飛越しは、常に下方への飛越しとなるので、流れ図とプログラムテキストの対応がよく、プログラムテキストの品質が向上する。
【００５３】
また、行きと帰りに２重に走査することから、流れ図上のすべての点は、行線の他、帰線でも出合うはずである。帰りに出合わなかったらならば、走査に不具合が発生していることになる。
よって、流れ図の走査の不具合も検出することができ、より正確に迅速にプログラムテキストに変換することができる。
【００５４】
また、自動化のためには、処理の開始時点と終了時点の自動検出が不可欠である。この発明によれば、処理の開始時間は始点の検出時に、処理の終了時点も始点の検出時に対応しているので、自動検出が可能である。
【００５５】
さらに、原始的な飛越し命令文を使うので、低水準プログラム言語から高水準プログラム言語まで適用可能である。
【００５６】
第２実施形態や第３実施形態のように、スタックを使えば、高速化を図ることができる。
【００５７】
【発明の効果】
請求項１に記載の発明によれば、複雑な制御構造を表したプログラム流れ図であっても、そのままソースプログラムに１対１に自動的に変換でき、また任意の流れ図に適用でき、また低水準プログラム言語から高水準プログラム言語まで適用でき、さらに、プログラム流れ図の不具合を検出するプログラムテキスト自動作成装置を提供することができる。
【００５８】
請求項２の発明によれば、流れ図を修正した後、プログラムテキストに変換する場合に、その変換処理が効率的で容易になる。
【００５９】
請求項３に記載の発明によれば、プログラムテキストへの変換の高速化を図ることができる。
【００６０】
請求項４に記載の発明によれば、流れ図にオイラープログラムを適用するとエラーになる場合に、そのエラーを回避することができ、また、分かり易い流れ図及びプログラムテキストにすることができる。
【図面の簡単な説明】
【図１】本願発明のオイラープログラムの規則を説明する流れ図、
【図２】（ａ）〜（ｅ）  同規則の説明図、
【図３】同規則の説明図、
【図４】変換の高速化を図る場合の説明図、
【図５】（イ）〜（ヌ）変換の高速化を図る場合の説明図、
【図６】変換の高速化を図る場合の説明図、
【図７】変換の高速化を図る場合の説明図、
【図８】変換のエラーを回避する場合の説明図、
【図９】変換のエラーを回避する場合の説明図、
【図１０】変換のエラーを回避する場合の説明図、
【図１１】変換のエラーを回避する場合の説明図、
【図１２】（イ）及び（ロ）  変換のエラーを回避する場合の説明図、
【図１３】第１実施形態の構成ブロック図、
【図１４】第１実施形態の構成ブロック図、
【図１５】第１実施形態の作用説明図、
【図１６】第１実施形態の作用説明図、
【図１７】第１実施形態の作用説明図、
【図１８】第１実施形態の作用説明図、
【図１９】第２実施形態の作用説明図、
【図２０】第２実施形態の構成ブロック図、
【図２１】第２実施形態の作用説明図、
【図２２】第３実施形態の構成ブロック図、
【図２３】第３実施形態の作用説明図、
【図２４】第１実施形態の実施例図、
【図２５】第１実施形態の実施例図、
【図２６】第１実施形態の実施例図。
【符号の説明】
１  キャドシステム              ２  オブジェクトデータメモリ
３  ＣＰＵ                      ４  キーボード
５  マウス                      ６  デジタイザ
７  メインメモリ
８  ＣＲＴ                      ８０  グラフィックメモリ
９  プロッタ                    １０  プリンタ
３０  プログラム生成手段        ３１  位置付手段
３２  走査ソート手段            ３３  テキスト変換手段
３４  割出手段
【図１】
0003602416.tif 000002
【図２】
0003602416.tif 000003
【図３】
0003602416.tif 000004
【図４】
0003602416.tif 000005
【図５】
0003602416.tif 000006
【図６】
0003602416.tif 000007
【図７】
0003602416.tif 000008
【図８】
0003602416.tif 000009
【図９】
0003602416.tif 000010
【図１０】
0003602416.tif 000011
【図１１】
0003602416.tif 000012
【図１２】
0003602416.tif 000013
【図１３】
0003602416.tif 000014
【図１４】
0003602416.tif 000015
【図１５】
0003602416.tif 000016
【図１６】
0003602416.tif 000017
【図１７】
0003602416.tif 000018
【図１８】
0003602416.tif 000019
【図１９】
0003602416.tif 000020
【図２０】
0003602416.tif 000021
【図２１】
0003602416.tif 000022
【図２２】
0003602416.tif 000023
【図２３】
0003602416.tif 000024
【図２４】
0003602416.tif 000025
【図２５】
0003602416.tif 000026
【図２６】
0003602416.tif 000027