goo blog サービス終了のお知らせ 

片目猫Tools

プログラマ片目猫の送る便利ツール集

Doxygenを解析する。疑問編

2008-01-27 21:56:29 | Weblog
Doxygenは、Graphvizというツールと連携して、クラス図などの画像を生成します。

どんな情報が受け渡されているのか、ちょっと興味があります。
もしかしたら、この情報から、ソースコードの解析ができるかもしれません。

Graphvizは、入力として描画する画像の情報をテキスト形式で受け取ります。
ということは、Doxygenは、きっとソースコードの解析結果からこの情報ファイルを
生成してGraphvizのコマンド引数として呼び出しているのでしょう。

ところが、Doxygenのoutputには、それらしいファイルが存在しません。
唯一graph_legent.dotというファイルがあるだけです。

これはどういうことか?
おそらく、Doxygenは生成したGraphviz用入力ファイルを不要になった段階で
削除しているのでしょう。

全く余計なおせっかいです。

次回は、この削除されているファイルを取り出す方法について書きます。

よく使うツール紹介

2008-01-26 10:43:05 | Weblog
たまには、片目猫が使っているツールを紹介します。

これらのツールは、片目猫のようないい加減な人間が作ったものとは違い、
天才様たちの作られた超優良ツールです。しかもフリーです。
ソースコードが公開されているものもあります。
素晴らしすぎです。

・Active Perl
 Perl実行環境。
・Doxygen
 ソースコードからドキュメント生成
・かぞえチャオ!&ここみチャオ!
 ステップカウンタ。クラスに対応している。
・Visual Studio 2005 C++ Express Edition
フリーのコンパイラ
・Virtual PC
フリーの仮想PC
・httpd
Webサーバ

Webツール系では、
・Remember the milk
・GMail

といった感じです。
他にもありますが、気がついたら追記します。



Perlがすきだ!

2008-01-23 05:37:06 | Weblog
片目猫のToolを見ていただければ分ると思いますが、ムダが多くムリヤリ感のあるコードです。同じことをやるのに、書き方が統一されていなくて混乱するところもあるかもしれません。

Perlが好きと言っている割には、クラスとか使えないし、言語仕様に詳しいわけでもありません。

でも、いい加減に書いても何となくできちゃうのがPerlの良いところでしょう?(暴言)

ツールを書くときは、基本的に、処理速度などは一切考えず、とにかく結果を得られることだけを考えています。商品として世に出るわけじゃありませんしね。

正規表現の組み合わせで目的の文書整形をしている時など、パズルを解いているようで。
記述形式はC言語などに似てますが、全くの別言語なんですよね。

普段ヒープ消費がどうだの、処理速度がこうだの考えている人間にとっては、とっても癒される言語です。

関数分析の入力と結果

2008-01-23 03:52:53 | Weblog
○ana_func.plへの入力ファイル

#include <stdio.h>

void func1(void);
int func2 ();
double func3(int i);
char* func4(char* str,int j);
char * func5(char * str);
char * func6(char *str );
void func7(int *i,
char j,
const int k);


○出力結果

戻り値:void
関数名:func1
引数なし

戻り値:int
関数名:func2
引数なし

戻り値:double
関数名:func3
引数型:int、引数名:i

戻り値:char*
関数名:func4
引数型:char*、引数名:str
引数型:int、引数名:j

戻り値:char*
関数名:func5
引数型:char*、引数名:str

戻り値:char*
関数名:func6
引数型:char*、引数名:str

戻り値:void
関数名:func7
引数型:int*、引数名:i
引数型:char、引数名:j
引数型:const int、引数名:k

無償UMLツールを考える。

2008-01-22 00:53:25 | Weblog
無償UMLモデリングツールについて、ちょっと書きたいと思います。

片目猫もいくつもあるツールを片端からためしてみました。
最も有望だったのは、
・Jude Community
・ArgoUML
の2つです。

これらは無償であるにもかかわらず、複数言語でのソースコード生成ができ、
さらにJavaコード限定ですが、ソースコードを取り込み、クラス図とすることが
できます。

Javaであれば、全く申し分のないツールだと思います。

しかし、片目猫の関わっているプロジェクトはC++での開発です。
採用を見送った最大の原因は、
”ソースコードを修正した時に、いちいちクラス図を直すのがめんどくさい。”
というものでした。
そうするぐらいなら、クラス定義は手書きして、doxygenを使ってクラス図を
生成すればいい。ということです。
必ずクラス図を先に修正してソースコードに反映すればいいだけの話のような気もするのですが...

まあ、そんな環境でしたので、前回のclass_sceletonを作ることで
ヘッダファイルさえ修正すれば、クラス図もスケルトンも自動生成できる環境が
得られました。

しかし、コンパイラから統合開発環境から、何から何までフリーで揃ってしまう、
Javaの文化はちょっとうらやましいです。

sample.cpp(出力結果)

2008-01-21 21:28:43 | Weblog
#include "sample.h"

CTest::CTest()
{
	//## begin CTest::CTest


	//## end CTest::CTest
}
CTest::~CTest()
{
	//## begin CTest::~CTest


	//## end CTest::~CTest
}
void CTest::func1()
{
	//## begin CTest::func1


	//## end CTest::func1
}
int CTest::func2(int a,double b,char c)
{
	//## begin CTest::func2

	return 0;

	//## end CTest::func2
}
char* CTest::func31(char* b,float f)
{
	//## begin CTest::func31

	return NULL;

	//## end CTest::func31
}
char* CTest::func32(char* b,float f)
{
	//## begin CTest::func32

	return NULL;

	//## end CTest::func32
}
char* CTest::func33(char* b,float f)
{
	//## begin CTest::func33

	return NULL;

	//## end CTest::func33
}
char* CTest::func34(char** b,float f)
{
	//## begin CTest::func34

	return NULL;

	//## end CTest::func34
}
char** CTest::func35(char** b,float f)
{
	//## begin CTest::func35

	return NULL;

	//## end CTest::func35
}
CTest CTest::func4()
{
	//## begin CTest::func4

	CTest dummy;

	return dummy; 

	//## end CTest::func4
}
const int CTest::func5(int* p)
{
	//## begin CTest::func5

	return 0;

	//## end CTest::func5
}


CTestSub::CTestSub()
{
	//## begin CTestSub::CTestSub


	//## end CTestSub::CTestSub
}
CTestSub::~CTestSub()
{
	//## begin CTestSub::~CTestSub


	//## end CTestSub::~CTestSub
}
int CTestSub::func2(int a)
{
	//## begin CTestSub::func2

	return 0;

	//## end CTestSub::func2
}
char& CTestSub::func31(char* b,float f)
{
	//## begin CTestSub::func31

	char* dummy;

	return *dummy; 

	//## end CTestSub::func31
}
char& CTestSub::func32(char* b,float f)
{
	//## begin CTestSub::func32

	char* dummy;

	return *dummy; 

	//## end CTestSub::func32
}
char& CTestSub::func33(char* b,float f)
{
	//## begin CTestSub::func33

	char* dummy;

	return *dummy; 

	//## end CTestSub::func33
}
char& CTestSub::func34(char** b,float f)
{
	//## begin CTestSub::func34

	char* dummy;

	return *dummy; 

	//## end CTestSub::func34
}
const int CTestSub::func5(int* p)
{
	//## begin CTestSub::func5

	return 0;

	//## end CTestSub::func5
}

sample.h(入力となるクラスのヘッダファイル)

2008-01-21 21:27:55 | Weblog
#include <stdio.h>

/*
 * サンプルヘッダファイル。
 */

class CTest 
{
	public :
		CTest();			// コンストラクタ.
		virtual ~CTest();	// デストラクタ.
		void func1();
		static int func2(int a,
						 double b,
						 char c
						 );
		char * func31(char* b,float f);
		char* func32(char* b,float f);
		char *func33(char* b,float f);
		char * func34(char * * b,float f);
		char* * func35(char * * b,float f);
		CTest func4();
		virtual const int func5(int 	 * p);
	protected :
	private :
	/*
	 * 属性。
	 */
		int data;
		
};

class CTestSub : public CTest
{
	public :
		CTestSub();					// コンストラクタ.
		virtual ~CTestSub();		// デストラクタ.
		static int func2(int a);
		char&func31(char* b,float f);
		char& func32(char* b,float f);
		char &func33(char* b,float f);
		char & func34(char * * b,float f);
		virtual const int func5(int 	 * p);
	protected :
	private :
	/*
	 * 属性。
	 */
		int data;
		
};

片目猫Tools開店!

2008-01-21 20:37:55 | Weblog
片目猫Toolsを開店します!

片目猫が作成した便利ツール(おもにPerlスクリプト)とその解説、その他世迷言をつらつらと書いていこうかと思います。

よろしくお付き合いください。

(免責事項)
片目猫Toolsで公開しているソースコードはフリーです。
勝手に使ってください。
また、公開しているツールを使用しての、いかなる損害についても、当方は責任を負いかねますので、ご理解の上、ご利用ください。