一般实用程序从各种语言的源代码中删除/删除所有注释?

时间:2010-07-28 00:56:06

标签: php python c

我正在寻找一个命令行工具,它可以删除输入中的所有注释 file并返回剥离的输出。它支持流行很好 编程语言,如c,c ++,python,php,javascript,html,css等 必须是语法感知而不是基于regexp,因为后者会捕获 源代码字符串中的模式也是如此。有没有这样的工具?

我完全清楚评论是有用的信息,经常留下它们 因为它们是个好主意。只是我的重点是不同的用例。

6 个答案:

答案 0 :(得分:4)

cloc,一个免费的Perl脚本,可以做到这一点。

  

从源代码中删除注释

     

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

它支持a lot of languages

答案 1 :(得分:2)

您可以使用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-batch并添加该语言的主要模式。 您可以在http://www.emacswiki.org基本上找到所需的语法识别模式。

例如,这是我的〜/ .emacs-batch文件。它扩展了上面的脚本以从javascript文件中删除注释。 (我的〜/ .el目录中有javascript.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,这将删除您提到的所有文件类型的评论以及更多。

祝你好运,编码愉快!

答案 2 :(得分:1)

Paul Dixon关于从脚本中删除评论的response to this question可能值得一看。

答案 3 :(得分:0)

我不知道这样的工具 - 这与说没有工具不一样。

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

/\
*  Comment? *\
/

(答案:是的!)

"/\
* Comment? *\
/"

(答案:不!)

要合理地完成工作,你必须要注意:

  • 语言评论惯例
  • 语言引用字符串约定(Python和Perl足以让你疯狂)
  • 逃避约定(Shell会将您带到此处 - 连同引号)

这些结合起来使这项工作几乎不可能完成。

我最终得到了一个程序 scc 来删除C和C ++注释。它的酷刑测试包括比上面显示的评论更糟糕的例子 - 它做得不错。但是扩展它来做shell或Perl或者Python或者(接受你的选择)是非常重要的,我没有这样做。

答案 4 :(得分:0)

尚无此类工具。

答案 5 :(得分:-1)

你可以哄骗GNU Source-highlight来做这件事。