擅长:python、mysql、java
<p>我的答案在某种程度上取决于你将得到的代码量。如果你将得到30多行代码,那么识别每种语言的一些非常常见的独特特性应该是相当容易的。例如,告诉程序,如果有任何内容与<code>from * import *</code>之类的表达式匹配,那么它就是Python(我不能百分之百地肯定语法是Python所独有的,但是您得到了要点)。您可以看到的其他通常稍有不同的地方是类定义(即Python总是以“class”开头,C将以返回的定义开头,这样您就可以检查是否有一行以数据类型开头并具有方法声明格式的行),条件句的格式通常稍有不同,等等。如果你想让它更准确,你可以引入某种加权系统,那些更独特、不太可能是不匹配regexp结果的功能会得到更高的权重,通常不匹配的东西对语言的权重较低,最后计算哪种语言的综合得分最高。你也可以定义你认为是100%唯一的特性,并告诉它一旦碰到其中一个,停止解析,因为它知道答案(像shebang行)。在</p>
<p>当然,这需要你对你想要识别的语言有足够的了解来找到独特的特征,或者能够找到那些知道独特结构的人。在</p>
<p>如果给出的代码少于30行左右,那么这样解析得到的答案就不那么准确了,在这种情况下,最简单最好的方法可能是使用类似于Travis的设备,用每种语言运行代码(当然是在VM中)。如果代码在一种语言中成功运行,您就有了答案。如果不是,则需要一个“可接受”的错误列表(因为它们是代码编写方式的错误,而不是解释器中的错误)。这不是一个很好的解决方案,但在某个时候,您的代码示例可能会太短,无法给出准确的答案。在</p>