(57)【要約】      （修正有）【課題】ハイレベルプログラミング言語を自動的ＥＡＤに転換する方法の提供。【解決手段】主にハイレベルプログラミング言語（Ｊａｖａ（登録商標）、Ｃ、Ｃ＋＋など）をハードウエア記述言語に転換する時は、該ハイレベルプログラミング言語により書かれたプログラムの原始コードを先ずアクティビティダイアグラムに転換する。コンパイラは新しい転換規則を追加し、ＵＭＬプログラム言語中のアクティビティダイアグラム規格を修正し、プログラムの原始コードを対応するアクティビティダイアグラムに転換する。こうして視覚化方式により原始コードのプログラムロジックと執行過程を表現する。【選択図】図９
2007183897.tif 000002
【特許請求の範囲】
【請求項１】
主にコンパイラにより転換規則を加え、ハイレベルプログラミング言語の原始コードを対応するアクティビティダイアグラムに自動的に転換し、以下のステップを含み、
（Ａ）一行のハイレベルプログラミング言語の原始コードを読取り、すべての原始コードの読み取りが完成したとき、完全なアクティビティダイアグラムを出力し、
（Ｂ）該読み取った原始コードがステイトメント指令でない時には、非ステイトメント指令を対応するサブグラフに転換し、ステップ（Ａ）を再執行し、
（Ｃ）該読み取った原始コードがステイトメント指令である時、しかも該ステイトメント指令中の前方にステイトメント式がある時には、該ステイトメント式をサブグラフに転換し、
（Ｄ）選択ノードを生じ、
（Ｅ）２個のカーブポイントを生じ、該２個のカーブポイントは該選択ノードに接続し、
（Ｆ）ステイトメント式を対応するサブグラフに転換し、
（Ｇ）併合ノードを生じ、サブグラフを併合し、
（Ｈ）該ステイトメント式は転換後に生じたサブグラフを経由し、右カーブポイントに接続し、
（Ｉ）該ステイトメント式は転換後に生じたサブグラフを経由し、併合ノードに接続し、
（Ｊ）サブグラフに転換していない指令がないかどうかを判断し、もしあるならステップ（Ａ）を再執行し、ないなら完全なＥＡＤを出力することを特徴とするハイレベルプログラミング言語を自動的ＥＡＤに転換する方法。
【請求項２】
請求項１記載のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法において、前記ハイレベルプログラミング言語はＪａｖａ（登録商標）、Ｃ、Ｃ＋＋プログラム言語を含むことを特徴とするハイレベルプログラミング言語を自動的ＥＡＤに転換する方法。
【請求項３】
請求項１記載のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法において、前記アクティビティダイアグラムはＵＭＬプログラム言語中に定義するエクステンディッドアクティビティダイアグラム(Ｅｘｔｅｎｄｅｄ  ａｃｔｉｖｉｔｙ  ｄｉａｇｒａｍ)で、一種の過程制御図を表すことを特徴とするハイレベルプログラミング言語を自動的ＥＡＤに転換する方法。
【請求項４】
請求項１記載のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法において、前記アクティビティダイアグラムはスタート、終了、カーブポイント、マイクロオペレーション、分岐、連結、選択、併合の８種のノードを含むことを特徴とするハイレベルプログラミング言語を自動的ＥＡＤに転換する方法。
【請求項５】
請求項１記載のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法において、前記Ｊａｖａ（登録商標）ＣＣはＪＤＫ１.５を使用することを特徴とするハイレベルプログラミング言語を自動的ＥＡＤに転換する方法。
【請求項６】
請求項１記載のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法において、前記ステイトメント指令はｆｏｒ、ｗｈｉｌｅ、ｄｏ、ｉｆ、ｓｗｉｔｃｈ指令を含むことを特徴とするハイレベルプログラミング言語を自動的ＥＡＤに転換する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一種のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法に関する。特に一種のハイレベルの原始コードを対応するアクティビティダイアグラムに転換し、視覚化の方式により原始コードのプログラムロジックと執行過程を表示するハイレベルプログラミング言語を自動的ＥＡＤに転換する方法に係る。
【背景技術】
【０００２】
公知のハードウエア記述言語(ＶＨＤＬなど)はハイレベルプログラミング言語のプログラムロジックと執行過程の直接記述には適していないため、ハードウエアを設計する時にはハイレベルプログラミング言語により設計された過程と直接対応させることができず、設計上の困難を招いていた。
さらに公知のハイレベルプログラミング言語はハードウエア記述言語(ＶＨＤＬなど)に直接転換することができないため、設計において不便である。
しかもハイレベルプログラミング言語もＪａｖａ（登録商標）、Ｃ、Ｃ＋＋など種類が非常に多いため、設計されたプログラム機能が同一でもプログラム言語の特性により完成された執行過程として統一することができない。そのため、ハードウエアパーツ設計において困難となっていた。
すなわち公知方法はハイレベルプログラミング言語をハードウエア記述言語に直接転換することができないため、改良の必要がある。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
本発明は下記のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法を提供する。それは主にコンパイラにより転換規則を加え、ハイレベルプログラミング言語の原始コードを対応するアクティビティダイアグラムに自動的に転換し、以下のステップを含み、
（Ａ）一行のハイレベルプログラミング言語の原始コードを読取り、すべての原始コードの読み取りが完成したとき、完全なアクティビティダイアグラムを出力し、
（Ｂ）該読み取った原始コードがステイトメント指令でない時には、非ステイトメント指令を対応するサブグラフに転換し、ステップ（Ａ）を再執行し、
（Ｃ）該読み取った原始コードがステイトメント指令である時、しかも該ステイトメント指令中の前方にステイトメント式がある時には、該ステイトメント式をサブグラフに転換し、
（Ｄ）選択ノードを生じ、
（Ｅ）２個のカーブポイントを生じ、該２個のカーブポイントは該選択ノードに接続し、
（Ｆ）ステイトメント式を対応するサブグラフに転換し、
（Ｇ）併合ノードを生じ、サブグラフを併合し、
（Ｈ）該ステイトメント式は転換後に生じたサブグラフを経由し、右カーブポイントに接続し、
（Ｉ）該ステイトメント式は転換後に生じたサブグラフを経由し、併合ノードに接続し、ステップ（Ａ）を再執行し、
（Ｊ）サブグラフに転換していない指令がないかどうかを判断し、もしあるならステップ（Ａ）を再執行し、一行のハイレベルプログラミング言語の原始コードを読取り、転換する必要のある指令がないなら、完全なＥＡＤを出力し、こうして本発明のハイレベルプログラミング言語をアクティビティダイアグラムに転換する方法は、ＵＭＬ中のアクティビティダイアグラムの修正を利用し、ハイレベルプログラミング言語を視覚化の方式により原始コードのプログラムロジックと執行過程を表現し、後続のハードウエア言語への模擬及び転換の必要に有利である。
【０００４】
本発明のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法ではハイレベルプログラミング言語はＪａｖａ（登録商標）、Ｃ、Ｃ＋＋プログラム言語である。
【０００５】
本発明のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法では、アクティビティダイアグラムはＵＭＬプログラム言語中に定義するエクステンディッドアクティビティダイアグラム(Ｅｘｔｅｎｄｅｄ  ａｃｔｉｖｉｔｙ  ｄｉａｇｒａｍ)で、一種の過程制御図を表する。
【０００６】
本発明のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法では、アクティビティダイアグラムはスタート、終了、カーブポイント、マイクロオペレーション、分岐、連結、選択、併合の８種のノードを含む。
【０００７】
本発明のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法ではステイトメント指令はｆｏｒ、ｗｈｉｌｅ、ｄｏ、ｉｆ、ｓｅｉｔｃｈ指令を含むことを特徴とするハイレベルプログラミング言語を自動的ＥＡＤに転換する方法である。
【課題を解決するための手段】
【０００８】
請求項１の発明は、主にコンパイラにより転換規則を加え、ハイレベルプログラミング言語の原始コードを対応するアクティビティダイアグラムに自動的に転換し、以下のステップを含み、
（Ａ）一行のハイレベルプログラミング言語の原始コードを読取り、すべての原始コードの読み取りが完成したとき、完全なアクティビティダイアグラムを出力し、
（Ｂ）該読み取った原始コードがステイトメント指令でない時には、非ステイトメント指令を対応するサブグラフに転換し、ステップ（Ａ）を再執行し、
（Ｃ）該読み取った原始コードがステイトメント指令である時、しかも該ステイトメント指令中の前方にステイトメント式がある時には、該ステイトメント式をサブグラフに転換し、
（Ｄ）選択ノードを生じ、
（Ｅ）２個のカーブポイントを生じ、該２個のカーブポイントは該選択ノードに接続し、
（Ｆ）ステイトメント式を対応するサブグラフに転換し、
（Ｇ）併合ノードを生じ、サブグラフを併合し、
（Ｈ）該ステイトメント式は転換後に生じたサブグラフを経由し、右カーブポイントに接続し、
（Ｉ）該ステイトメント式は転換後に生じたサブグラフを経由し、併合ノードに接続し、
（Ｊ）サブグラフに転換していない指令がないかどうかを判断し、もしあるならステップ（Ａ）を再執行し、ないなら完全なＥＡＤを出力することを特徴とするハイレベルプログラミング言語を自動的ＥＡＤに転換する方法としている。
請求項２の発明は、請求項１記載のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法において、前記ハイレベルプログラミング言語はＪａｖａ（登録商標）、Ｃ、Ｃ＋＋プログラム言語を含むことを特徴とするハイレベルプログラミング言語を自動的ＥＡＤに転換する方法としている。
請求項３の発明は、請求項１記載のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法において、前記アクティビティダイアグラムはＵＭＬプログラム言語中に定義するエクステンディッドアクティビティダイアグラム(Ｅｘｔｅｎｄｅｄ  ａｃｔｉｖｉｔｙ  ｄｉａｇｒａｍ)で、一種の過程制御図を表すことを特徴とするハイレベルプログラミング言語を自動的ＥＡＤに転換する方法としている。
請求項４の発明は、請求項１記載のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法において、前記アクティビティダイアグラムはスタート、終了、カーブポイント、マイクロオペレーション、分岐、連結、選択、併合の８種のノードを含むことを特徴とするハイレベルプログラミング言語を自動的ＥＡＤに転換する方法としている。
請求項５の発明は、請求項１記載のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法において、前記Ｊａｖａ（登録商標）ＣＣはＪＤＫ１.５を使用することを特徴とするハイレベルプログラミング言語を自動的ＥＡＤに転換する方法としている。
請求項６の発明は、請求項１記載のハイレベルプログラミング言語を自動的ＥＡＤに転換する方法において、前記ステイトメント指令はｆｏｒ、ｗｈｉｌｅ、ｄｏ、ｉｆ、ｓｗｉｔｃｈ指令を含むことを特徴とするハイレベルプログラミング言語を自動的ＥＡＤに転換する方法としている。
【発明の効果】
【０００９】
主にハイレベルプログラミング言語(Ｊａｖａ（登録商標）、Ｃ、Ｃ＋＋など) をハードウエア記述言語に転換する時には、該ハイレベルプログラミング言語により書かれたプログラムの原始コードを先ずアクティビティダイアグラムに転換しなければならない。本発明のコンパイラ(ｃｏｍｐｉｌｅｒ)は新しい転換規則を追加し、ＵＭＬプログラム言語中のアクティビティダイアグラム規格を修正し、プログラムの原始コードを対応するアクティビティダイアグラムに転換する。こうして視覚化方式により原始コードのプログラムロジックと執行過程を表現する。本発明はハイレベルプログラミング言語を統一したフォーマットに転換し表示し、同時にアクティビティダイアグラムは後続のハードウエア記述言語に転換する時に必要となる模擬と需要に有利となる。
【発明を実施するための最良の形態】
【００１０】
公知方法はハイレベルプログラミング言語をハードウエア記述言語に直接転換することができないため、使用者がハイレベルプログラミング言語(Ｊａｖａ（登録商標）、Ｃ、Ｃ＋＋など)をハードウエア記述言語(ＶＨＤＬなど)に転換する時には、先ずハイレベルプログラミング言語をアクティビティダイアグラム(Ａｃｔｉｖｉｔｙ  Ｄｉａｇｒａｍ，ＡＤと略称)と呼ばれる中間フォーマットに転換する。ＡＤは一種の過程の記述図である。図１に示すように、ＵＭＬ(Ｕｎｉｆｉｅｄ  Ｍｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ，ＵＭＬ)で定義するアクティビティダイアグラムは、Ａｃｔｉｏｎ  ｓｔａｔｅ、ｆｏｒｋ、ｊｏｉｎ、ｓｅｌｅｃｔの５種のパーツ図を含む。本実施例ではあるプログラムが必要とする情報を保留するために、一部のアクティビティダイアグラムのパーツを修正する必要があり、使用するアクティビティダイアグラムはエクステンディッドアクティビティダイアグラム(Ｅｘｔｅｎｄｅｄ  ａｃｔｉｖｉｔｙ  ｄｉａｇｒａｍ，ＥＡＤと略称)と呼ばれる。
【００１１】
次に図２に示すように、ＥＡＤはハイレベルプログラミング言語の原始コードを対応する過程に転換する制御図である。それは複数のノード(ｎｏｄｅ)により組成され、異なるノードが組合わさり構成されるサブグラフ(ｓｕｂ−ｇｒａｐｈ)により、各サブグラフ中にはそれぞれ開始、執行、終了の３部分を含む。本実施例中においては、多種の異なるノードを定義している、以下に各種ノードについて説明する。
１. 開始(ｓｔａｒｔ)ノード: アクティビティダイアグラムのスタート。
２. 終了(ｅｎｄ)ノード: アクティビティダイアグラムの終了。
３. カーブ点(ｃｕｒｖｅ  ｐｏｉｎｔ)ノード:方向性を持つ２本の連接線(ｅｄｇｅ)が連接され、実際には執行されていない影響に対して、通常は便利な転換過程の一時的用途として用いられる。
４. マイクロオペレーション(ｍｉｃｒｏ−ｏｐｅｒａｔｉｏｎ)ノード:あるステイトメント(ｅｘｐｒｅｓｓｉｏｎ  ｓｔａｔｅｍｅｎｔ)或いは表示法(ｅｘｐｒｅｓｓｉｏｎ)の処理を表示。
５. 分岐(ｆｏｒｋ)ノード:平行執行。
６. 連結(ｊｏｉｎ)ノード:すべてのマイクロオペレーションが到達した時だけに出力される信号を発信する。
７. 選択(ｓｅｌｅｃｔ)ノード:デコーダ後、適当な出力信号を選択、発信する。
８. 併合(Ｍｅｒｇｅ)ノード:入力信号を併合後に出力する。
【００１２】
上記各ノードを１物件と見なすと、該物件中においては２種の資料形態を記録し、自己ノード(Ｉｎ−Ｎｏｄｅ)及び自己がその他の接続するノード(Ｏｕｔ−Ｎｏｄｅ)への接続を表す。そのノード形態は言語に応じて変る。各段の言語を解析する時にはすべて対応するサブグラフを生じ、該サブグラフのＩｎ−Ｎｏｄｅ及びＯｕｔ−Ｎｏｄｅを記録し、他のサブグラフを接続、使用する。この接続方式により、各段の言語中のサブグラフの発生は同一の方式を使用する。各サブグラフを相互に接続した後は、プログラム原始コードを対応するアクティビティダイアグラムに転換することができ、視覚化方式で原始コードのプログラムロジックと執行過程を表示することができる。
【００１３】
本発明において、完全なＥＡＤは複数のサブグラフにより組成する。その内、第一サブグラフはクラス(ｃｌａｓｓ)情報を記載し、クラスサブグラフと呼ばれる。他の各サブグラフはすべてある方法(ｍｅｔｈｏｄ)に対応する。サブグラフの各部分はすべて各種異なるノードにより組成される。該クラスサブグラフ中においてスタートの部分はスタートノード(ｓｔａｒｔ  ｍｏｄｅ)により表示され、このノードはクラススタートノード(ｃｌａｓｓ  ｓｔａｒｔ  ｍｏｄｅ)と呼ばれる。クラススタートノード中には各種ラベル(ｌａｂｅｌ)を含む。以下にサブグラフの各符号について説明する。
●Ｃ＝ｃｌａｓｓＮａｍｅ，ｍｏｄｉｆｉｅｒ：
Ｃはクラスを表し、このクラスの名前とその修飾子(ｍｏｄｉｆｉｅｒ)を説明する。修飾子は数字で、以下に詳述する。
０x０００１: ＰＵＢＬＩＣ；
０x００１０: ＦＩＮＡＬ；
０x０４００: ＡＢＳＴＲＡＣＴ；
０x０８００: ＳＴＲＩＣＴ；
●Ｇ＝ｔｙｐｅ，ｓｉｚｅ，ｖａｒｉａｂｌｅＮａｍｅ：
Ｇは全域変数(ｇｌｏｂａｌ  Ｖａｒｉａｂｌｅ)を表し、形態(ｔｙｐｅ)、サイズ(ｓｉｚｅ)、変数名称(ｖａｒｉａｂｌｅＮａｍｅ)を説明する。形態とサイズの定義はＪａｖａ（登録商標）と同一である。
●Ｍ＝ｍｅｔｈｏｄＮａｍｅ，ｍｏｄｉｆｉｅｒ：
Ｍは方法(ｍｅｔｈｏｄ)を表し、方法の名称とその修飾子(ｍｏｄｉｆｉｅｒ)を説明する。修飾子は数字で、以下に詳述する。
０x０００１:ＰＵＢＬＩＣ；        ０x０００２: ＰＲＩＶＡＴＥ；
０x０００４: ＰＲＯＴＥＣＴＥＤ；      ０x０００８: ＳＴＡＴＩＣ；
０x００１０: ＦＩＮＡＬ；          ０x００２０: ＳＹＮＣＨＲＯＮＩＺＥＤ；
０x０１００: ＮＡＴＩＶＥ；        ０x０４００: ＡＢＳＴＲＡＣＴ；
０x０８００: ＳＴＲＩＣＴ；
【００１４】
本実施例においてクラスサブグラフ中の執行部分は左右に分かれる。左はクラス変数(ｃｌａｓｓ  ｖａｒｉａｂｌｅ)部分で、右は物件変数(ｉｎｓｔａｎｃｅ  ｖａｒｉａｂｌｅ)部分である。開始部分とクラス変数部分及び物件変数部分間にはそれぞれ方向性の連接線(ｅｄｇｅ)連接がある。その矢印は開始部分からそれぞれクラス変数部分及び物件変数部分に向かう。この２方向性連接線においてはそれぞれ“ｃｌａｓｓ”及び“ｉｎｓｔａｎｃｅ”の文字があり、連接線ラベル(ｅｄｇｅ  ｌａｂｅｌ)と呼ばれる。
【００１５】
クラス変数部分及び物件変数部分は第一ノードが開始ノードである他、他はマイクロオペレーションノードである。各ノード間はみな方向性を持つ連接線により連接される。矢印の方向はすべて上から下である。クラス変数部分の開始ノードの内容は“ｍ＝ｓｉｎｉｔ,０”で、物件変数部分の開始ノード内容は“ｍ＝ｉｎｉｔ,０”である。クラス変数部分及び物件変数部分のマイクロオペレーションノードの内容はすべて初期値の宣告である。クラス変数部分及び物件変数部分の終了部分はすべて終了ノードにより表示され、その内容はそれぞれ“ｒｅｔｕｒｎ  ＶＯＩＤ  ｓｉｎｉｔ”及び“ｒｅｔｕｒｎ  ＶＯＩＤ  ｉｎｉｔ”である。
【００１６】
方法サブグラフのスタート部分も開始ノードにより表され、数個のラベルを含む。その説明は以下の通りである。
●Ｍ＝ｍｅｔｈｏｄＮａｍｅ，ｍｏｄｉｆｉｅｒ：
Ｍは方法(ｍｅｔｈｏｄ)を表し、方法の名称とその修飾子(ｍｏｄｉｆｉｅｒ)を説明する。修飾子は数字で、以下に詳述する。
０x０００１: ＰＵＢＬＩＣ；    ０x０００２: ＰＲＩＶＡＴＥ；
０x０００４: ＰＲＯＴＥＣＴＥＤ；  ０x０００８: ＳＴＡＴＩＣ；
０x００１０: ＦＩＮＡＬ；      ０x００２０: ＳＹＮＣＨＲＯＮＩＺＥＤ；
０x０１００: ＮＡＴＩＶＥ；    ０x０４００: ＡＢＳＴＲＡＣＴ；
０x０８００: ＳＴＲＩＣＴ；
●Ｒ＝ｔｙｐｅ，ｓｉｚｅ，ｒｅｔｍｅｔｈｏｄＮａｍｅ：
Ｒはこの方法のリターン情報を表し、リターンの形態とサイズを説明する。ここの形態とサイズはＪａｖａ（登録商標）と同一である。
●Ｐ＝ｔｙｐｅ，ｓｉｚｅ，ｖａｒｉａｂｌｅＮａｍｅ：
Ｐは伝送されたパラメーター(ｐａｒａｍｅｔｅｒ)を表し、該パラメーターの形態(ｔｙｐｅ)、サイズ(ｓｉｚｅ)、変数名称(ｖａｒｉａｂｌｅＮａｍｅ)を説明する。ここでの形態とサイズの定義はＪａｖａ（登録商標）と同一である。
●Ｌ＝ｔｙｐｅ，ｓｉｚｅ，ｖａｒｉａｂｌｅＮａｍｅ：
Ｌは区域変数(ｌｏｃａｌ  ｖａｒｉａｂｌｅ)を表し、該区域変数の形態(ｔｙｐｅ)、サイズ(ｓｉｚｅ)、変数名称(ｖａｒｉａｂｌｅＮａｍｅ)を説明する。ここでの形態とサイズの定義はＪａｖａ（登録商標）と同一である。
上記は本発明中に使用するすべてのサブグラフの図形規格の紹介である。
【００１７】
続いて図３に示すように、本実施例中ではＪａｖａ（登録商標）プログラム言語を例とする。Ｊａｖａ（登録商標）プログラム実作をＥＡＤに転換する。Ｊａｖａ（登録商標）ＣＣ(Ｊａｖａ（登録商標）  Ｃｏｍｐｉｌｅｒ  Ｃｏｍｐｉｌｅｒ，、以下Ｊａｖａ（登録商標）ＣＣと略称)を利用し定義するＪａｖａ（登録商標）標準語法規格を基礎ＪＤＫ(Ｊａｖａ（登録商標）  Ｄｅｖｅｌｏｐｍｅｎｔ  Ｋｉｔ  １.５)で、Ｊａｖａ（登録商標）ＣＣのｇｒａｍｍａｒ  ｆｉｌｅ中に一段のＪａｖａ（登録商標）プログラムを加え、修正済みのＪａｖａ（登録商標）語法ファイル(サブファイル名がｊｊであるファイル)を生じる。Ｊａｖａ（登録商標）ＣＣはこのＪａｖａ（登録商標）プログラムに基づき、Ｊａｖａ（登録商標）解析器(Ｊａｖａ（登録商標）  Ｐａｒｓｅｒ)クラスとＪａｖａ（登録商標）  Ｐａｒｓｅｒが使用を必要とするその他のクラスを生じる。該生じたＪａｖａ（登録商標）  ＰａｒｓｅｒクラスはＪａｖａ（登録商標）原始コードから対応するＥＡＤの機能への転換を提供することができる。本実施例中では、Ｊａｖａ（登録商標）  Ｐａｒｓｅｒクラスはコンピュータ補助回路設計ソフトウエア中に統合することができ、これによりソフトウエアはＪａｖａ（登録商標）原始コードをＥＡＤに転換する機能を具える。さらに、完全なＪａｖａ（登録商標）原始コードはＪａｖａ（登録商標）  Ｐａｒｓｅｒ中に伝送され、Ｊａｖａ（登録商標）  Ｐａｒｓｅｒはプログラム中の異なるｔｏｋｅｎに応じて、語法ファイル中に新たに生じたＥＡＤの指令に対応する。続いて、該ＥＡＤ図形を転換する。
【００１８】
Ｊａｖａ（登録商標）プログラムのｔｏｋｅｎ形態は非常に多いため、以下にいくつかの代表的なステイトメント指令(ｓｔａｔｅｍｅｎｔ  ｉｎｓｔｒｕｃｔｉｏｎ)、条件表現式(ｃｏｎｄｉｔｉｏｎ  ｅｘｐｒｅｓｓｉｏｎ)、ステイトメント式(ｓｔａｔｅｍｅｎｔ)の転換過程と規則について説明を行う。
本実施例中では、ステイトメント指令は含むｆｏｒ、ｗｈｉｌｅ、ｄｏ、ｉｆ、ｓｗｉｔｃｈなどの形態を含む。以下にステイトメント指令を例にＪａｖａ（登録商標）プログラムをＥＡＤに転換する転換過程と規則について説明を行う。
【００１９】
実例１  Ｆｏｒ  Ｓｔａｔｅｍｅｎｔの転換：
その語法は以下の通りである(図４を合わせて参照のこと)。
ｆｏｒ ([ＦｏｒＩｎｉｔ( )]; [Ｅｘｐｒｅｓｓｉｏｎ( )]; [ＦｏｒＵｐｄａｔｅ( )]) Ｓｔａｔｅｍｅｎｔ( )
ここにおいてＪａｖａ（登録商標）原始コードについて以下に説明を行う。
【表１】
2007183897.tif 000003
上記Ｊａｖａ（登録商標）原始コードの転換過程は以下の通りである。
ステップ１:“ｆｏｒ”及び“（”を解析する。
ステップ２:(Ｆｏｒ  Ｉｎｉｔ())を解析し、図１が表すノードを描き出し、Ｉｎ−Ｎｏｄｅ及びＯｕｔ−Ｎｏｄｅを設定し接続する。
ステップ３:“；”を解析する。
ステップ４:（Ｅｘｐｒｅｓｓｉｏｎ()）を解析し、増えたＪａｖａ（登録商標）プログラムｐｒｏｃｅｓｓ  Ｃｏｎｄｉｔｉｏｎ  Ｅｘｐｒｅｓｓｉｏｎ()を執行し、Ｄｅｃｏｄｅ  Ｎｏｄｅ(Ｄ)を生じる。またＤｅｃｏｄｅノード下方の接線とその上のエッジラベル(ｅｄｇｅ  ｌａｂｅｌ)を生じる。
図２が表すサブグラフ(ノードの集合)を完全に描き出し、Ｉｎ−Ｎｏｄｅ及びＯｕｔ−Ｎｏｄｅを設定する。
ステップ５: “；”を解析する。
ステップ６:(ＦｏｒＵｐｄａｔｅ)を解析し、図３が表すノードを描き出し、該ノードのＯｕｔ−Ｎｏｄｅを得る。
ステップ７:“）”を解析する。
ステップ８:Ｓｔａｔｅｍｅｎｔ()を解析し、図４が表すノードを描き出す。
ステップ９:図２サブグラフが表すｅｘｐｒｅｓｓｉｏｎ()のＯｕｔ−Ｎｏｄｅ及び図３のＩｎ−Ｎｏｄｅを接続する。
ステップ１０:図９に示すように併合ノードを生じる。
ステップ１１: Ｓｔａｔｅｍｅｎｔ()のＯｕｔ−Ｎｏｄｅから併合ノードのＩｎ−Ｎｏｄｅまで接続する。
ステップ１２: 併合ノードのＩｎ−Ｎｏｄｅ及びＯｕｔ−Ｎｏｄｅの線を接続する。
上記ステップにより、Ｊａｖａ（登録商標）原始コード中のＦｏｒ  ＳｔａｔｅｍｅｎｔをＥＡＤに転換する実際の過程を説明する。
【００２０】
実例２  Ｗｈｉｌｅ  Ｓｔａｔｅｍｅｎｔの転換：
その語法は以下の通りである。
ｗｈｉｌｅ (Ｅｘｐｒｅｓｓｉｏｎ( ) )Ｓｔａｔｅｍｅｎｔ( )
ここにおいてＪａｖａ（登録商標）原始コードの転換説明は以下の通りである。
【表２】
2007183897.tif 000004
転換の転換過程は以下の通りである。合わせて図５を参照のこと。
ステップ１:“ｗｈｉｌｅ”及び“(”を解析する。
ステップ２:Ｅｘｐｒｅｓｓｉｏｎ()を解析し、図１を生じ、該サブグラフのＯｕｔ−Ｎｏｄｅを得る。
ステップ３:新たに増えたＪａｖａ（登録商標）プログラムＰｒｏｃｅｓｓ  Ｃｏｎｄｉｔｉｏｎ  Ｅｘｐｒｅｓｓｉｏｎ()を執行し、Ｄｅｃｏｄｅ  Ｎｏｄｅ(Ｄ)を生じる。並びにＤｅｃｏｄｅノード下方の接線及びその上のエッジラベル(ｅｄｇｅ  ｌａｂｅｌ)を生じ、図２が表すサブグラフ(ノードの集合)を完全に描き出し、Ｉｎ−Ｎｏｄｅ及びＯｕｔ−Ｎｏｄｅを設定する。
ステップ４:図２(Ｅｘｐｒｅｓｓｉｏｎ())のＯｕｔ−Ｎｏｄｅ及び図１(Ｓｔａｔｅｍｅｎｔ())のＩｎ−Ｎｏｄｅを接続する。
ステップ５:図３に示すように併合ノードを生じる。
ステップ６:図１(Ｓｔａｔｅｍｅｎｔ())のＯｕｔ−Ｎｏｄｅから併合ノードまで接続する。
ステップ７: 併合ノードのＩｎ−Ｎｏｄｅ及びＯｕｔ−Ｎｏｄｅの線を接続する。
上記ステップにより、Ｊａｖａ（登録商標）原始コード中のＷｈｉｌｅ  ＳｔａｔｅｍｅｎｔをＥＡＤに転換する実際の過程を説明する。
【００２１】
実例３  Ｄｏ  Ｓｔａｔｅｍｅｎｔの転換：
その語法は以下の通りである。
ｄｏ  Ｓｔａｔｅｍｅｎｔ( ) ｗｈｉｌｅ (Ｅｘｐｒｅｓｓｉｏｎ( ) );
ここにおいてＪａｖａ（登録商標）原始コードについて以下に説明を行う。
【表３】
2007183897.tif 000005
転換の転換過程は以下の通りである。合わせて図６を参照のこと。
ステップ１:“ｄｏ”を解析する。
ステップ２: Ｓｔａｔｅｍｅｎｔ()を解析し、図１を生じ、そのＯｕｔ−Ｎｏｄｅを得る。
ステップ３:“ｗｈｉｌｅ”及び“(”を解析する。
ステップ４: 新たに増えたＪａｖａ（登録商標）プログラムＰｒｏｃｅｓｓ  Ｃｏｎｄｉｔｉｏｎ  Ｅｘｐｒｅｓｓｉｏｎ()を執行し、Ｄｅｃｏｄｅ  Ｎｏｄｅ(Ｄ)を生じる。並びにＤｅｃｏｄｅノード下方の接線及びその上のエッジラベル(ｅｄｇｅ  ｌａｂｅｌ)を生じ、図２が表すサブグラフ(ノードの集合)を完全に描き出し、Ｉｎ−Ｎｏｄｅ及びＯｕｔ−Ｎｏｄｅを設定する。
ステップ５:“)”及び“；”を解析する。
ステップ６:図１(Ｅｘｐｒｅｓｓｉｏｎ())のＯｕｔ−Ｎｏｄｅ及び図２(Ｓｔａｔｅｍｅｎｔ())のＩｎ−Ｎｏｄｅを接続する。
ステップ７:図３に示すように併合ノードを生じる。
ステップ８:図２(Ｓｔａｔｅｍｅｎｔ())のＯｕｔ−Ｎｏｄｅから併合ノードまで接続する。
ステップ９: 併合ノードのＩｎ−Ｎｏｄｅ及びＯｕｔ−Ｎｏｄｅの線を接続する。
上記ステップにより、Ｊａｖａ（登録商標）原始コード中のＤｏ  ＳｔａｔｅｍｅｎｔをＥＡＤに転換する実際の過程を説明する。
【００２２】
実例４  Ｉｆ  Ｓｔａｔｅｍｅｎｔの転換：
その語法は以下の通りである。
ｉｆ (Ｅｘｐｒｅｓｓｉｏｎ( ) )Ｓｔａｔｅｍｅｎｔ( ) [ ｅｌｓｅ  Ｓｔａｔｅｍｅｎｔ( ) ]
ここにおいてＪａｖａ（登録商標）原始コードについて以下に説明を行う。
ｉｆ (ａ＆ｌｔ;０) {
ｂ＝ −ａ;
} ｅｌｓｅ {
ｂ＝ ａ;
}
転換の転換過程は以下の通りである。合わせて図７を参照のこと。
ステップ１:“ｉｆ”及び“(”を解析する。
ステップ２:ｅｘｐｒｅｓｓｉｏｎ()を解析し、新たに増えたＪａｖａ（登録商標）プログラムＰｒｏｃｅｓｓ  Ｃｏｎｄｉｔｉｏｎ  Ｅｘｐｒｅｓｓｉｏｎ()を執行し、Ｄｅｃｏｄｅ  Ｎｏｄｅ(Ｄ)を生じる。並びにＤｅｃｏｄｅノード下方の接線及びその上のエッジラベル(ｅｄｇｅ  ｌａｂｅｌ)を生じ、図１が表すサブグラフ(ノードの集合)を完全に描き出し、Ｉｎ−Ｎｏｄｅ及びＯｕｔ−Ｎｏｄｅを設定する。
ステップ３:“(”を解析する。
ステップ４:ｓｔａｔｅｍｅｎｔ()を解析し、図２を生じ、該サブグラフのＩｎ−Ｎｏｄｅを得る。
ステップ５:“ｅｌｓｅ”を解析する。
ステップ６:ｅｌｓｅ  ｓｔａｔｅｍｅｎｔ()を解析し、図３を生じ、該サブグラフのＩｎ−Ｎｏｄｅを得る。
ステップ７:図１(Ｅｘｐｒｅｓｓｉｏｎ())のＯｕｔ−Ｎｏｄｅ１から図２(ｓｔａｔｅｍｅｎｔ())のＩｎ−Ｎｏｄｅまで接続する。
ステップ８:図１(Ｅｘｐｒｅｓｓｉｏｎ())のＯｕｔ−Ｎｏｄｅ ０から図３(ｅｌｓｅ  ｓｔａｔｅｍｅｎｔ())のＩｎ−Ｎｏｄｅまで接続する。
ステップ９:図４に示すように併合ノードを生じる。
ステップ１０:図２(ｓｔａｔｅｍｅｎｔ())のＯｕｔ−Ｎｏｄｅから併合ノードまで接続する。
上記ステップにより、Ｊａｖａ（登録商標）原始コード中のＩｆ  ＳｔａｔｅｍｅｎｔをＥＡＤに転換する実際の過程を説明する。
【００２３】
実例５  Ｓｗｉｔｃｈ  Ｓｔａｔｅｍｅｎｔの転換：
その語法は以下の通りである。
ｓｗｉｔｃｈ(Ｅｘｐｒｅｓｓｉｏｎ( ) ) {
←( ＳｗｉｔｃｈＬａｂｅｌ( ) ( ＢｌｏｃｋＳｔａｔｅｍｅｎｔ( ) )* )* }
ＳｗｉｔｃｈＬａｂｅｌ( ) {ｃａｓｅ  Ｅｘｐｒｅｓｓｉｏｎ( ) : ｄｅｆａｕｌｔ : }
ここにおいてＪａｖａ（登録商標）原始コードについて以下に説明を行う。
【表４】
2007183897.tif 000006
転換の転換過程は以下の通りである。合わせて図８を参照のこと。
ステップ１:“ｓｗｉｔｃｈ”及び“(”を解析する。
ステップ２: Ｅｘｐｒｅｓｓｉｏｎ()を解析し、該変数を保存する。
ステップ３:“(”及び“{”を解析する。
ステップ４:ＳｗｉｔｃｈＬａｂｅｌ()を解析し、Ｃａｓｅ  ｅｘｐｒｅｓｓｉｏｎと前のＥｘｐｒｅｓｓｉｏｎの変数を結合し、図１を生じる。その内、Ｄｅｃｏｄｅ  Ｎｏｄｅ(Ｄ)、連接線及びエッジラベル(ｅｄｇｅ  ｌａｂｅｌ)を含み、並びに２個のＯｕｔ−Ｎｏｄｅである、Ｏｕｔ−Ｎｏｄｅ ０及びＯｕｔ−Ｎｏｄｅ １を設定する。
ステップ５:ＢｌｏｃｋＳｔａｔｅｍｅｎｔ()を解析し、図２のような図を描き出し、Ｏｕｔ−Ｎｏｄｅ ０を該サブグラフのＯｕｔ−Ｎｏｄｅとする。
ステップ６: ステップ４、５のようにその他のＳｗｉｔｃｈＬａｂｅｌ()を解析し、但し２回目以降は判断を加え、図３、４、５のように併合ノードの判断を生じる。
ステップ７: 併合ノードを生じ、図６のようにその他のＯｕｔ−Ｎｏｄｅを接続する。
上記ステップにより、Ｊａｖａ（登録商標）原始コード中のＳｗｉｔｃｈ  ＳｔａｔｅｍｅｎｔをＥＡＤに転換する実際の過程を説明する。
【００２４】
本発明中でＪａｖａ（登録商標）プログラムの原始コードをＥＡＤに転換する過程は、上記説明により明らかなように、原始コードの差異に応じて転換の過程も異なる。
【００２５】
そのため、本発明が提出する完全な転換過程は、図９に示すように、原始コード自動的に対応するアクティビティダイアグラムに転換する時には、先ず一行のハイレベルプログラミング言語の原始コードを読み取る(ステップＳ５０１)。
続いて原始コードの形態がステイトメント指令であるかどうかを判断する(ステップＳ５０２)。本実施例中では、ステイトメント指令はｆｏｒ、ｗｈｉｌｅ、ｄｏ、ｉｆ、ｓｗｉｔｃｈ指令を含む。
原始コードの形態が上記ステイトメント指令中のどの指令でもない時には、該非ステイトメント指令を直接対応するサブグラフに転換する(ステップＳ５０３)。
さらに再び一行のハイレベルプログラミング言語の原始コードを読み取る(ステップＳ５０１)。
【００２６】
ステップＳ５０２中において判断された原始コードがステイトメント指令である時には、条件表現式の前方にステイトメント式(ｓｔａｔｅｍｅｎｔ)がないかどうかを再び判断する必要がある(ステップＳ５０４)。もし、ステイトメント式(ｓｔａｔｅｍｅｎｔ)が条件表現式の前方にあるなら、先ずステイトメント式(ｓｔａｔｅｍｅｎｔ)を対応するサブグラフに転換する(ステップＳ５０５)。
【００２７】
もし、ステイトメント式(ｓｔａｔｅｍｅｎｔ)が条件表現式の前方にないなら(ｓｔａｔｅｍｅｎｔ  ｉｎｓｔｒｕｃｔｉｏｎ)、直接選択ノード(ｓｅｌｅｃｔ  ｎｏｄｅ)を生じる(ステップＳ５０６)。
続いて、２個のカーブポイント(ｃｕｒｖｅ  ｐｏｉｎｔ)を生じ、該２個のカーブポイントは選択ノード(ｓｅｌｅｃｔ  ｎｏｄｅ)に接続する(ステップＳ５０７)。
さらに、ステイトメント式(ｓｔａｔｅｍｅｎｔ)を対応するサブグラフに転換する(ステップＳ５０８)。
その後、併合ノードを生じ、サブグラフを併合する(ステップＳ５０９)。
さらに該ステイトメント式を転換後に生じるサブグラフを経由し、右カーブポイントに接続し(ステップＳ５１０)、該ステイトメント式を転換後に生じるサブグラフを経由し、併合ノードに接続する(ステップＳ５１１)。
最後に、指令がサブグラフに転換されていないかどうかを再び判断する(ステップＳ５１２)。
もし転換されているなら、ステップＳ５０１に戻り、次の一行のハイレベルプログラミング言語の原始コードを読取り、もし転換を必要とする指令がないなら、完全なＥＡＤを出力する(ステップＳ５１３)。
【００２８】
本発明は完全に、Ｊａｖａ（登録商標）プログラム言語を対応するＥＡＤに転換し、視覚化の方式により原始コードのプログラムロジックと執行過程を表現することができる。図１０に示すように、Ｉｆ  ＳｔａｔｅｍｅｎｔとＷｈｉｌｅ  Ｓｔａｔｅｍｅｎｔが書く累加プログラムを利用し、上記転換過程と規則により、対応するＥＡＤに転換することができる(図１１参照)。
この他、同一のプログラムは上記の転換過程と規則に基づき、対応するＥＡＤに転換することができる。Ｊａｖａ（登録商標）プログラム語法の差異により、生じるＥＡＤも異なる。
【００２９】
上記のように、本発明はハイレベルプログラミング言語をアクティビティダイアグラムに自動的に転換する方法はコンパイラ(ｃｏｍｐｉｌｅｒ)を利用し転換規則を加え、多種の異なるハイレベルプログラミング言語(Ｊａｖａ（登録商標）、Ｃ、Ｃ＋＋など)の原始コードを自動的に対応するアクティビティダイアグラム(ＥＡＤ)に転換し、視覚化の方式により原始コードのプログラムロジックと執行過程を表現する。この中間フォーマットにより、多種の異なるプログラム言語は統一したフォーマットにより表示され、後続のハードウエア言語への模擬及び転換の必要に有利である。
【図面の簡単な説明】
【００３０】
【図１】ＵＭＬ中で定義するアクティビティダイアグラム(ａｃｔｉｖｉｔｙ  ｄｉａｇｒａｍ)である。
【図２】本実施例で定義するＥＡＤ(Ｅｘｔｅｎｄｅｄ    ａｃｔｉｖｉｔｙ  ｄｉａｇｒａｍ)である。
【図３】本実施例のＪａｖａ（登録商標）原始コードからＥＡＤへの転換の実際の過程である。
【図４】本実施例のＦｏｒ  ＳｔａｔｅｍｅｎｔがＥＡＤに転換する実際の過程である。
【図５】本実施例のＷｈｉｌｅ  ＳｔａｔｅｍｅｎｔがＥＡＤに転換する実際の過程である。
【図６】本実施例のＤｏ  ＳｔａｔｅｍｅｎｔがＥＡＤに転換する実際の過程である。
【図７】本実施例のＩｆ  ＳｔａｔｅｍｅｎｔがＥＡＤに転換する実際の過程である。
【図８】本実施例のＳｗｉｔｃｈ  ＳｔａｔｅｍｅｎｔがＥＡＤに転換する実際の過程である。
【図９】本実施例のハイレベルプログラミング言語をサブグラフに自動的に転換する方法の実際の過程である。
【図１０】本実施例のＪａｖａ（登録商標）プログラムである。
【図１１】本実施例のＪａｖａ（登録商標）プログラム及びそれが対応するＥＡＤである。
【符号の説明】
【００３１】
Ｓ５０１〜Ｓ５１３  ステップ
【図１】
2007183897.tif 000007
【図２】
2007183897.tif 000008
【図３】
2007183897.tif 000009
【図４】
2007183897.tif 000010
【図５】
2007183897.tif 000011
【図６】
2007183897.tif 000012
【図７】
2007183897.tif 000013
【図８】
2007183897.tif 000014
【図９】
2007183897.tif 000015
【図１０】
2007183897.tif 000016
【図１１】
2007183897.tif 000017