読者です 読者をやめる 読者になる 読者になる

コメントの削除

scheme どう書く?org

ソースコードからコメント部分を削除するプログラム decomment を書いてください.
すくなくとも,decomment を記述したのと同じ言語で書かれているソースコード
扱えるようにしてください.

どう書く?org
(use file.util)

(define (main args)
  (dolist (sexp (file->sexp-list (cadr args)))
    (write sexp)
    (newline))
  0)

かな。SRFI 38の#n=/#n#があると書き出しが止まらなくなるけど、それについては柿さんのようにwrite/ssを使うなりすればいい。

readのおかげで簡単にこういうことができるのはまぁ便利ですね。ところで、これだとタブや改行、余分な空白が消えるだけでなく、リーダマクロが展開されてしまう。さらにひどいことに、SRFI 10の#,(hoge ...)を使ったファイルを読み込んだ場合にはエラーになってしまう*1


そんなわけで、お手軽にやるといろいろとボロが出てきちゃうんだけれど、じゃあ正攻法でまともにdecommentを作ろうとすると、それはそれで結構面倒臭そう。他の言語でも「文字列の中は別に処理しなくちゃ」などと言っているけど、Schemeではそれに加えてSRFI 30のブロックコメントやSRFI 62のS式コメントがあるのだから。

んー、なんかSRFIの話ばっかになった。が、まだ他にも問題になるものがあるかもしれない。

*1:これらはGaucheでしかチェックしていない。他の処理系でもお試しあれ。