代码之家  ›  专栏  ›  技术社区  ›  OTZ

删除/删除源代码中各种语言的所有注释的通用工具?

  •  4
  • OTZ  · 技术社区  · 14 年前

    我正在寻找一个命令行工具,它可以删除输入中的所有注释。 文件并返回剥离的输出。很好,它支持大众 编程语言如C、C++、Python、PHP、JavaScript、HTML、CSS等。 必须了解语法,而不是基于regexp,因为后者将捕获 源代码字符串中的模式。有这样的工具吗?

    我完全知道评论是有用的信息,经常会留下它们 因为他们是一个好主意。只是我关注的是不同的用例。

    6 回复  |  直到 14 年前
        1
  •  4
  •   Mark Rushakoff    14 年前

    cloc 这是一个免费的Perl脚本。

    从源代码中删除注释

    如何判断CLOC是否正确识别注释?说服自己CLOC做正确的事情的一个方法是使用 --strip-comments 选项从文件中删除注释和空行,然后将剥离的文件与原始文件进行比较。

    它支持 a lot of languages .

        2
  •  2
  •   Robert McIntyre    14 年前

    你想要的可以通过Emacs脚本来完成。

    我为您编写了这个脚本,它完全满足您的需要,并且可以很容易地扩展到任何语言。

    文件名:kill comments

    #!/usr/bin/python                                                         
    
    import subprocess                                                         
    import sys                                                                
    import os                                                                 
    
    target_file = sys.argv[1]                                                 
    
    command =   "emacs -batch -l ~/.emacs-batch " + \                         
        target_file + \                                                       
        " --eval '(kill-comment (count-lines (point-min) (point-max)))'" + \  
        " -f save-buffer"                                                     
    
    #to load a custom .emacs script (for more syntax support),                
    #use -l <file> in the above command                                       
    
    #print command                                                            
    
    fnull = open(os.devnull, 'w')                                             
    subprocess.call(command, shell = True, stdout = fnull, stderr = fnull)    
    fnull.close()
    

    要使用它,只需拨打:

    kill-comments <file-name>
    

    要向其中添加任何语言,请编辑~/.emacs批处理并添加该语言的主要模式。 您可以找到基本上所有您想要的语法感知模式。 http://www.emacswiki.org .

    例如,这里是我的~/.emacs批处理文件。它扩展了上述脚本以从javascript文件中删除注释。(我有 javascript.el 在我的~/.el目录中)

    (setq load-path (append (list (concat (getenv "HOME") "/.el")) load-path))    
    (load "javascript")                                               
    (setq auto-mode-alist (cons '("\\.js$" . javascript-mode) auto-mode-alist))
    

    通过添加javascript,这将删除您提到的所有文件类型中的注释以及更多的注释。

    祝您好运,编码愉快!

        3
  •  1
  •   Community Neeleshkumar S    7 年前

    保罗迪臣 response to this question 从脚本中剥离注释可能值得一看。

        4
  •  0
  •   Jonathan Leffler vy32    14 年前

    我不知道有这样一个工具——这和说没有一个不一样。

    我曾经开始设计一个,但它很快变得疯狂-没有帮助的评论规则在C和C++。

    /\
    *  Comment? *\
    /
    

    (回答:是的!)

    "/\
    * Comment? *\
    /"
    

    (回答:不!)

    为了合理地完成工作,你必须意识到:

    • 语言注释惯例
    • 语言引用的字符串约定(python和perl足以让您疯狂)
    • 转义约定(shell将您带到这里-以及引号)

    这些结合在一起使这项工作相当接近不可能。

    最后我有了一个节目, 鳞癌 要删除C和C++注释。它的酷刑测试包括比上面所示的评论更糟糕的例子——而且它做得很好。但是扩展到shell、perl、python或(由您选择)上是非常重要的,我没有这么做。

        5
  •  0
  •   OTZ    14 年前

    目前还没有这种工具。

        6
  •  -1
  •   lhf    14 年前

    你可能会哄骗 GNU Source-highlight 这样做。