ハイレベルプログラミング言語を自動的EADに転換する方法
【課題】ハイレベルプログラミング言語を自動的EADに転換する方法の提供。
【解決手段】主にハイレベルプログラミング言語(Java(登録商標)、C、C++など)をハードウエア記述言語に転換する時は、該ハイレベルプログラミング言語により書かれたプログラムの原始コードを先ずアクティビティダイアグラムに転換する。コンパイラは新しい転換規則を追加し、UMLプログラム言語中のアクティビティダイアグラム規格を修正し、プログラムの原始コードを対応するアクティビティダイアグラムに転換する。こうして視覚化方式により原始コードのプログラムロジックと執行過程を表現する。
【解決手段】主にハイレベルプログラミング言語(Java(登録商標)、C、C++など)をハードウエア記述言語に転換する時は、該ハイレベルプログラミング言語により書かれたプログラムの原始コードを先ずアクティビティダイアグラムに転換する。コンパイラは新しい転換規則を追加し、UMLプログラム言語中のアクティビティダイアグラム規格を修正し、プログラムの原始コードを対応するアクティビティダイアグラムに転換する。こうして視覚化方式により原始コードのプログラムロジックと執行過程を表現する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は一種のハイレベルプログラミング言語を自動的EADに転換する方法に関する。特に一種のハイレベルの原始コードを対応するアクティビティダイアグラムに転換し、視覚化の方式により原始コードのプログラムロジックと執行過程を表示するハイレベルプログラミング言語を自動的EADに転換する方法に係る。
【背景技術】
【0002】
公知のハードウエア記述言語(VHDLなど)はハイレベルプログラミング言語のプログラムロジックと執行過程の直接記述には適していないため、ハードウエアを設計する時にはハイレベルプログラミング言語により設計された過程と直接対応させることができず、設計上の困難を招いていた。
さらに公知のハイレベルプログラミング言語はハードウエア記述言語(VHDLなど)に直接転換することができないため、設計において不便である。
しかもハイレベルプログラミング言語もJava(登録商標)、C、C++など種類が非常に多いため、設計されたプログラム機能が同一でもプログラム言語の特性により完成された執行過程として統一することができない。そのため、ハードウエアパーツ設計において困難となっていた。
すなわち公知方法はハイレベルプログラミング言語をハードウエア記述言語に直接転換することができないため、改良の必要がある。
【発明の開示】
【発明が解決しようとする課題】
【0003】
本発明は下記のハイレベルプログラミング言語を自動的EADに転換する方法を提供する。それは主にコンパイラにより転換規則を加え、ハイレベルプログラミング言語の原始コードを対応するアクティビティダイアグラムに自動的に転換し、以下のステップを含み、
(A)一行のハイレベルプログラミング言語の原始コードを読取り、すべての原始コードの読み取りが完成したとき、完全なアクティビティダイアグラムを出力し、
(B)該読み取った原始コードがステイトメント指令でない時には、非ステイトメント指令を対応するサブグラフに転換し、ステップ(A)を再執行し、
(C)該読み取った原始コードがステイトメント指令である時、しかも該ステイトメント指令中の前方にステイトメント式がある時には、該ステイトメント式をサブグラフに転換し、
(D)選択ノードを生じ、
(E)2個のカーブポイントを生じ、該2個のカーブポイントは該選択ノードに接続し、
(F)ステイトメント式を対応するサブグラフに転換し、
(G)併合ノードを生じ、サブグラフを併合し、
(H)該ステイトメント式は転換後に生じたサブグラフを経由し、右カーブポイントに接続し、
(I)該ステイトメント式は転換後に生じたサブグラフを経由し、併合ノードに接続し、ステップ(A)を再執行し、
(J)サブグラフに転換していない指令がないかどうかを判断し、もしあるならステップ(A)を再執行し、一行のハイレベルプログラミング言語の原始コードを読取り、転換する必要のある指令がないなら、完全なEADを出力し、こうして本発明のハイレベルプログラミング言語をアクティビティダイアグラムに転換する方法は、UML中のアクティビティダイアグラムの修正を利用し、ハイレベルプログラミング言語を視覚化の方式により原始コードのプログラムロジックと執行過程を表現し、後続のハードウエア言語への模擬及び転換の必要に有利である。
【0004】
本発明のハイレベルプログラミング言語を自動的EADに転換する方法ではハイレベルプログラミング言語はJava(登録商標)、C、C++プログラム言語である。
【0005】
本発明のハイレベルプログラミング言語を自動的EADに転換する方法では、アクティビティダイアグラムはUMLプログラム言語中に定義するエクステンディッドアクティビティダイアグラム(Extended activity diagram)で、一種の過程制御図を表する。
【0006】
本発明のハイレベルプログラミング言語を自動的EADに転換する方法では、アクティビティダイアグラムはスタート、終了、カーブポイント、マイクロオペレーション、分岐、連結、選択、併合の8種のノードを含む。
【0007】
本発明のハイレベルプログラミング言語を自動的EADに転換する方法ではステイトメント指令はfor、while、do、if、seitch指令を含むことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法である。
【課題を解決するための手段】
【0008】
請求項1の発明は、主にコンパイラにより転換規則を加え、ハイレベルプログラミング言語の原始コードを対応するアクティビティダイアグラムに自動的に転換し、以下のステップを含み、
(A)一行のハイレベルプログラミング言語の原始コードを読取り、すべての原始コードの読み取りが完成したとき、完全なアクティビティダイアグラムを出力し、
(B)該読み取った原始コードがステイトメント指令でない時には、非ステイトメント指令を対応するサブグラフに転換し、ステップ(A)を再執行し、
(C)該読み取った原始コードがステイトメント指令である時、しかも該ステイトメント指令中の前方にステイトメント式がある時には、該ステイトメント式をサブグラフに転換し、
(D)選択ノードを生じ、
(E)2個のカーブポイントを生じ、該2個のカーブポイントは該選択ノードに接続し、
(F)ステイトメント式を対応するサブグラフに転換し、
(G)併合ノードを生じ、サブグラフを併合し、
(H)該ステイトメント式は転換後に生じたサブグラフを経由し、右カーブポイントに接続し、
(I)該ステイトメント式は転換後に生じたサブグラフを経由し、併合ノードに接続し、
(J)サブグラフに転換していない指令がないかどうかを判断し、もしあるならステップ(A)を再執行し、ないなら完全なEADを出力することを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法としている。
請求項2の発明は、請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記ハイレベルプログラミング言語はJava(登録商標)、C、C++プログラム言語を含むことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法としている。
請求項3の発明は、請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記アクティビティダイアグラムはUMLプログラム言語中に定義するエクステンディッドアクティビティダイアグラム(Extended activity diagram)で、一種の過程制御図を表すことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法としている。
請求項4の発明は、請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記アクティビティダイアグラムはスタート、終了、カーブポイント、マイクロオペレーション、分岐、連結、選択、併合の8種のノードを含むことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法としている。
請求項5の発明は、請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記Java(登録商標)CCはJDK1.5を使用することを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法としている。
請求項6の発明は、請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記ステイトメント指令はfor、while、do、if、switch指令を含むことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法としている。
【発明の効果】
【0009】
主にハイレベルプログラミング言語(Java(登録商標)、C、C++など) をハードウエア記述言語に転換する時には、該ハイレベルプログラミング言語により書かれたプログラムの原始コードを先ずアクティビティダイアグラムに転換しなければならない。本発明のコンパイラ(compiler)は新しい転換規則を追加し、UMLプログラム言語中のアクティビティダイアグラム規格を修正し、プログラムの原始コードを対応するアクティビティダイアグラムに転換する。こうして視覚化方式により原始コードのプログラムロジックと執行過程を表現する。本発明はハイレベルプログラミング言語を統一したフォーマットに転換し表示し、同時にアクティビティダイアグラムは後続のハードウエア記述言語に転換する時に必要となる模擬と需要に有利となる。
【発明を実施するための最良の形態】
【0010】
公知方法はハイレベルプログラミング言語をハードウエア記述言語に直接転換することができないため、使用者がハイレベルプログラミング言語(Java(登録商標)、C、C++など)をハードウエア記述言語(VHDLなど)に転換する時には、先ずハイレベルプログラミング言語をアクティビティダイアグラム(Activity Diagram,ADと略称)と呼ばれる中間フォーマットに転換する。ADは一種の過程の記述図である。図1に示すように、UML(Unified Modeling Language,UML)で定義するアクティビティダイアグラムは、Action state、fork、join、selectの5種のパーツ図を含む。本実施例ではあるプログラムが必要とする情報を保留するために、一部のアクティビティダイアグラムのパーツを修正する必要があり、使用するアクティビティダイアグラムはエクステンディッドアクティビティダイアグラム(Extended activity diagram,EADと略称)と呼ばれる。
【0011】
次に図2に示すように、EADはハイレベルプログラミング言語の原始コードを対応する過程に転換する制御図である。それは複数のノード(node)により組成され、異なるノードが組合わさり構成されるサブグラフ(sub−graph)により、各サブグラフ中にはそれぞれ開始、執行、終了の3部分を含む。本実施例中においては、多種の異なるノードを定義している、以下に各種ノードについて説明する。
1. 開始(start)ノード: アクティビティダイアグラムのスタート。
2. 終了(end)ノード: アクティビティダイアグラムの終了。
3. カーブ点(curve point)ノード:方向性を持つ2本の連接線(edge)が連接され、実際には執行されていない影響に対して、通常は便利な転換過程の一時的用途として用いられる。
4. マイクロオペレーション(micro−operation)ノード:あるステイトメント(expression statement)或いは表示法(expression)の処理を表示。
5. 分岐(fork)ノード:平行執行。
6. 連結(join)ノード:すべてのマイクロオペレーションが到達した時だけに出力される信号を発信する。
7. 選択(select)ノード:デコーダ後、適当な出力信号を選択、発信する。
8. 併合(Merge)ノード:入力信号を併合後に出力する。
【0012】
上記各ノードを1物件と見なすと、該物件中においては2種の資料形態を記録し、自己ノード(In−Node)及び自己がその他の接続するノード(Out−Node)への接続を表す。そのノード形態は言語に応じて変る。各段の言語を解析する時にはすべて対応するサブグラフを生じ、該サブグラフのIn−Node及びOut−Nodeを記録し、他のサブグラフを接続、使用する。この接続方式により、各段の言語中のサブグラフの発生は同一の方式を使用する。各サブグラフを相互に接続した後は、プログラム原始コードを対応するアクティビティダイアグラムに転換することができ、視覚化方式で原始コードのプログラムロジックと執行過程を表示することができる。
【0013】
本発明において、完全なEADは複数のサブグラフにより組成する。その内、第一サブグラフはクラス(class)情報を記載し、クラスサブグラフと呼ばれる。他の各サブグラフはすべてある方法(method)に対応する。サブグラフの各部分はすべて各種異なるノードにより組成される。該クラスサブグラフ中においてスタートの部分はスタートノード(start mode)により表示され、このノードはクラススタートノード(class start mode)と呼ばれる。クラススタートノード中には各種ラベル(label)を含む。以下にサブグラフの各符号について説明する。
●C=className,modifier:
Cはクラスを表し、このクラスの名前とその修飾子(modifier)を説明する。修飾子は数字で、以下に詳述する。
0x0001: PUBLIC;
0x0010: FINAL;
0x0400: ABSTRACT;
0x0800: STRICT;
●G=type,size,variableName:
Gは全域変数(global Variable)を表し、形態(type)、サイズ(size)、変数名称(variableName)を説明する。形態とサイズの定義はJava(登録商標)と同一である。
●M=methodName,modifier:
Mは方法(method)を表し、方法の名称とその修飾子(modifier)を説明する。修飾子は数字で、以下に詳述する。
0x0001:PUBLIC; 0x0002: PRIVATE;
0x0004: PROTECTED; 0x0008: STATIC;
0x0010: FINAL; 0x0020: SYNCHRONIZED;
0x0100: NATIVE; 0x0400: ABSTRACT;
0x0800: STRICT;
【0014】
本実施例においてクラスサブグラフ中の執行部分は左右に分かれる。左はクラス変数(class variable)部分で、右は物件変数(instance variable)部分である。開始部分とクラス変数部分及び物件変数部分間にはそれぞれ方向性の連接線(edge)連接がある。その矢印は開始部分からそれぞれクラス変数部分及び物件変数部分に向かう。この2方向性連接線においてはそれぞれ“class”及び“instance”の文字があり、連接線ラベル(edge label)と呼ばれる。
【0015】
クラス変数部分及び物件変数部分は第一ノードが開始ノードである他、他はマイクロオペレーションノードである。各ノード間はみな方向性を持つ連接線により連接される。矢印の方向はすべて上から下である。クラス変数部分の開始ノードの内容は“m=sinit,0”で、物件変数部分の開始ノード内容は“m=init,0”である。クラス変数部分及び物件変数部分のマイクロオペレーションノードの内容はすべて初期値の宣告である。クラス変数部分及び物件変数部分の終了部分はすべて終了ノードにより表示され、その内容はそれぞれ“return VOID sinit”及び“return VOID init”である。
【0016】
方法サブグラフのスタート部分も開始ノードにより表され、数個のラベルを含む。その説明は以下の通りである。
●M=methodName,modifier:
Mは方法(method)を表し、方法の名称とその修飾子(modifier)を説明する。修飾子は数字で、以下に詳述する。
0x0001: PUBLIC; 0x0002: PRIVATE;
0x0004: PROTECTED; 0x0008: STATIC;
0x0010: FINAL; 0x0020: SYNCHRONIZED;
0x0100: NATIVE; 0x0400: ABSTRACT;
0x0800: STRICT;
●R=type,size,retmethodName:
Rはこの方法のリターン情報を表し、リターンの形態とサイズを説明する。ここの形態とサイズはJava(登録商標)と同一である。
●P=type,size,variableName:
Pは伝送されたパラメーター(parameter)を表し、該パラメーターの形態(type)、サイズ(size)、変数名称(variableName)を説明する。ここでの形態とサイズの定義はJava(登録商標)と同一である。
●L=type,size,variableName:
Lは区域変数(local variable)を表し、該区域変数の形態(type)、サイズ(size)、変数名称(variableName)を説明する。ここでの形態とサイズの定義はJava(登録商標)と同一である。
上記は本発明中に使用するすべてのサブグラフの図形規格の紹介である。
【0017】
続いて図3に示すように、本実施例中ではJava(登録商標)プログラム言語を例とする。Java(登録商標)プログラム実作をEADに転換する。Java(登録商標)CC(Java(登録商標) Compiler Compiler,、以下Java(登録商標)CCと略称)を利用し定義するJava(登録商標)標準語法規格を基礎JDK(Java(登録商標) Development Kit 1.5)で、Java(登録商標)CCのgrammar file中に一段のJava(登録商標)プログラムを加え、修正済みのJava(登録商標)語法ファイル(サブファイル名がjjであるファイル)を生じる。Java(登録商標)CCはこのJava(登録商標)プログラムに基づき、Java(登録商標)解析器(Java(登録商標) Parser)クラスとJava(登録商標) Parserが使用を必要とするその他のクラスを生じる。該生じたJava(登録商標) ParserクラスはJava(登録商標)原始コードから対応するEADの機能への転換を提供することができる。本実施例中では、Java(登録商標) Parserクラスはコンピュータ補助回路設計ソフトウエア中に統合することができ、これによりソフトウエアはJava(登録商標)原始コードをEADに転換する機能を具える。さらに、完全なJava(登録商標)原始コードはJava(登録商標) Parser中に伝送され、Java(登録商標) Parserはプログラム中の異なるtokenに応じて、語法ファイル中に新たに生じたEADの指令に対応する。続いて、該EAD図形を転換する。
【0018】
Java(登録商標)プログラムのtoken形態は非常に多いため、以下にいくつかの代表的なステイトメント指令(statement instruction)、条件表現式(condition expression)、ステイトメント式(statement)の転換過程と規則について説明を行う。
本実施例中では、ステイトメント指令は含むfor、while、do、if、switchなどの形態を含む。以下にステイトメント指令を例にJava(登録商標)プログラムをEADに転換する転換過程と規則について説明を行う。
【0019】
実例1 For Statementの転換:
その語法は以下の通りである(図4を合わせて参照のこと)。
for ([ForInit( )]; [Expression( )]; [ForUpdate( )]) Statement( )
ここにおいてJava(登録商標)原始コードについて以下に説明を行う。
【表1】
上記Java(登録商標)原始コードの転換過程は以下の通りである。
ステップ1:“for”及び“(”を解析する。
ステップ2:(For Init())を解析し、図1が表すノードを描き出し、In−Node及びOut−Nodeを設定し接続する。
ステップ3:“;”を解析する。
ステップ4:(Expression())を解析し、増えたJava(登録商標)プログラムprocess Condition Expression()を執行し、Decode Node(D)を生じる。またDecodeノード下方の接線とその上のエッジラベル(edge label)を生じる。
図2が表すサブグラフ(ノードの集合)を完全に描き出し、In−Node及びOut−Nodeを設定する。
ステップ5: “;”を解析する。
ステップ6:(ForUpdate)を解析し、図3が表すノードを描き出し、該ノードのOut−Nodeを得る。
ステップ7:“)”を解析する。
ステップ8:Statement()を解析し、図4が表すノードを描き出す。
ステップ9:図2サブグラフが表すexpression()のOut−Node及び図3のIn−Nodeを接続する。
ステップ10:図9に示すように併合ノードを生じる。
ステップ11: Statement()のOut−Nodeから併合ノードのIn−Nodeまで接続する。
ステップ12: 併合ノードのIn−Node及びOut−Nodeの線を接続する。
上記ステップにより、Java(登録商標)原始コード中のFor StatementをEADに転換する実際の過程を説明する。
【0020】
実例2 While Statementの転換:
その語法は以下の通りである。
while (Expression( ) )Statement( )
ここにおいてJava(登録商標)原始コードの転換説明は以下の通りである。
【表2】
転換の転換過程は以下の通りである。合わせて図5を参照のこと。
ステップ1:“while”及び“(”を解析する。
ステップ2:Expression()を解析し、図1を生じ、該サブグラフのOut−Nodeを得る。
ステップ3:新たに増えたJava(登録商標)プログラムProcess Condition Expression()を執行し、Decode Node(D)を生じる。並びにDecodeノード下方の接線及びその上のエッジラベル(edge label)を生じ、図2が表すサブグラフ(ノードの集合)を完全に描き出し、In−Node及びOut−Nodeを設定する。
ステップ4:図2(Expression())のOut−Node及び図1(Statement())のIn−Nodeを接続する。
ステップ5:図3に示すように併合ノードを生じる。
ステップ6:図1(Statement())のOut−Nodeから併合ノードまで接続する。
ステップ7: 併合ノードのIn−Node及びOut−Nodeの線を接続する。
上記ステップにより、Java(登録商標)原始コード中のWhile StatementをEADに転換する実際の過程を説明する。
【0021】
実例3 Do Statementの転換:
その語法は以下の通りである。
do Statement( ) while (Expression( ) );
ここにおいてJava(登録商標)原始コードについて以下に説明を行う。
【表3】
転換の転換過程は以下の通りである。合わせて図6を参照のこと。
ステップ1:“do”を解析する。
ステップ2: Statement()を解析し、図1を生じ、そのOut−Nodeを得る。
ステップ3:“while”及び“(”を解析する。
ステップ4: 新たに増えたJava(登録商標)プログラムProcess Condition Expression()を執行し、Decode Node(D)を生じる。並びにDecodeノード下方の接線及びその上のエッジラベル(edge label)を生じ、図2が表すサブグラフ(ノードの集合)を完全に描き出し、In−Node及びOut−Nodeを設定する。
ステップ5:“)”及び“;”を解析する。
ステップ6:図1(Expression())のOut−Node及び図2(Statement())のIn−Nodeを接続する。
ステップ7:図3に示すように併合ノードを生じる。
ステップ8:図2(Statement())のOut−Nodeから併合ノードまで接続する。
ステップ9: 併合ノードのIn−Node及びOut−Nodeの線を接続する。
上記ステップにより、Java(登録商標)原始コード中のDo StatementをEADに転換する実際の過程を説明する。
【0022】
実例4 If Statementの転換:
その語法は以下の通りである。
if (Expression( ) )Statement( ) [ else Statement( ) ]
ここにおいてJava(登録商標)原始コードについて以下に説明を行う。
if (a<0) {
b= −a;
} else {
b= a;
}
転換の転換過程は以下の通りである。合わせて図7を参照のこと。
ステップ1:“if”及び“(”を解析する。
ステップ2:expression()を解析し、新たに増えたJava(登録商標)プログラムProcess Condition Expression()を執行し、Decode Node(D)を生じる。並びにDecodeノード下方の接線及びその上のエッジラベル(edge label)を生じ、図1が表すサブグラフ(ノードの集合)を完全に描き出し、In−Node及びOut−Nodeを設定する。
ステップ3:“(”を解析する。
ステップ4:statement()を解析し、図2を生じ、該サブグラフのIn−Nodeを得る。
ステップ5:“else”を解析する。
ステップ6:else statement()を解析し、図3を生じ、該サブグラフのIn−Nodeを得る。
ステップ7:図1(Expression())のOut−Node1から図2(statement())のIn−Nodeまで接続する。
ステップ8:図1(Expression())のOut−Node 0から図3(else statement())のIn−Nodeまで接続する。
ステップ9:図4に示すように併合ノードを生じる。
ステップ10:図2(statement())のOut−Nodeから併合ノードまで接続する。
上記ステップにより、Java(登録商標)原始コード中のIf StatementをEADに転換する実際の過程を説明する。
【0023】
実例5 Switch Statementの転換:
その語法は以下の通りである。
switch(Expression( ) ) {
←( SwitchLabel( ) ( BlockStatement( ) )* )* }
SwitchLabel( ) {case Expression( ) : default : }
ここにおいてJava(登録商標)原始コードについて以下に説明を行う。
【表4】
転換の転換過程は以下の通りである。合わせて図8を参照のこと。
ステップ1:“switch”及び“(”を解析する。
ステップ2: Expression()を解析し、該変数を保存する。
ステップ3:“(”及び“{”を解析する。
ステップ4:SwitchLabel()を解析し、Case expressionと前のExpressionの変数を結合し、図1を生じる。その内、Decode Node(D)、連接線及びエッジラベル(edge label)を含み、並びに2個のOut−Nodeである、Out−Node 0及びOut−Node 1を設定する。
ステップ5:BlockStatement()を解析し、図2のような図を描き出し、Out−Node 0を該サブグラフのOut−Nodeとする。
ステップ6: ステップ4、5のようにその他のSwitchLabel()を解析し、但し2回目以降は判断を加え、図3、4、5のように併合ノードの判断を生じる。
ステップ7: 併合ノードを生じ、図6のようにその他のOut−Nodeを接続する。
上記ステップにより、Java(登録商標)原始コード中のSwitch StatementをEADに転換する実際の過程を説明する。
【0024】
本発明中でJava(登録商標)プログラムの原始コードをEADに転換する過程は、上記説明により明らかなように、原始コードの差異に応じて転換の過程も異なる。
【0025】
そのため、本発明が提出する完全な転換過程は、図9に示すように、原始コード自動的に対応するアクティビティダイアグラムに転換する時には、先ず一行のハイレベルプログラミング言語の原始コードを読み取る(ステップS501)。
続いて原始コードの形態がステイトメント指令であるかどうかを判断する(ステップS502)。本実施例中では、ステイトメント指令はfor、while、do、if、switch指令を含む。
原始コードの形態が上記ステイトメント指令中のどの指令でもない時には、該非ステイトメント指令を直接対応するサブグラフに転換する(ステップS503)。
さらに再び一行のハイレベルプログラミング言語の原始コードを読み取る(ステップS501)。
【0026】
ステップS502中において判断された原始コードがステイトメント指令である時には、条件表現式の前方にステイトメント式(statement)がないかどうかを再び判断する必要がある(ステップS504)。もし、ステイトメント式(statement)が条件表現式の前方にあるなら、先ずステイトメント式(statement)を対応するサブグラフに転換する(ステップS505)。
【0027】
もし、ステイトメント式(statement)が条件表現式の前方にないなら(statement instruction)、直接選択ノード(select node)を生じる(ステップS506)。
続いて、2個のカーブポイント(curve point)を生じ、該2個のカーブポイントは選択ノード(select node)に接続する(ステップS507)。
さらに、ステイトメント式(statement)を対応するサブグラフに転換する(ステップS508)。
その後、併合ノードを生じ、サブグラフを併合する(ステップS509)。
さらに該ステイトメント式を転換後に生じるサブグラフを経由し、右カーブポイントに接続し(ステップS510)、該ステイトメント式を転換後に生じるサブグラフを経由し、併合ノードに接続する(ステップS511)。
最後に、指令がサブグラフに転換されていないかどうかを再び判断する(ステップS512)。
もし転換されているなら、ステップS501に戻り、次の一行のハイレベルプログラミング言語の原始コードを読取り、もし転換を必要とする指令がないなら、完全なEADを出力する(ステップS513)。
【0028】
本発明は完全に、Java(登録商標)プログラム言語を対応するEADに転換し、視覚化の方式により原始コードのプログラムロジックと執行過程を表現することができる。図10に示すように、If StatementとWhile Statementが書く累加プログラムを利用し、上記転換過程と規則により、対応するEADに転換することができる(図11参照)。
この他、同一のプログラムは上記の転換過程と規則に基づき、対応するEADに転換することができる。Java(登録商標)プログラム語法の差異により、生じるEADも異なる。
【0029】
上記のように、本発明はハイレベルプログラミング言語をアクティビティダイアグラムに自動的に転換する方法はコンパイラ(compiler)を利用し転換規則を加え、多種の異なるハイレベルプログラミング言語(Java(登録商標)、C、C++など)の原始コードを自動的に対応するアクティビティダイアグラム(EAD)に転換し、視覚化の方式により原始コードのプログラムロジックと執行過程を表現する。この中間フォーマットにより、多種の異なるプログラム言語は統一したフォーマットにより表示され、後続のハードウエア言語への模擬及び転換の必要に有利である。
【図面の簡単な説明】
【0030】
【図1】UML中で定義するアクティビティダイアグラム(activity diagram)である。
【図2】本実施例で定義するEAD(Extended activity diagram)である。
【図3】本実施例のJava(登録商標)原始コードからEADへの転換の実際の過程である。
【図4】本実施例のFor StatementがEADに転換する実際の過程である。
【図5】本実施例のWhile StatementがEADに転換する実際の過程である。
【図6】本実施例のDo StatementがEADに転換する実際の過程である。
【図7】本実施例のIf StatementがEADに転換する実際の過程である。
【図8】本実施例のSwitch StatementがEADに転換する実際の過程である。
【図9】本実施例のハイレベルプログラミング言語をサブグラフに自動的に転換する方法の実際の過程である。
【図10】本実施例のJava(登録商標)プログラムである。
【図11】本実施例のJava(登録商標)プログラム及びそれが対応するEADである。
【符号の説明】
【0031】
S501〜S513 ステップ
【技術分野】
【0001】
本発明は一種のハイレベルプログラミング言語を自動的EADに転換する方法に関する。特に一種のハイレベルの原始コードを対応するアクティビティダイアグラムに転換し、視覚化の方式により原始コードのプログラムロジックと執行過程を表示するハイレベルプログラミング言語を自動的EADに転換する方法に係る。
【背景技術】
【0002】
公知のハードウエア記述言語(VHDLなど)はハイレベルプログラミング言語のプログラムロジックと執行過程の直接記述には適していないため、ハードウエアを設計する時にはハイレベルプログラミング言語により設計された過程と直接対応させることができず、設計上の困難を招いていた。
さらに公知のハイレベルプログラミング言語はハードウエア記述言語(VHDLなど)に直接転換することができないため、設計において不便である。
しかもハイレベルプログラミング言語もJava(登録商標)、C、C++など種類が非常に多いため、設計されたプログラム機能が同一でもプログラム言語の特性により完成された執行過程として統一することができない。そのため、ハードウエアパーツ設計において困難となっていた。
すなわち公知方法はハイレベルプログラミング言語をハードウエア記述言語に直接転換することができないため、改良の必要がある。
【発明の開示】
【発明が解決しようとする課題】
【0003】
本発明は下記のハイレベルプログラミング言語を自動的EADに転換する方法を提供する。それは主にコンパイラにより転換規則を加え、ハイレベルプログラミング言語の原始コードを対応するアクティビティダイアグラムに自動的に転換し、以下のステップを含み、
(A)一行のハイレベルプログラミング言語の原始コードを読取り、すべての原始コードの読み取りが完成したとき、完全なアクティビティダイアグラムを出力し、
(B)該読み取った原始コードがステイトメント指令でない時には、非ステイトメント指令を対応するサブグラフに転換し、ステップ(A)を再執行し、
(C)該読み取った原始コードがステイトメント指令である時、しかも該ステイトメント指令中の前方にステイトメント式がある時には、該ステイトメント式をサブグラフに転換し、
(D)選択ノードを生じ、
(E)2個のカーブポイントを生じ、該2個のカーブポイントは該選択ノードに接続し、
(F)ステイトメント式を対応するサブグラフに転換し、
(G)併合ノードを生じ、サブグラフを併合し、
(H)該ステイトメント式は転換後に生じたサブグラフを経由し、右カーブポイントに接続し、
(I)該ステイトメント式は転換後に生じたサブグラフを経由し、併合ノードに接続し、ステップ(A)を再執行し、
(J)サブグラフに転換していない指令がないかどうかを判断し、もしあるならステップ(A)を再執行し、一行のハイレベルプログラミング言語の原始コードを読取り、転換する必要のある指令がないなら、完全なEADを出力し、こうして本発明のハイレベルプログラミング言語をアクティビティダイアグラムに転換する方法は、UML中のアクティビティダイアグラムの修正を利用し、ハイレベルプログラミング言語を視覚化の方式により原始コードのプログラムロジックと執行過程を表現し、後続のハードウエア言語への模擬及び転換の必要に有利である。
【0004】
本発明のハイレベルプログラミング言語を自動的EADに転換する方法ではハイレベルプログラミング言語はJava(登録商標)、C、C++プログラム言語である。
【0005】
本発明のハイレベルプログラミング言語を自動的EADに転換する方法では、アクティビティダイアグラムはUMLプログラム言語中に定義するエクステンディッドアクティビティダイアグラム(Extended activity diagram)で、一種の過程制御図を表する。
【0006】
本発明のハイレベルプログラミング言語を自動的EADに転換する方法では、アクティビティダイアグラムはスタート、終了、カーブポイント、マイクロオペレーション、分岐、連結、選択、併合の8種のノードを含む。
【0007】
本発明のハイレベルプログラミング言語を自動的EADに転換する方法ではステイトメント指令はfor、while、do、if、seitch指令を含むことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法である。
【課題を解決するための手段】
【0008】
請求項1の発明は、主にコンパイラにより転換規則を加え、ハイレベルプログラミング言語の原始コードを対応するアクティビティダイアグラムに自動的に転換し、以下のステップを含み、
(A)一行のハイレベルプログラミング言語の原始コードを読取り、すべての原始コードの読み取りが完成したとき、完全なアクティビティダイアグラムを出力し、
(B)該読み取った原始コードがステイトメント指令でない時には、非ステイトメント指令を対応するサブグラフに転換し、ステップ(A)を再執行し、
(C)該読み取った原始コードがステイトメント指令である時、しかも該ステイトメント指令中の前方にステイトメント式がある時には、該ステイトメント式をサブグラフに転換し、
(D)選択ノードを生じ、
(E)2個のカーブポイントを生じ、該2個のカーブポイントは該選択ノードに接続し、
(F)ステイトメント式を対応するサブグラフに転換し、
(G)併合ノードを生じ、サブグラフを併合し、
(H)該ステイトメント式は転換後に生じたサブグラフを経由し、右カーブポイントに接続し、
(I)該ステイトメント式は転換後に生じたサブグラフを経由し、併合ノードに接続し、
(J)サブグラフに転換していない指令がないかどうかを判断し、もしあるならステップ(A)を再執行し、ないなら完全なEADを出力することを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法としている。
請求項2の発明は、請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記ハイレベルプログラミング言語はJava(登録商標)、C、C++プログラム言語を含むことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法としている。
請求項3の発明は、請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記アクティビティダイアグラムはUMLプログラム言語中に定義するエクステンディッドアクティビティダイアグラム(Extended activity diagram)で、一種の過程制御図を表すことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法としている。
請求項4の発明は、請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記アクティビティダイアグラムはスタート、終了、カーブポイント、マイクロオペレーション、分岐、連結、選択、併合の8種のノードを含むことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法としている。
請求項5の発明は、請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記Java(登録商標)CCはJDK1.5を使用することを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法としている。
請求項6の発明は、請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記ステイトメント指令はfor、while、do、if、switch指令を含むことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法としている。
【発明の効果】
【0009】
主にハイレベルプログラミング言語(Java(登録商標)、C、C++など) をハードウエア記述言語に転換する時には、該ハイレベルプログラミング言語により書かれたプログラムの原始コードを先ずアクティビティダイアグラムに転換しなければならない。本発明のコンパイラ(compiler)は新しい転換規則を追加し、UMLプログラム言語中のアクティビティダイアグラム規格を修正し、プログラムの原始コードを対応するアクティビティダイアグラムに転換する。こうして視覚化方式により原始コードのプログラムロジックと執行過程を表現する。本発明はハイレベルプログラミング言語を統一したフォーマットに転換し表示し、同時にアクティビティダイアグラムは後続のハードウエア記述言語に転換する時に必要となる模擬と需要に有利となる。
【発明を実施するための最良の形態】
【0010】
公知方法はハイレベルプログラミング言語をハードウエア記述言語に直接転換することができないため、使用者がハイレベルプログラミング言語(Java(登録商標)、C、C++など)をハードウエア記述言語(VHDLなど)に転換する時には、先ずハイレベルプログラミング言語をアクティビティダイアグラム(Activity Diagram,ADと略称)と呼ばれる中間フォーマットに転換する。ADは一種の過程の記述図である。図1に示すように、UML(Unified Modeling Language,UML)で定義するアクティビティダイアグラムは、Action state、fork、join、selectの5種のパーツ図を含む。本実施例ではあるプログラムが必要とする情報を保留するために、一部のアクティビティダイアグラムのパーツを修正する必要があり、使用するアクティビティダイアグラムはエクステンディッドアクティビティダイアグラム(Extended activity diagram,EADと略称)と呼ばれる。
【0011】
次に図2に示すように、EADはハイレベルプログラミング言語の原始コードを対応する過程に転換する制御図である。それは複数のノード(node)により組成され、異なるノードが組合わさり構成されるサブグラフ(sub−graph)により、各サブグラフ中にはそれぞれ開始、執行、終了の3部分を含む。本実施例中においては、多種の異なるノードを定義している、以下に各種ノードについて説明する。
1. 開始(start)ノード: アクティビティダイアグラムのスタート。
2. 終了(end)ノード: アクティビティダイアグラムの終了。
3. カーブ点(curve point)ノード:方向性を持つ2本の連接線(edge)が連接され、実際には執行されていない影響に対して、通常は便利な転換過程の一時的用途として用いられる。
4. マイクロオペレーション(micro−operation)ノード:あるステイトメント(expression statement)或いは表示法(expression)の処理を表示。
5. 分岐(fork)ノード:平行執行。
6. 連結(join)ノード:すべてのマイクロオペレーションが到達した時だけに出力される信号を発信する。
7. 選択(select)ノード:デコーダ後、適当な出力信号を選択、発信する。
8. 併合(Merge)ノード:入力信号を併合後に出力する。
【0012】
上記各ノードを1物件と見なすと、該物件中においては2種の資料形態を記録し、自己ノード(In−Node)及び自己がその他の接続するノード(Out−Node)への接続を表す。そのノード形態は言語に応じて変る。各段の言語を解析する時にはすべて対応するサブグラフを生じ、該サブグラフのIn−Node及びOut−Nodeを記録し、他のサブグラフを接続、使用する。この接続方式により、各段の言語中のサブグラフの発生は同一の方式を使用する。各サブグラフを相互に接続した後は、プログラム原始コードを対応するアクティビティダイアグラムに転換することができ、視覚化方式で原始コードのプログラムロジックと執行過程を表示することができる。
【0013】
本発明において、完全なEADは複数のサブグラフにより組成する。その内、第一サブグラフはクラス(class)情報を記載し、クラスサブグラフと呼ばれる。他の各サブグラフはすべてある方法(method)に対応する。サブグラフの各部分はすべて各種異なるノードにより組成される。該クラスサブグラフ中においてスタートの部分はスタートノード(start mode)により表示され、このノードはクラススタートノード(class start mode)と呼ばれる。クラススタートノード中には各種ラベル(label)を含む。以下にサブグラフの各符号について説明する。
●C=className,modifier:
Cはクラスを表し、このクラスの名前とその修飾子(modifier)を説明する。修飾子は数字で、以下に詳述する。
0x0001: PUBLIC;
0x0010: FINAL;
0x0400: ABSTRACT;
0x0800: STRICT;
●G=type,size,variableName:
Gは全域変数(global Variable)を表し、形態(type)、サイズ(size)、変数名称(variableName)を説明する。形態とサイズの定義はJava(登録商標)と同一である。
●M=methodName,modifier:
Mは方法(method)を表し、方法の名称とその修飾子(modifier)を説明する。修飾子は数字で、以下に詳述する。
0x0001:PUBLIC; 0x0002: PRIVATE;
0x0004: PROTECTED; 0x0008: STATIC;
0x0010: FINAL; 0x0020: SYNCHRONIZED;
0x0100: NATIVE; 0x0400: ABSTRACT;
0x0800: STRICT;
【0014】
本実施例においてクラスサブグラフ中の執行部分は左右に分かれる。左はクラス変数(class variable)部分で、右は物件変数(instance variable)部分である。開始部分とクラス変数部分及び物件変数部分間にはそれぞれ方向性の連接線(edge)連接がある。その矢印は開始部分からそれぞれクラス変数部分及び物件変数部分に向かう。この2方向性連接線においてはそれぞれ“class”及び“instance”の文字があり、連接線ラベル(edge label)と呼ばれる。
【0015】
クラス変数部分及び物件変数部分は第一ノードが開始ノードである他、他はマイクロオペレーションノードである。各ノード間はみな方向性を持つ連接線により連接される。矢印の方向はすべて上から下である。クラス変数部分の開始ノードの内容は“m=sinit,0”で、物件変数部分の開始ノード内容は“m=init,0”である。クラス変数部分及び物件変数部分のマイクロオペレーションノードの内容はすべて初期値の宣告である。クラス変数部分及び物件変数部分の終了部分はすべて終了ノードにより表示され、その内容はそれぞれ“return VOID sinit”及び“return VOID init”である。
【0016】
方法サブグラフのスタート部分も開始ノードにより表され、数個のラベルを含む。その説明は以下の通りである。
●M=methodName,modifier:
Mは方法(method)を表し、方法の名称とその修飾子(modifier)を説明する。修飾子は数字で、以下に詳述する。
0x0001: PUBLIC; 0x0002: PRIVATE;
0x0004: PROTECTED; 0x0008: STATIC;
0x0010: FINAL; 0x0020: SYNCHRONIZED;
0x0100: NATIVE; 0x0400: ABSTRACT;
0x0800: STRICT;
●R=type,size,retmethodName:
Rはこの方法のリターン情報を表し、リターンの形態とサイズを説明する。ここの形態とサイズはJava(登録商標)と同一である。
●P=type,size,variableName:
Pは伝送されたパラメーター(parameter)を表し、該パラメーターの形態(type)、サイズ(size)、変数名称(variableName)を説明する。ここでの形態とサイズの定義はJava(登録商標)と同一である。
●L=type,size,variableName:
Lは区域変数(local variable)を表し、該区域変数の形態(type)、サイズ(size)、変数名称(variableName)を説明する。ここでの形態とサイズの定義はJava(登録商標)と同一である。
上記は本発明中に使用するすべてのサブグラフの図形規格の紹介である。
【0017】
続いて図3に示すように、本実施例中ではJava(登録商標)プログラム言語を例とする。Java(登録商標)プログラム実作をEADに転換する。Java(登録商標)CC(Java(登録商標) Compiler Compiler,、以下Java(登録商標)CCと略称)を利用し定義するJava(登録商標)標準語法規格を基礎JDK(Java(登録商標) Development Kit 1.5)で、Java(登録商標)CCのgrammar file中に一段のJava(登録商標)プログラムを加え、修正済みのJava(登録商標)語法ファイル(サブファイル名がjjであるファイル)を生じる。Java(登録商標)CCはこのJava(登録商標)プログラムに基づき、Java(登録商標)解析器(Java(登録商標) Parser)クラスとJava(登録商標) Parserが使用を必要とするその他のクラスを生じる。該生じたJava(登録商標) ParserクラスはJava(登録商標)原始コードから対応するEADの機能への転換を提供することができる。本実施例中では、Java(登録商標) Parserクラスはコンピュータ補助回路設計ソフトウエア中に統合することができ、これによりソフトウエアはJava(登録商標)原始コードをEADに転換する機能を具える。さらに、完全なJava(登録商標)原始コードはJava(登録商標) Parser中に伝送され、Java(登録商標) Parserはプログラム中の異なるtokenに応じて、語法ファイル中に新たに生じたEADの指令に対応する。続いて、該EAD図形を転換する。
【0018】
Java(登録商標)プログラムのtoken形態は非常に多いため、以下にいくつかの代表的なステイトメント指令(statement instruction)、条件表現式(condition expression)、ステイトメント式(statement)の転換過程と規則について説明を行う。
本実施例中では、ステイトメント指令は含むfor、while、do、if、switchなどの形態を含む。以下にステイトメント指令を例にJava(登録商標)プログラムをEADに転換する転換過程と規則について説明を行う。
【0019】
実例1 For Statementの転換:
その語法は以下の通りである(図4を合わせて参照のこと)。
for ([ForInit( )]; [Expression( )]; [ForUpdate( )]) Statement( )
ここにおいてJava(登録商標)原始コードについて以下に説明を行う。
【表1】
上記Java(登録商標)原始コードの転換過程は以下の通りである。
ステップ1:“for”及び“(”を解析する。
ステップ2:(For Init())を解析し、図1が表すノードを描き出し、In−Node及びOut−Nodeを設定し接続する。
ステップ3:“;”を解析する。
ステップ4:(Expression())を解析し、増えたJava(登録商標)プログラムprocess Condition Expression()を執行し、Decode Node(D)を生じる。またDecodeノード下方の接線とその上のエッジラベル(edge label)を生じる。
図2が表すサブグラフ(ノードの集合)を完全に描き出し、In−Node及びOut−Nodeを設定する。
ステップ5: “;”を解析する。
ステップ6:(ForUpdate)を解析し、図3が表すノードを描き出し、該ノードのOut−Nodeを得る。
ステップ7:“)”を解析する。
ステップ8:Statement()を解析し、図4が表すノードを描き出す。
ステップ9:図2サブグラフが表すexpression()のOut−Node及び図3のIn−Nodeを接続する。
ステップ10:図9に示すように併合ノードを生じる。
ステップ11: Statement()のOut−Nodeから併合ノードのIn−Nodeまで接続する。
ステップ12: 併合ノードのIn−Node及びOut−Nodeの線を接続する。
上記ステップにより、Java(登録商標)原始コード中のFor StatementをEADに転換する実際の過程を説明する。
【0020】
実例2 While Statementの転換:
その語法は以下の通りである。
while (Expression( ) )Statement( )
ここにおいてJava(登録商標)原始コードの転換説明は以下の通りである。
【表2】
転換の転換過程は以下の通りである。合わせて図5を参照のこと。
ステップ1:“while”及び“(”を解析する。
ステップ2:Expression()を解析し、図1を生じ、該サブグラフのOut−Nodeを得る。
ステップ3:新たに増えたJava(登録商標)プログラムProcess Condition Expression()を執行し、Decode Node(D)を生じる。並びにDecodeノード下方の接線及びその上のエッジラベル(edge label)を生じ、図2が表すサブグラフ(ノードの集合)を完全に描き出し、In−Node及びOut−Nodeを設定する。
ステップ4:図2(Expression())のOut−Node及び図1(Statement())のIn−Nodeを接続する。
ステップ5:図3に示すように併合ノードを生じる。
ステップ6:図1(Statement())のOut−Nodeから併合ノードまで接続する。
ステップ7: 併合ノードのIn−Node及びOut−Nodeの線を接続する。
上記ステップにより、Java(登録商標)原始コード中のWhile StatementをEADに転換する実際の過程を説明する。
【0021】
実例3 Do Statementの転換:
その語法は以下の通りである。
do Statement( ) while (Expression( ) );
ここにおいてJava(登録商標)原始コードについて以下に説明を行う。
【表3】
転換の転換過程は以下の通りである。合わせて図6を参照のこと。
ステップ1:“do”を解析する。
ステップ2: Statement()を解析し、図1を生じ、そのOut−Nodeを得る。
ステップ3:“while”及び“(”を解析する。
ステップ4: 新たに増えたJava(登録商標)プログラムProcess Condition Expression()を執行し、Decode Node(D)を生じる。並びにDecodeノード下方の接線及びその上のエッジラベル(edge label)を生じ、図2が表すサブグラフ(ノードの集合)を完全に描き出し、In−Node及びOut−Nodeを設定する。
ステップ5:“)”及び“;”を解析する。
ステップ6:図1(Expression())のOut−Node及び図2(Statement())のIn−Nodeを接続する。
ステップ7:図3に示すように併合ノードを生じる。
ステップ8:図2(Statement())のOut−Nodeから併合ノードまで接続する。
ステップ9: 併合ノードのIn−Node及びOut−Nodeの線を接続する。
上記ステップにより、Java(登録商標)原始コード中のDo StatementをEADに転換する実際の過程を説明する。
【0022】
実例4 If Statementの転換:
その語法は以下の通りである。
if (Expression( ) )Statement( ) [ else Statement( ) ]
ここにおいてJava(登録商標)原始コードについて以下に説明を行う。
if (a<0) {
b= −a;
} else {
b= a;
}
転換の転換過程は以下の通りである。合わせて図7を参照のこと。
ステップ1:“if”及び“(”を解析する。
ステップ2:expression()を解析し、新たに増えたJava(登録商標)プログラムProcess Condition Expression()を執行し、Decode Node(D)を生じる。並びにDecodeノード下方の接線及びその上のエッジラベル(edge label)を生じ、図1が表すサブグラフ(ノードの集合)を完全に描き出し、In−Node及びOut−Nodeを設定する。
ステップ3:“(”を解析する。
ステップ4:statement()を解析し、図2を生じ、該サブグラフのIn−Nodeを得る。
ステップ5:“else”を解析する。
ステップ6:else statement()を解析し、図3を生じ、該サブグラフのIn−Nodeを得る。
ステップ7:図1(Expression())のOut−Node1から図2(statement())のIn−Nodeまで接続する。
ステップ8:図1(Expression())のOut−Node 0から図3(else statement())のIn−Nodeまで接続する。
ステップ9:図4に示すように併合ノードを生じる。
ステップ10:図2(statement())のOut−Nodeから併合ノードまで接続する。
上記ステップにより、Java(登録商標)原始コード中のIf StatementをEADに転換する実際の過程を説明する。
【0023】
実例5 Switch Statementの転換:
その語法は以下の通りである。
switch(Expression( ) ) {
←( SwitchLabel( ) ( BlockStatement( ) )* )* }
SwitchLabel( ) {case Expression( ) : default : }
ここにおいてJava(登録商標)原始コードについて以下に説明を行う。
【表4】
転換の転換過程は以下の通りである。合わせて図8を参照のこと。
ステップ1:“switch”及び“(”を解析する。
ステップ2: Expression()を解析し、該変数を保存する。
ステップ3:“(”及び“{”を解析する。
ステップ4:SwitchLabel()を解析し、Case expressionと前のExpressionの変数を結合し、図1を生じる。その内、Decode Node(D)、連接線及びエッジラベル(edge label)を含み、並びに2個のOut−Nodeである、Out−Node 0及びOut−Node 1を設定する。
ステップ5:BlockStatement()を解析し、図2のような図を描き出し、Out−Node 0を該サブグラフのOut−Nodeとする。
ステップ6: ステップ4、5のようにその他のSwitchLabel()を解析し、但し2回目以降は判断を加え、図3、4、5のように併合ノードの判断を生じる。
ステップ7: 併合ノードを生じ、図6のようにその他のOut−Nodeを接続する。
上記ステップにより、Java(登録商標)原始コード中のSwitch StatementをEADに転換する実際の過程を説明する。
【0024】
本発明中でJava(登録商標)プログラムの原始コードをEADに転換する過程は、上記説明により明らかなように、原始コードの差異に応じて転換の過程も異なる。
【0025】
そのため、本発明が提出する完全な転換過程は、図9に示すように、原始コード自動的に対応するアクティビティダイアグラムに転換する時には、先ず一行のハイレベルプログラミング言語の原始コードを読み取る(ステップS501)。
続いて原始コードの形態がステイトメント指令であるかどうかを判断する(ステップS502)。本実施例中では、ステイトメント指令はfor、while、do、if、switch指令を含む。
原始コードの形態が上記ステイトメント指令中のどの指令でもない時には、該非ステイトメント指令を直接対応するサブグラフに転換する(ステップS503)。
さらに再び一行のハイレベルプログラミング言語の原始コードを読み取る(ステップS501)。
【0026】
ステップS502中において判断された原始コードがステイトメント指令である時には、条件表現式の前方にステイトメント式(statement)がないかどうかを再び判断する必要がある(ステップS504)。もし、ステイトメント式(statement)が条件表現式の前方にあるなら、先ずステイトメント式(statement)を対応するサブグラフに転換する(ステップS505)。
【0027】
もし、ステイトメント式(statement)が条件表現式の前方にないなら(statement instruction)、直接選択ノード(select node)を生じる(ステップS506)。
続いて、2個のカーブポイント(curve point)を生じ、該2個のカーブポイントは選択ノード(select node)に接続する(ステップS507)。
さらに、ステイトメント式(statement)を対応するサブグラフに転換する(ステップS508)。
その後、併合ノードを生じ、サブグラフを併合する(ステップS509)。
さらに該ステイトメント式を転換後に生じるサブグラフを経由し、右カーブポイントに接続し(ステップS510)、該ステイトメント式を転換後に生じるサブグラフを経由し、併合ノードに接続する(ステップS511)。
最後に、指令がサブグラフに転換されていないかどうかを再び判断する(ステップS512)。
もし転換されているなら、ステップS501に戻り、次の一行のハイレベルプログラミング言語の原始コードを読取り、もし転換を必要とする指令がないなら、完全なEADを出力する(ステップS513)。
【0028】
本発明は完全に、Java(登録商標)プログラム言語を対応するEADに転換し、視覚化の方式により原始コードのプログラムロジックと執行過程を表現することができる。図10に示すように、If StatementとWhile Statementが書く累加プログラムを利用し、上記転換過程と規則により、対応するEADに転換することができる(図11参照)。
この他、同一のプログラムは上記の転換過程と規則に基づき、対応するEADに転換することができる。Java(登録商標)プログラム語法の差異により、生じるEADも異なる。
【0029】
上記のように、本発明はハイレベルプログラミング言語をアクティビティダイアグラムに自動的に転換する方法はコンパイラ(compiler)を利用し転換規則を加え、多種の異なるハイレベルプログラミング言語(Java(登録商標)、C、C++など)の原始コードを自動的に対応するアクティビティダイアグラム(EAD)に転換し、視覚化の方式により原始コードのプログラムロジックと執行過程を表現する。この中間フォーマットにより、多種の異なるプログラム言語は統一したフォーマットにより表示され、後続のハードウエア言語への模擬及び転換の必要に有利である。
【図面の簡単な説明】
【0030】
【図1】UML中で定義するアクティビティダイアグラム(activity diagram)である。
【図2】本実施例で定義するEAD(Extended activity diagram)である。
【図3】本実施例のJava(登録商標)原始コードからEADへの転換の実際の過程である。
【図4】本実施例のFor StatementがEADに転換する実際の過程である。
【図5】本実施例のWhile StatementがEADに転換する実際の過程である。
【図6】本実施例のDo StatementがEADに転換する実際の過程である。
【図7】本実施例のIf StatementがEADに転換する実際の過程である。
【図8】本実施例のSwitch StatementがEADに転換する実際の過程である。
【図9】本実施例のハイレベルプログラミング言語をサブグラフに自動的に転換する方法の実際の過程である。
【図10】本実施例のJava(登録商標)プログラムである。
【図11】本実施例のJava(登録商標)プログラム及びそれが対応するEADである。
【符号の説明】
【0031】
S501〜S513 ステップ
【特許請求の範囲】
【請求項1】
主にコンパイラにより転換規則を加え、ハイレベルプログラミング言語の原始コードを対応するアクティビティダイアグラムに自動的に転換し、以下のステップを含み、
(A)一行のハイレベルプログラミング言語の原始コードを読取り、すべての原始コードの読み取りが完成したとき、完全なアクティビティダイアグラムを出力し、
(B)該読み取った原始コードがステイトメント指令でない時には、非ステイトメント指令を対応するサブグラフに転換し、ステップ(A)を再執行し、
(C)該読み取った原始コードがステイトメント指令である時、しかも該ステイトメント指令中の前方にステイトメント式がある時には、該ステイトメント式をサブグラフに転換し、
(D)選択ノードを生じ、
(E)2個のカーブポイントを生じ、該2個のカーブポイントは該選択ノードに接続し、
(F)ステイトメント式を対応するサブグラフに転換し、
(G)併合ノードを生じ、サブグラフを併合し、
(H)該ステイトメント式は転換後に生じたサブグラフを経由し、右カーブポイントに接続し、
(I)該ステイトメント式は転換後に生じたサブグラフを経由し、併合ノードに接続し、
(J)サブグラフに転換していない指令がないかどうかを判断し、もしあるならステップ(A)を再執行し、ないなら完全なEADを出力することを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法。
【請求項2】
請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記ハイレベルプログラミング言語はJava(登録商標)、C、C++プログラム言語を含むことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法。
【請求項3】
請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記アクティビティダイアグラムはUMLプログラム言語中に定義するエクステンディッドアクティビティダイアグラム(Extended activity diagram)で、一種の過程制御図を表すことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法。
【請求項4】
請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記アクティビティダイアグラムはスタート、終了、カーブポイント、マイクロオペレーション、分岐、連結、選択、併合の8種のノードを含むことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法。
【請求項5】
請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記Java(登録商標)CCはJDK1.5を使用することを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法。
【請求項6】
請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記ステイトメント指令はfor、while、do、if、switch指令を含むことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法。
【請求項1】
主にコンパイラにより転換規則を加え、ハイレベルプログラミング言語の原始コードを対応するアクティビティダイアグラムに自動的に転換し、以下のステップを含み、
(A)一行のハイレベルプログラミング言語の原始コードを読取り、すべての原始コードの読み取りが完成したとき、完全なアクティビティダイアグラムを出力し、
(B)該読み取った原始コードがステイトメント指令でない時には、非ステイトメント指令を対応するサブグラフに転換し、ステップ(A)を再執行し、
(C)該読み取った原始コードがステイトメント指令である時、しかも該ステイトメント指令中の前方にステイトメント式がある時には、該ステイトメント式をサブグラフに転換し、
(D)選択ノードを生じ、
(E)2個のカーブポイントを生じ、該2個のカーブポイントは該選択ノードに接続し、
(F)ステイトメント式を対応するサブグラフに転換し、
(G)併合ノードを生じ、サブグラフを併合し、
(H)該ステイトメント式は転換後に生じたサブグラフを経由し、右カーブポイントに接続し、
(I)該ステイトメント式は転換後に生じたサブグラフを経由し、併合ノードに接続し、
(J)サブグラフに転換していない指令がないかどうかを判断し、もしあるならステップ(A)を再執行し、ないなら完全なEADを出力することを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法。
【請求項2】
請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記ハイレベルプログラミング言語はJava(登録商標)、C、C++プログラム言語を含むことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法。
【請求項3】
請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記アクティビティダイアグラムはUMLプログラム言語中に定義するエクステンディッドアクティビティダイアグラム(Extended activity diagram)で、一種の過程制御図を表すことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法。
【請求項4】
請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記アクティビティダイアグラムはスタート、終了、カーブポイント、マイクロオペレーション、分岐、連結、選択、併合の8種のノードを含むことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法。
【請求項5】
請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記Java(登録商標)CCはJDK1.5を使用することを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法。
【請求項6】
請求項1記載のハイレベルプログラミング言語を自動的EADに転換する方法において、前記ステイトメント指令はfor、while、do、if、switch指令を含むことを特徴とするハイレベルプログラミング言語を自動的EADに転換する方法。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【公開番号】特開2007−183897(P2007−183897A)
【公開日】平成19年7月19日(2007.7.19)
【国際特許分類】
【出願番号】特願2006−65737(P2006−65737)
【出願日】平成18年3月10日(2006.3.10)
【出願人】(396008783)大同股▲ふん▼有限公司 (76)
【Fターム(参考)】
【公開日】平成19年7月19日(2007.7.19)
【国際特許分類】
【出願日】平成18年3月10日(2006.3.10)
【出願人】(396008783)大同股▲ふん▼有限公司 (76)
【Fターム(参考)】
[ Back to top ]