我正在构建一个接收源代码作为输入的应用程序,并分析代码的几个方面.它可以接受来自许多常用语言的代码,例如C/C++,C#,Java,Python,PHP,Pascal,SQL等(但是许多语言都不受支持,例如Ada,Cobol,Fortran).知道语言之后,我的应用程序知道该怎么做(我有不同语言的处理程序).
目前我要求用户输入编写代码的编程语言,这很容易出错:尽管用户知道编程语言,但由于鲁莽,他们中的一小部分(在极少数情况下)会点击错误的选项,这打破了系统(即我的分析失败).
在我看来,应该有一种方法可以从输入文本本身中找出(在大多数情况下)语言是什么.几点说明:
我收到纯文本而不是文件名,所以我不能使用扩展名作为提示.
用户不需要输入完整的源代码,也可以输入代码片段(即可以不包括包含/导入部分).
我很清楚,我选择的任何算法都不是100%证明,当然对于非常短的输入代码(例如,Python和Ruby都可以接受),在这种情况下我仍然需要用户的帮助,但我想尽量减少用户参与流程以最大限度地减少错误.
例子:
如果文本包含"x-> y()",我可能确定它是C++(?)
如果文本包含"public static void main",我可能肯定知道它是Java(?)
如果文本包含"for x:= y to z do begin",我可能确定它是Pascal(?)
我的问题:
您是否熟悉任何标准库/方法,以自动确定输入源代码的语言是什么?
什么是独特的代码"令牌",我当然可以将一种语言与另一种语言区分开来?
我正在用Python编写代码,但我认为这个问题与语言无关.
谢谢
Vim具有自动检测文件类型功能.如果您下载vim源代码,您将找到/vim/runtime/filetype.vim文件.
对于每种语言,它检查文件的扩展名,并且对于其中一些(最常见),它有一个函数可以从源代码中获取文件类型.你可以检查一下.代码很容易理解,并且有一些非常有用的注释.
构建一个通用的标记化器,然后对它们使用贝叶斯过滤器.使用现有的"用户检查框"系统来训练它.