【发布时间】:2020-05-05 06:15:48
【问题描述】:
我正在寻找用于 C、C++、Python 或 Node.js 的命令行工具或库,它们可以仅从各种语言的源文件中提取 cmets。
例如,给定“bob.c”:
int main(){ //Here is a comment
int i=3; /*Another comment*/
}
应返回以下内容:
Here is a comment
Another comment
可能包含行号。
这应该适用于“bob.py”、“bob.js”、“bob.css”、“bob.rb”、“bob.asm”等。
这个问题与this other one 不同,因为我不仅对 C 风格的 cmets 感兴趣,而且对其他问题也感兴趣。
此外,我非常怀疑正则表达式作为解决方案。评论式的短语可以以非常复杂的方式放置在引用的文本中;我还没有看到解决这个问题的正则表达式解决方案。
【问题讨论】:
-
我不认为 cmets 一定有任何类型的结构化格式。
-
也许使用regex?
-
@QuaxtonHale,那绝对是黑暗。几乎所有关于 SO 建议使用正则表达式提取 cmets 的答案都是错误的。大多数语言都包含引号分隔的文本,其中可能包含简单的正则表达式认为是 cmets 的短语。您可以构建复杂的正则表达式,但是,当您处理完所有特殊情况时,您已经创建了一个难以理解的混乱。
-
如果你想处理各种各样的语言,你要么需要决定它们属于什么类别(C-like,使用 C 风格的 cmets,COBOL 和 COBOL 风格的 cmets,...)并为每个构建一个词法分析器。如果该语言有很多奇怪的词法语法(PHP 在这方面非常糟糕,请查看内插字符串),此类词法分析器的细节可能会变得棘手。 ...
标签: python c++ parsing comments