
C++言語で、読み込んだcppファイルのステップ数をカウントするツールを作成しているんですが、
複数行にまたがるブロックコメント行や、関数ごとのカウントなどがうまくいきません。
表示したいのは総ステップ、関数ごとの実ステップ、コメントステップ、その他(空白行や#include文など)です。
仕様はおおまかに以下になります。
・コメント行とはC/C++のコメントで、//で始まる行コメントと、
複数行にまたがる/*~*/ブロックコメントのどちらも認識する。
・非コメントとコメントが1行にある場合、その一文が関数内にある場合は
実ステップとしてカウントします。(a++ ;/* インクリメント */などの場合)
現在は"//"や"/*"や"*/"や"{"や"}"などの文字を検索し、それぞれが
見つかった場合ごとに処理を分けて考えていますが、関数の中に書かれているのか
そうでないのかや、ブロックコメントなのかなど、複雑な条件がからんでいるので
正直、どういうプログラムになるのかわからず、混乱している状況です。
どのように組んでいけばいいでしょうか。よろしくお願いいたします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
前回の問題(QNo.3575185)と同じですよね。
再質問するなら向こうを締めましょう。いずれにせよ、C++から始めるのは難しいので、まずはCに対応したものを作ってみましょう。Cなら小手先の方法で簡単に出来ます。
C++の場合、コメントも関数も入れ子になりますし、テンプレートのような非常に煩雑なものもあるので、まともに構文解析を行わないと無理です。国際文字名なんかもやっかいです。
例えば、
/*
// 入れ子のコメント
*/
int 日本語名の関数()
{
struct A {
int 入れ子の関数() { return 12345; }
};
static A a;
return a.入れ子の関数();
}
といったソースをどう扱えばよいのでしょうか?
ちなみに、「日本語名の関数」とか「入れ子の関数」というのもC++では正当な識別子です。
Cにしか対応しないツールを拡張してC++に対応させるのは困難ですが、そこで一旦経験を積むことが大事だと思います。
締めずに再質問してしまって、すみません。
あちらは締め切らせていただきました。
そうですね。
とりあえず簡単に考えられるところから考えをまとめていきたいと思います。
ありがとうございました。
No.1
- 回答日時:
こんにちは。
C言語のバイブルである、「プログラム言語C」に参考となるプログラムが出ています。
その後、「Cプログラム診断室(技術評論社:刊)」の末尾に、回答が出ています。
たぶん、行をカウントした後、パターンマッチプログラムを作ればよいはずですが、パターンマッチの条件をどのようにして保持して、それをカウントするのかは、人によって異なると思います。
do-while ループを用いて、switch-caseで処理する場合、if-thenで作成する場合などなど・・。
その辺りをきちんと整理してから、プログラムを組むと良いと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
C言語の関数のextern宣言
-
プログラマー達は何故、プログ...
-
C#でログファイルにファイルパ...
-
C言語 関数、変数の宣言について
-
visual studio 2022でのC#プロ...
-
C言語について(初心者)
-
プログラミングc++を全く分か...
-
あってる
-
DNCL(共テ用プログラミング言語...
-
DNCL(共テ用プログラミング言語...
-
C# で 数式文字列処理を処理す...
-
C言語のことです。写真(見にく...
-
C言語について。
-
大量のデータを読み込んで表示...
-
[C言語]fputsとfprintfの違い
-
ストリームについて。
-
VisualStudioでC++クラスを追加...
-
逆コンパイルと逆アセンブルの...
-
c言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムの規模を表す単位「k...
-
ステップ数について
-
ライン数とステップ数の違いに...
-
ステップ数??
-
STEPについて
-
VB6.0で #の意味
-
c言語プログラミングのプログラ...
-
「ByRef引数の型が一致しません...
-
ステップ数によるスケジュール
-
ステップカウントツールが作成...
-
海外リードメールの「NPA」とは?
-
三菱 PLC ラダープログラム
-
prologでNの階乗の逆関数を考...
-
ドット絵のようなやつを作るに...
-
メガデモ、4kbの受賞作品 ...
-
PythonのプログラムのDirに関す...
-
基本情報技術者の擬似言語プロ...
-
ubuntuで デイスク/deb/loopと...
-
パソコンでインターネット接続...
-
「下士官に告ぐ」って公の発表...
おすすめ情報