老古开发网首页
导航:老古开发网首页文章索引索引第2446页文章分类EDA/IC设计第23页→[(转)脚本来统计verilog代码的行数]
| -文章搜索 - 最新文章 - |

第2608篇:(转)脚本来统计verilog代码的行数

发布时间:2006年7月29日 点击次数:998
来源:   作者:
 
写的比较罗嗦,就当抛砖引玉了。


#!/bin/sh
# start tclsh  form  your PATH \
    exec tclsh "$0" "$@"

if {$argc == 0} {
    puts "Line counter"
    puts "Usage: $argv0 \[file ..\]"
    exit
}

#initial result array
set result(all,commentNum) 0
set result(all,codeNum)    0
set result(all,blankNum)   0
set fileNum                0

foreach thisFile $argv {   
    # if the file is not exist
    if {![file isfile $thisFile]} {
        puts "$thisFile is not a file, pls check."
        continue
    }

    # if the file can''t be read
    if {[catch {set fp [open $thisFile r]} errStr]} {
        puts stderr "\n$errStr\n"
        continue
    }

    set commentFlg 0 ;# flag for "\* *\" comment

    #initial line counter
    set commentNum 0 ;# comment line number
    set codeNum    0 ;# code line number
    set blankNum   0 ;# blank line or blank line number

    foreach line [split [read $fp] \n] {
        #puts $line
        switch -regexp -- $line {

            {^.*/\*.*\*/.*$} {
                # when meet */, finish comment
                set commentFlg 0

                # <code> /* comment */ <code>
                if {[regexp {^\s*/\*.*\*/\s*$} $line]} {
                    # /* comment */
                    incr commentNum
                } else {
                    # <code> /* comment */
                    # or
                    # /* comment */ <code>
                    incr codeNum
                }
            }

            {^.*/\*} {
                # meet /*
                set commentFlg 1

                if {[regexp {^\s*/\*} $line]} {
                    #    /* comment
                    incr commentNum
                } else {
                    # <code> /* comment
                    incr codeNum
                }
            }

            {^.*\*/} {
                # meet */
                set commentFlg 0

                if {[regexp {\*/\s*$} $line]} {
                    # */ \n
                    incr commentNum
                } else {
                    # */ <code>
                    incr codeNum
                }
            }

            {^[[:space:]]*$} {
                incr blankNum
            }
            
            {^\s*//} {
                # /s is same to [[:space:]]
                incr commentNum
            }
            default {
                if {$commentFlg} {
                    incr commentNum
                    continue
                } else {
                    incr codeNum
                }
            }
        }
    }
   
    close $fp

    puts "\n*********************************"
    puts $thisFile
    puts "code    line: $codeNum"
    puts "comment line: $commentNum"
    puts "blank   line: $blankNum"
    puts "*********************************"
    set result(all,commentNum) [expr $result(all,commentNum) + $commentNum]
    set result(all,codeNum)    [expr $result(all,codeNum) + $codeNum]
    set result(all,blankNum)   [expr $result(all,blankNum) + $blankNum]
    incr fileNum
}
puts "\n*********************************"
puts "total $fileNum files"
puts "code    line: $result(all,codeNum)"
puts "comment line: $result(all,commentNum)"
puts "blank   line: $result(all,blankNum)"
puts "*********************************\n"

转自edacn

欢迎进入老古论坛进行讨论
[EDA/IC设计] 相关文章:
IP核调试之SDRAM篇(2) 转载
简介:
但是作为初学者,我还是愿意勇 敢的说出自己的心得体会,希望对如我一样的初学者有所帮助。今天我将继续介 绍我的调试SDRAM之路。 时序仿真完成后,硬件调试相对轻松多了。我用到的核心设备就是一台 &nbsp......

IP核调试之SDRAM篇(1) 转载
FPGA 门数计算方法(转)
Xilinx FPGA全局时钟和第二全局时钟资源的使用方法
用HDLScore做覆盖率分析VHDL实例
 
下一个:[EDA/IC设计](转)抛砖引玉,发实际项目用的一个仿真脚本(VCS+VERA)
简介:
抛砖引玉,发实际项目用的一个仿真脚本(VCS+VERA) #!/bin/csh -f time if (!(-e filelist.vrl)) cp -f ../code/sim/scr/filelist.vrl . if (!(-e picture.dat)) cp -f ../code/sim/scr/picture.dat . if (!(-d pic)) mkdir pic if (!(-d log)) mkdir log ####################......

上一个:[行业观察]IPTV洋标准暗藏高专利费,企业面临重复交费

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:30分钟 执行时间:63毫秒