出展:パーソナルソフトウェア技法 Watts S. Humphrey 著 ISBN4-320-02929-1

PSP課題 03A : クラス毎の LOCのカウント

前提条件

5章までと課題 02A

要求

C++ のプログラムファイルを読込み、名前ごとの関数の数と LOC 及びその合計を出力せよ。 名前とは、class struct union namespace を意味する。 無名の名前は none に、大域の名前は global にせよ。 LOC は、コメントと文字内と文字列内を除き、「;」と「{」と「#」と「:」の数とする。 但し、「##」と「::」はカウントしない。 ベースは 02A とせよ。 テンプレートクラスやテンプレート関数やメンバイニシャライザにもある程度対応せよ。

テスト

参考

Ruby のソース

PSP課題 修正03A : 単語への分解

03A は他の課題に比べて難易度が高いので、より簡単にした修正03A について説明する。

前提条件

03A と同じ。また、../Lib/getloc.cpp, ../Lib/getloc.h を利用すること。 void GetFuncLoc(const list<string>& lst,map<string, pair<int,int> >& mp) は、Ruby のソースのメインの while ループの処理を行っている。 string toString(const char* fnam,const map<string,pair<int,int> >& mp) は結果の文字列を得る。

要求

C++ のプログラムファイルを読込み、単語に分解し、リスト(list<string>)を作成せよ。 コメントは除くこと、文字や文字列は1つの単語とする。 GetFuncLoc と toString を用いて結果を出力せよ。
例:
#include <cstdio>
#include "../Lib/tree.h"
struct A : B {};
void C::D();
は、[#] [incluide] [<] [cstdio] [>] [#] [incluide] ["../Lib/tree.h"] [struct] [A] [:] [B] [{] [}] [;] [void] [C] [::] [D] [(] [)] [;] に 分解される。 ベースは 02A とせよ。

テスト

03A と同じ。