
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- Excel(エクセル) Excel(エクセル)でフィルター抽出後、非表示の行を計算しないで、合計を算出する方法 【内容】 添 4 2023/01/30 17:17
- X(旧Twitter) 個人Vtuberに関するちょっと怒りと悲しみの質問 4 2023/08/10 03:31
- Excel(エクセル) 関数を教えてください 2 2022/12/29 21:01
- 日本語 問題: A:トイレにだれ___いませんか。その2 1 2023/03/12 22:01
- メルカリ メルカリのコメント欄について 1 2022/12/30 00:10
- Excel(エクセル) Excelでの複数条件のカウントについて 1 2022/09/25 07:40
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- YouTube YouTubeのコメントに関して 1 2022/10/30 08:58
- その他(SNS・コミュニケーションサービス) とあるゲーム配信に参加しました。 その配信内では、そこそこの成績を残していましたが、私は配信にコメン 1 2023/05/05 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムの規模を表す単位「k...
-
ライン数とステップ数の違いに...
-
ステップ数??
-
VB6.0で #の意味
-
個人が特定の人に対して自分の...
-
サンプル文章が長文のタイプ練...
-
hdmiはパラレル?シリアル?
-
printf / sprintf のスタック消...
-
C言語 経路探索 経路リスト...
-
スタック領域変更
-
タッチタイピング練習ソフト
-
社内LANのネットワークトラフィ...
-
AUTO-MDIX機能の無効化
-
C言語・スタックを使用した逆...
-
VB.netでDLLを読み込んで実行す...
-
ブロック化因数(ブロッキング...
-
VC6でコンパイルでスタックの領...
-
TCPではなく、UDPが音声や動画...
-
リストを使った逆ポーランド記...
-
ubuntuで デイスク/deb/loopと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムの規模を表す単位「k...
-
ステップ数について
-
ライン数とステップ数の違いに...
-
ステップ数??
-
VB6.0で #の意味
-
ドット絵のようなやつを作るに...
-
STEPについて
-
ステップカウントツールが作成...
-
プログラムから追加したドロッ...
-
「ByRef引数の型が一致しません...
-
prologでNの階乗の逆関数を考...
-
等式を満たす数を求める
-
c言語プログラミングのプログラ...
-
再帰プログラムって・・・?
-
ステップ数によるスケジュール
-
すみません。 VBAについてで...
-
メガデモ、4kbの受賞作品 ...
-
URLの中の「?=○○」の意味は?
-
プログラムで 一番大きい を定...
-
Octaveでのオイラー法とルンゲ...
おすすめ情報