3

我需要一个模块或策略来检测一段数据是用编程语言编写的,而不是语法突出显示,用户专门选择要突出显示的语法。我的问题有两个层次,我将不胜感激任何帮助,所以:

  1. python中是否有任何包接收一个字符串(一段数据)并在它属于任何编程语言语法时返回?
  2. 我不一定需要识别语法,但知道字符串是否是源代码。

任何线索都深表感谢。

4

3 回答 3

3

您可以查看有关 baysian 过滤的方法。

于 2013-05-07T04:53:14.420 回答
3

也许您可以使用现有的多语言语法荧光笔。他们中的许多人可以检测文件写入的语言。

于 2013-05-09T04:54:00.087 回答
2

我的答案在某种程度上取决于您将获得的代码量。如果您将获得 30 多行代码,那么识别每种语言的一些相当常见的独特功能应该相当容易。例如,告诉程序如果有任何匹配表达式from * import *然后是 Python(我不是 100% 确定措辞是 Python 独有的,但你明白了要点)。您可以看到的其他通常略有不同的东西是类定义(即 Python 总是以“类”开头,C 将以返回的定义开头,因此您可以检查是否有一行以数据开头类型并具有方法声明的格式),条件通常的格式略有不同,等等。如果你想让它更准确,你可以引入某种加权系统,更独特且不太可能的功能不匹配的正则表达式的结果会获得更高的权重,通常不匹配的事物会获得较低的语言权重,最后只需计算哪种语言的综合得分最高。

当然,这将涉及您对要识别的语言有足够的了解以找到要寻找的独特功能,或者能够找到确实知道可以提供帮助的独特结构的人。

如果给你的代码少于 30 行左右,那么你从这样的解析中得到的答案将远不那么准确,在这种情况下,最简单的最好方法可能是使用类似于 Travis 的设备,并且只需运行每种语言的代码(当然是在 VM 中)。如果代码以某种语言成功运行,您就会得到答案。如果不是,您将需要一个“可接受”的错误列表(因为它们是代码编写方式中的错误,而不是解释器中的错误)。这不是一个很好的解决方案,但在某些时候,您的代码示例太短而无法给出准确的答案。

于 2013-05-10T14:44:52.790 回答