http://bit.ly/AdODvP のバグ修正版
http://bit.ly/AdODvP のバグ修正版
#encoding : sjis#Verilog HDLのラベルがないgenerate for文にラベルを付けるrequire 'fileutils'f = File.open(ARGV[0],"r")FileUtils.cp(f,File.new(ARGV[0]+".bak","w")) #バックアップ作成s = f.reads2 = s.dup#コメントを空白で置換s.gsub!(/\/\*.*?\*\//m){|match|" "*match.size}s.gsub!(%r{//.*}){|match|" "*match.size}label_idx = Array.new # ラベルを挿入する位置を保存i = 0endgen_idx = 0idx = 0while (idx = s.index(/(\s|\n|\t)generate(\s|\n|\t)/,endgen_idx)) #serch generateendgen_idx = s.index(/(\s|\n|\t)endgenerate(\s|\n|\t)/,idx) #serch endgeneratewhile (idx = s.index(/(\s|\n|\t)for(\s|\n|\t)/,idx)) #serch forif (idx>endgen_idx)breakendidx = s.index(/(\s|\n|\t)begin(\s|\n|\t)/,idx+4)+6 #serch begin#既にラベルが付いているかどうかチェックj = idx+1while s[j] =~ /(\s|\n|\t)/j += 1endif (s[j] != ':')label_idx[i] = idxi+=1endendendprint "Result >> Added "+i.to_s+" labels\n"#ラベルを挿入していく(label_idx.size - 1).downto(0){|i|s2.insert(label_idx[i]," : _label_"+i.to_s)}File.open(ARGV[0],"w").print(s2)