こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

C言語のソースからコメントを抜出し、テキストに出力

表題のプログラムを作成したいと考えています。
急ぎで作らないといけないため、教えていただけないでしょうか。

・環境
 Linux
・イメージ
 *.cppファイル(複数)から「//」「/*~*/」で書かれたコメントをコピーし、
 コピーしたコメントをテキストファイルに出力する。

お力を貸してください。
よろしくお願いいたします。

投稿日時 - 2012-09-20 13:06:06

QNo.7707695

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(4)

ANo.4

http://www.dab.hi-ho.ne.jp/sasa/biboroku/misc/comment.html
とか
http://emoken.net/blog2/item_498.html
とかを適当にいじれば出来るかと。

もっと適当で良いのなら、
コマンドラインで
grep -e '/\*.*\*/' -e '//.*$' *.cpp > log.txt

投稿日時 - 2012-09-21 10:32:52

ANo.3

GNU Cなどのプリプロセッサをベースにつくるのがいいんじゃないかなぁ。

投稿日時 - 2012-09-20 21:34:37

ANo.2

教えてくれと言われても、言われた方は
・#defineにコメントが含まれていたらどうしようか
・printfのテキスト部分にコメントではないがコメントのように見える部分が含まれていたらどうしようとか
・複数行にまたがるコメントもあるのかな
・ヘッダファイルにコメントが含まれているかもしれない
・ソースが不正でコメントの終了がない場合があるかも知れない
等々
色々と考えてしまうものです。

コメントがどのように書かれているかによってごく簡単だったり、とっても難しくなったりすると思います。

一番確実なやり方はC言語のコンパイラの構文解析に則ってコメントを抽出することだと思います。

投稿日時 - 2012-09-20 13:58:02

ANo.1

Wr5

コードまで書くつもりはありませんが……まぁ、どんな処理にすればいいのか…という提案程度なら。


1)コメントを出力するファイルをオープンする。(テキストモード・追記かな)
2)対象のソースファイルをテキストモードでオープンする。
3)コメント中判定のフラグ変数を用意し、非コメント中状態に設定する。(bool型でfalseとか)
4)ソースファイルを1行読み込む。読み込みする行がなくなったら8)へ。
5)読み込んだ行に"//"があるか検索する。
 コメント中判定フラグが偽であった場合は//以降をテキストファイルに書き出し、4)へ戻る。
 コメント中判定フラグが真だったらスルーして6-a)へ。
6-a)コメント中判定フラグが真なら読み込んだ行に"*/"があるか検索する。
 ない場合は1行丸ごとテキストファイルに書き出し。
 あった場合は"*/"の直後までテキストファイルに書き出してコメント中判定フラグを偽に設定。
 "*/"の直後から"/*"があるか検索して…6-b)の後半の処理を実施。
6-b)コメント中判定フラグが偽なら読み込んだ行に"/*"があるか検索する。
 ない場合は7)へ。
 あった場合は"/*"の直後から"*/"を検索。
 "*/"があった場合は、"/*"の直前から"*/"の直後までをテキストファイルに書き出し。"*/"の直後から"/*"を検索して同じような処理を。
 "*/"がない場合は、"/*"の直前から行の最後までをテキストファイルに書き出してコメント中判定フラグを真に設定。
7)4)へ戻る。
8)対象のソースファイルをクローズ。
9)次のソースファイルをテキストモードでオープンして3)へ
 オープンするソースファイルがない場合は10)へ
10)テキストファイルをクローズ。


ってな感じでしょうか。
1行に/*~*/のコメントが複数あった場合の処理とかいろいろ気をつけないとなりませんが。(6-aと6-bで軽く書いていたりはしますけどねぇ)

正規表現が使える言語使って処理した方が楽かも知れませんけどね……。

投稿日時 - 2012-09-20 13:47:32

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-