掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.29679

コメントの行数の取得
投稿者---jj(2007/02/01 16:42:02)


"/* */"を使ってコメントの行数を取得したいですが...
例え:"/*"と"*/"が一行にある、または
"/*a
g
a*/"の場合でも、うまくコメントの行数を取得できる方法を教えていただけますか?


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:コメントの行数の取得 29680 sticky-bit 2007/02/01 16:52:38


No.29680

Re:コメントの行数の取得
投稿者---sticky-bit(2007/02/01 16:52:38)


"/*"を見つけたらコメントモードに入り、
"*/"を見つけたらコメントモードから抜ける。
行数は、コメントモードに入っている間だけ、カウントする。

というようなロジックをベースにして、
・文字列の中に"/*"や"*/"を含む場合(たぶん、コメントとしてはカウントしない)
・1行の中に"/*"と"*/"の組が複数ある(たぶん、複数行としてはカウントしない)

のような例外についてうまく考えることができれば、
プログラムは完成すると思います。


この投稿にコメントする

削除パスワード

No.29682

Re:コメントの行数の取得
投稿者---たかぎ(2007/02/01 17:26:19)
http://takagi.in/


>"/*"を見つけたらコメントモードに入り、
>"*/"を見つけたらコメントモードから抜ける。
>行数は、コメントモードに入っている間だけ、カウントする。
>
>というようなロジックをベースにして、
>・文字列の中に"/*"や"*/"を含む場合(たぶん、コメントとしてはカウントしない)
>・1行の中に"/*"と"*/"の組が複数ある(たぶん、複数行としてはカウントしない)

基本的にはこの通りなのですが、もう少し工夫が必要です。

・多文字リテラルの可能性があるので、二重引用符に囲まれた文字列だけではなく、一重引用符に囲まれた文字リテラルも例外扱いする必要がある。
・シフトシーケンスに依存する文字コード(いわゆるJISコードなど)の場合には、後続バイトに * が来る場合があるので、単純に */ を探すだけでは済まない。

といったところです。



この投稿にコメントする

削除パスワード

No.29686

Re:コメントの行数の取得
投稿者---yoh2(2007/02/01 21:30:51)


ついでに、「/」と「*」の間に「\」 + 改行が入っているパターン、さらに「\」の
トライグラフ「??/」にも対応すれば完璧かも。

まあ、そんな解析が必要になるコードって、IOCCC(*)に出展するようなコードくらいでしょうけど。
* IOCCC -- The International Obfuscated C Code Contest (国際わけわからんCコードコンテスト)


この投稿にコメントする

削除パスワード

No.29690

Re:コメントの行数の取得
投稿者---たかぎ(2007/02/01 22:48:37)
http://takagi.in/


>ついでに、「/」と「*」の間に「\」 + 改行が入っているパターン、さらに「\」の
>トライグラフ「??/」にも対応すれば完璧かも。

論理行を数えるのであればそうですね。
あと、//で始まる行コメントが存在する場合もそうです。

// \
/* */

は、1論理行なので、/* */は行コメントの一部でしかない。



この投稿にコメントする

削除パスワード

No.29696

Re:ありがとうございます
投稿者---jj(2007/02/02 09:45:47)


ありがとうございます。




この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧