[#31787] MIME decoding — Tietew <tietew@...>

Tietew です。

24 messages 2001/10/08

[#31866] 先祖がえり — "T.Shirakawa" <niegh@...>

はじめまして つい最近、MLに登録した白川です。

20 messages 2001/10/14
[#31867] Re: 先祖がえり — Koji Arai <JCA02266@...> 2001/10/14

新井です。

[#31889] Ruby Conference — Minero Aoki <aamine@...>

あおきです。

31 messages 2001/10/16
[#31905] Re: Ruby Conference — matz@... (Yukihiro Matsumoto) 2001/10/17

まつもと ゆきひろです

[#31923] Re: Ruby Conference — TAKAHASHI Masayoshi <maki@...> 2001/10/17

高橋征義です。

[#31932] しぶらぐ — "KANEMITSU Masao" <masao-k@...> 2001/10/18

http://www.ne.jp/asahi/masao-k/home/newpage1.htm

[#31906] 数値の配列の一部を文字列にして、多重代入したい — みかみまさと <kofu@...>

こんにちは。みかみにございます。

9 messages 2001/10/17

[#32016] Re: コメント削除スクリプト — "Tatsuaki Nagai" <Tatsuaki_Nagai@...>

こんにちは。永井です。

15 messages 2001/10/24
[#32018] Re: コメント削除スクリプト — TASHIRO Katsuya <tashiro_katsuya@...> 2001/10/24

田代と申します.

[#32123] dRuby の DRbUndumped#_dump は? — FUJIMOTO Hisakuni <hisa@...>

こんにちは、藤本です。

21 messages 2001/10/30
[#32124] Re: dRuby の DRbUndumped#_dump は? — m_seki@... 2001/10/30

[#32126] Re: dRuby の DRbUndumped#_dump は? — shudo@... 2001/10/31

咳さん wrote:

[#32145] Test::Unit — MUTOH@...

むとうです。

20 messages 2001/10/31

[ruby-list:32030] Re: コメント削除スクリプト

From: nobu.nakada@...
Date: 2001-10-24 09:15:42 UTC
List: ruby-list #32030
なかだです。

At Wed, 24 Oct 2001 17:25:32 +0900,
Tatsuaki Nagai <Tatsuaki_Nagai@csg.kyocera.co.jp> wrote:
> 永井さん@知能.九工大 wrote
> >になって,ワンライナーにすると,
> >===============================================
> >ruby -e "print STDIN.read.gsub(/\/\/.*$/,'').gsub(/\/\*.*?\*\//m,'')" < Cのソ
> ースファイル
> >===============================================
> >ってことになりますね.
> 
> こうなってくると芸術の世界ですね。
> バッチコマンドとして用意しておくと便利かも。
> 
> 回答をたくさんもらいすぎて、消化できない状態になってきたので
> 家に帰って勉強してきます。

 真面目に処理するなら、/*...*/は空文字列ではなくスペースに置換
しなくてはいけません。完全に削除してしまうのはCの仕様としては非
常に古いです。また、文字列中の/*や*/も考慮が必要です。二種類作っ
てみましたが、最初の方がかなり速いです。


#!/usr/bin/ruby

def delete_comment(src)
  src.gsub(/\G([\'\"])(?>\\.|.)*?\1|(\/\*.*?\*\/)|(\/\/)[^\n]*?$/m) {
    if $2
      s = $2.delete("^\n")
      s = ' ' if s.empty?
      s
    elsif $3
      ''
    else
      $&
    end
  }
end

ARGV.each {|file|
  print delete_comment(open(file) {|f| f.read})
}

#!/usr/bin/ruby

STATES = {
  '\'' => [/\G('(?>\\.|.)*?')/, 	:quote],
  '"'  => [/\G("(?>\\.|.)*?")/,		:quote],
  '/*' => [%r'\G(?:/\*)?.*?\*/(\s+)?',	:comment],
  '//' => [%r'\G.*$'],
}
STATES.default = @state = [%r"\G(.*?)(?=(\"|'|/\*|//))"]

def delete_comment(src)
  idx = 0
  size = src.size
  str = ''
  while idx < size
    unless src.index(@state[0], idx)
      str << src[idx..-1] unless @state[1] == :comment
      break
    end
    idx = $~.end(0)
    @state = STATES[$2]
    if $1
      str << $1
    elsif @state[1] == :comment
      str.sub!(/\S\Z/, '\& ')
    end
  end
  str
end

ARGF.each {|l| puts delete_comment(l)}


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread

Prev Next