2011-12-15 123 views
1

我想检测的编程语言与红宝石源代码语言分析

例如: (PHP)

$a = array("1","2","3"); 
print_r($a); 

(红宝石)

def index 
end 

什么宝石可以做到这一点?

回答

3

Linguist可能会为你做这件事(这是GitHub用来检测项目中的主要语言)。

如果你想建立自己的,那将是一个很好的开始。这里还有一些关于你可能需要做什么才能做出来的更多的注意事项。

文件扩展名是一个很好的做法。例如:

  • .rb - 几乎总是红宝石
  • .cpp - 几乎都是C++
  • .h - 可能是C/C++

...等,然后通过阅读代码行。线。通常有一些常见的关键词,或者将这些词语放在代码中,这些词语会很快让你知道它是用什么语言编写的。回顾一些你想要支持的语言的“入门”教程网站应该给你一个很好的总结这些事情,而不需要自己实际学习语言。所有你真正需要的是每种语言的一些独特的东西,你可以选择一种语言或另一种语言。

您也可以使用贝叶斯学习过滤器(在Ruby中有一个名为Classifier的模块,它似乎这样做)来训练更灵活的学习引擎,以便通过语言自行识别代码。由于编程语言是高度结构化的文本,所以您的学习软件不需要很长时间才能非常好地识别语言。如果你想完全疯狂,你甚至可以训练它不仅能识别语言,还能识别代码可以编译的最低语言版本。例如,在Java中,他们在语言生命周期的某个特定点添加了泛型。如果您在代码中看到泛型的使用,那么您知道该源代码是为某个最低版本的Java编写的,等等。

稍微复杂一些,但不是太多,将会出现如.erb这样的问题文件。你是否称这些“嵌入式Ruby”,你称他们为“Ruby”,还是你计算了HTML与Ruby和JavaScript之间的界限,并用最多的语言称呼它,或者你只是用ALL标记文件找到的语言?我想这更像是一个设计决定。

3

Source classifier是一个应该为你想要做的事情工作的宝石。源分类器使用在“计算机语言基准游戏”生成的语料库上训练的贝叶斯分类器来识别编程语言:http://shootout.alioth.debian.org/。它是用Ruby编写的,可作为宝石使用。开箱即用的SourceClassifier可识别C,Java,Javascript,Perl,Python和Ruby。使用贝叶斯分类器来识别源代码的一个很好的优点是,即使是错误的匹配仍然会提供一些可用的突出显示。要训​​练分类器以识别新语言,请从github下载源代码。