python中的语法识别器

2024-09-29 17:24:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一个模块或策略来检测一段数据是用编程语言编写的,而不是用户特别选择要突出显示的语法的语法。我的问题分为两个层次,我将非常感谢您的帮助,因此:

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

任何线索我们都深表感激。在


Tags: 模块数据字符串用户源代码语法策略编程语言
3条回答

我的答案在某种程度上取决于你将得到的代码量。如果你将得到30多行代码,那么识别每种语言的一些非常常见的独特特性应该是相当容易的。例如,告诉程序,如果有任何内容与from * import *之类的表达式匹配,那么它就是Python(我不能百分之百地肯定语法是Python所独有的,但是您得到了要点)。您可以看到的其他通常稍有不同的地方是类定义(即Python总是以“class”开头,C将以返回的定义开头,这样您就可以检查是否有一行以数据类型开头并具有方法声明格式的行),条件句的格式通常稍有不同,等等。如果你想让它更准确,你可以引入某种加权系统,那些更独特、不太可能是不匹配regexp结果的功能会得到更高的权重,通常不匹配的东西对语言的权重较低,最后计算哪种语言的综合得分最高。你也可以定义你认为是100%唯一的特性,并告诉它一旦碰到其中一个,停止解析,因为它知道答案(像shebang行)。在

当然,这需要你对你想要识别的语言有足够的了解来找到独特的特征,或者能够找到那些知道独特结构的人。在

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

也许你可以使用现有的多语言语法荧光笔。它们中的许多可以检测出文件所用的语言。在

您可以看看baysian filtering周围的方法。在

相关问题 更多 >

    热门问题