访问手机版页面
你的位置:老古开发网 > 其他 > 正文  
(转)脚本来统计verilog代码的行数
内容导读:
写的比较罗嗦,就当抛砖引玉了。


#!/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
标签:
来源: 作者: 时间:2006/9/25 16:50:53
相关阅读
推荐阅读
阅读排行
最近更新
商品推荐