2012-04-19 9 views
1

私のプログラムについて質問があります。私のプログラムは、JavaコードからUMLダイアグラムを作成することができるはずですが、どのように(ロード)Javaのキーワード、オブジェクトなどを取得する設計方法はわかりません注意:私はUML図を作成するために自動化されたプログラムを使用することはできません。それは私の論文です。ロードされたJavaコードからUML図を作成する方法は?

私の考えは、UMLダイアグラムに見られるJavaキーワードを使ってenumクラスを作成し、このenumですべてのロードされたコードをチェックすることでした。しかし、私は解決できないいくつかの問題、特にスペースがあります。次の問題は以下の通りである:

[space][space]public[space]class[space][space][space]SomeClass[space]{ 
[empty line] 
private int something; 
public BufferedReader br; 
private ArrayList<File> al; 
} 

このコードのコメント:

  • [スペース]コードで古典的なギャップを表す。例えば

    はIコードを持っています。

  • 私は構文上正しいため、ギャップを強調表示しました。
  • すべてのJavaクラスをBufferedReader、ArrayListなどのオブジェクトとしてロードするにはどうすればよいのでしょうか。

ありがとうございました。私はこの問題を解決するより良い方法があると思います。

答えて

1

Javaコードを解析するライブラリの使用について考える必要があります。確かに私はあなたに1つ言うことができなかった、1つのGoogleを試してみてください。

ここに私が従うアプローチがあります。 Eclipse Abstract Syntax Treeについて最初にこの記事を読んでください。 Eclipse ASTを使用すると、ツールをEclipseプラグインとして設計することになります。これをやりたくない場合は、ソースツリーを解析する方法のヒントを与えるでしょう。

+0

ありがとうございます。私はNetbeans IDEを使用します。 Eclipseに行くのが良いかどうかは分かりません。残念ながら、コードをコンパイルするのではなく、純粋なJavaファイルのみにすることができます。白い文字の後に解読するソリューションかもしれませんが、属性、クラスなどの名前をどのように見つけたのか分かりません。 – avalagne

+0

@avalagne:Netbeansは[同等のAPI]を提供しています(http://wiki.netbeans.org/Java_DevelopersGuide)。このソリューションはコンパイルされたコードを必要とせず、属性、クラスなどの名前を付けることになります。 – Kai

+0

はい、私はそれを読んだ。私が理解すれば、Javaコードを解析する何らかのASTに基づいています。ありがとうございました。私はそれがNetbeans TreeMakerでどのように動作するかを理解しようとします。 – avalagne

1

コンパイル済みのコードを使用することができればいいと思います。 javaでは、初期化せずにクラスをロードし、構造体をjava.lang.reflectで調べることができます。もちろん、例えばパラメータ名が欠けています。

詳細については、ASMのような別のクラス解析ライブラリがあります。

+0

残念ながら、それは純粋なJavaコードだけである可能性があります。 – avalagne

1

2つの以前の回答とあなたのコメントに、特にreを付け加えてください。 '純粋なJavaコード'。

私があなたの質問を正しく理解しているとすれば、まずJavaソースコード(テキストファイル)をいくつかのデータ構造に変換するだけです。そこから、データ構造のUML図を生成することができます。

これはかなり一般的なパターンだと仮定します。

ハンドライティング(@Joop Eggenにより示唆されるように)反射を利用して

  • (@ user714965により示唆されるように)テキストを解析
  • :データ構造にテキストを変換するための2つのアプローチは、一般的にあります。パーサーは簡単な事ではありません。 enumクラスの作成についてのあなたのコメントは、あなたが考えていることを示唆しています。しかし、手作業でコーディングされたパーサは、ほんの僅かの場合にのみ推奨されるソリューションです。アルゴリズムとテクニックの解析専用の理論と実践があります。私は本当にあなたのプロジェクトのためにそれに取り掛かりたいとは思っていません。

    文法定義からパーサを生成するのに、ほとんどの人がパーサージェネレータ(例えばantlr)を使用します。 javaの人気を考えると、antlrのための既存のJava文法があります。at least one私は '純粋なJavaコード'の制約が何を意味するのかはよく分かりません。 Antlrは純粋なJavaコードパーサを生成するので、大丈夫です。あなたが最初からすべてのコードを書く必要があるならば、パーサジェネレータを使用することができます。しかし、それは非常に奇妙な制約のようです...

    とにかく。あなたの他のオプションは反射を使用しています。実際にはJVM内のパーサーを使用して、&というクエリへのAPIアクセスを提供し、コード自体をナビゲートします。 java.lang.reflectも(明らかに)純粋なjavaです - あなたのコードもそれを呼び出すでしょう。

    Eclipse/Netbeans APIは、別の可能なルートを提供します。実際には、Javaコードを表す一連のデータ構造を提供する別の「パーサ」にすぎません。

    私はこれらの3つのアプローチの1つを手作業で書くのではなく、強くお勧めしたいと思います。

    それが役立つかどうかわかりません。おそらく、あなたは「純粋なJavaコード」制約をもう少し説明することができます。

+0

私は自分の仕事が何であるかをより詳しく説明しようとします。名前テーマは「Javaアプリケーションのソースコードの分析」です。作業の説明は次のとおりです。目標は、Javaの字句解析と構文解析です。このデータは、解析されてXMLファイルに格納されたUMLモデルプロジェクトを構築するために使用されます。また、1)ホスト言語アナライザの選択、2)スキャナ(語彙アナライザ)の構築、3)構文解析ツールの構築、4)XML形式での情報の保存、5)UMLグラフィカル分析されたプロジェクトの表現。 – avalagne

+0

これは私の仕事の説明です。正直言って、私はちょうど可能ならばそれを簡単にする方法を知らなかった。そこで私は白いサインの読みなど様々な解決法を考案しました。私の上司は残念なことに、学校に座りたいと思っていた古い紳士ですので、私が使うことができると私はうれしく思います。あなたが言及しなければならないすべてのオプションのうち、私はテキストを解析するのが一番好きですが、私は対処します。ありがとうございました! – avalagne

+0

hmm、ok。まあ、目標の1つがパーサーがどのように十分に公正に働くかを学ぶことであれば。もしそうなら、私はパーサー理論と実践についていくつかの読書をすることをお勧めします。利用できる良い本がたくさんあります。しかし、私は上司と二重チェックして、パーザを一から書くことを期待しています。パーサジェネレータを使用すると、おそらく、手書きのような字句解析のコンセプトについて多分(多分もっと)教えてくれるでしょう。がんばろう! – sfinnie

0

JavaCC(あなたのタスク1)のようなパーサージェネレータを選択するだけです。完成したJava文法を使用する(または独自の構文を作成する)。レクサー(2)を生成し、文法(3)にあなた自身のパーサーのものを書いてください。パーサからツリーを保存し、最初にXML/XMI表現を取得するように変更します。 5)あなたは実際に既存のツールを選択して、自分自身を書くことができます。

+0

助けてくれてありがとう。私が必要としたそのような大まかなドラフト...特定のJavaパーサーに関する経験はありますか? – avalagne

+0

JavaCCとantlrはどちらも本当に良いです。このスレッドを読む:http:// stackoverflow。com/questions/382211/whats-better-antlr-or-javacc、またはお気に入りの検索エンジンで両方の名前を検索して、それ以上のものを表示してください – Christian

+0

ありがとう、私はこのトピックを読んでいます。私はパーサーを探しています。パーサは、できるだけ早く学びます。私が読んだところから、JavaCCは簡単です。 – avalagne

関連する問題