如何在文本中检测源代码?

11 投票
2 回答
4555 浏览
提问于 2025-04-16 00:50

有没有办法在一段文字中识别出编程语言的源代码(主要是Java和C#)呢?

比如,我想知道这段文字里有没有任何源代码的部分。

.. text text text text text text text text text
text text text text text text text text text
text text text text text text text text text

public static Person createInstance() { return new Person();}

text text text text text text text text text
text text text text text text text text text
text text text text text text text text text ..

我找了很久,但一直没找到合适的办法。

如果能用Python来解决这个问题,那就太好了。

谢谢。

2 个回答

0

你需要一个包含关键词的数据库,这些关键词有它们的特性,比如定义、控制结构等等。同时,还需要一个操作符和特殊字符的列表,这些字符会在编程语言的结构中使用(例如 }*||),以及一些正则表达式的模式。

为了减少重复的工作,最好的办法是先搜索这些关键词、操作符和字符。使用一个空间/频率的公式,只从那些可能是某种编程语言的文本开始分析,这个判断是基于公式返回的值。接下来就是识别出这是什么语言,以及它的结束位置。

因为很多编程语言的代码很相似,这可能会比较困难。比如,下面的代码是哪种语言呢?

for(i=0;i<10;i++){
   // for loop
} 

如果没有注释,这段代码可能属于很多不同的语言。但如果有了注释,你至少可以排除 Perl,因为它使用 # 作为注释符号,但它仍然可能是 JavaScript、C/C++ 等等。

总的来说,你需要进行很多递归查找来识别正确的代码,这意味着如果你想要快速处理,你需要一台性能强大的电脑,或者一组电脑。此外,搜索公式和识别公式需要针对每种语言进行精细调整。

如果没有合适的库调用或包含,代码识别可能会变得不可能,除非你列出它可能属于多种语言,这样你就需要一个语法库来帮助你。

4

现在有一些语法高亮工具,比如 pygmentsgoogle-code-prettify,它们可以识别和分类代码。研究它们的源代码可以让你了解这是怎么实现的。

(我刚刚又看了一下 pygments,不太确定它是否能自动识别编程语言。不过 google-code-prettify 肯定是可以做到的。)

撰写回答