编写一个python脚本,它需要找出写入代码块的语言。我可以自己轻松编写,但我想知道解决方案是否已经存在。
Pygments不够且不可靠。
答案 0 :(得分:12)
Pygments也可以猜到。以下是文档中的示例:
>>> from pygments.lexers import guess_lexer, guess_lexer_for_filename
>>> guess_lexer('#!/usr/bin/python\nprint "Hello World!"')
<pygments.lexers.PythonLexer>
>>> guess_lexer_for_filename('test.py', 'print "Hello World!"')
<pygments.lexers.PythonLexer>
答案 1 :(得分:6)
我想您应该尝试本网站使用的内容:google-code-prettify(来自this question)
[编辑] J.F。塞巴斯蒂安向我指出Pygments(见this answer)
答案 2 :(得分:3)
这可能有点难以可靠地完成。例如,以下是什么语言:
print("blah");
最可靠的方法(当然,除了让用户选择正确的语言之外)是检查第一行是否以#!
(“hashbang”)开头 - 无论是在此之后是什么?脚本语言。
这对于许多脚本语言(包括python,shell脚本,perl,ruby等等)可靠地工作,但不适用于编译语言..
您可以寻找独特的语法样式或特定关键字,并针对特定语言对每个关键字进行加权。例如,$#somevar
可能是Perl。 somevar.each do |another| ..... end
可能是红宝石......但这最终会成为很多的工作,并且不会一直有效(特别是对于短代码块)
另一个显而易见的方法是使用文件扩展名。如果它是*.pl
它可能是Perl代码..
你想要达到什么目的?如果你想要语法高亮,看看google-code-prettify做了什么 - 基本上是一个相当聪明的通用语法高亮显示器..
在上面的上述模糊示例中,print
可能是一个语句或函数名称,"blah"
可能是一个字符串。如果你以不同的方式突出显示这两者,你已经成功地突出显示了不同语言的 lot ,而不必检测它实际上是什么......但是这可能并不总是有效,具体取决于任务.. < / p>
答案 3 :(得分:3)
Ohcount就是为此而开发的: http://labs.ohloh.net/ohcount
他们在www.ohloh.net上使用它来计算人们对语言的贡献。
坏消息是它是用ruby编码的,但我确信你可以在python中以这种或那种方式集成它。
答案 4 :(得分:2)
Vim使用一堆有趣的测试和正则表达式来查找某些文件格式。您可以在vim/vim71/filetype.vim
或here online查看vim指令文件。
答案 5 :(得分:1)
用
编写代码块的语言
您可以选择哪种语言?普遍没有办法确定这一点。但如果你缩小你的注意力,可能会有一个工具
答案 6 :(得分:1)
你可以查看突出显示代码块的highlight.js,他们说他们正在使用某种启发式方法来完成这个http://softwaremaniacs.org/soft/highlight/en/
答案 7 :(得分:1)
由于您提出了这个问题,GitHub已经发布了用于检测编程语言的代码Linguist。根据我的经验,GitHub非常准确。
语言检测
Linguist在yaml文件中定义GitHub已知的所有语言的列表。为了突出显示文件,必须在那里定义语言和词法分析器。
大多数语言都是通过文件扩展名检测到的。这是最快和最常见的情况。
为了消除具有公共扩展名的文件之间的歧义,我们使用贝叶斯分类器。例如,这有助于我们区分.h文件,它们可以是C,C ++或Obj-C。
Ruby gem:http://rubygems.org/gems/github-linguist
如果因任何原因无法使用Ruby,逻辑就足以移植https://github.com/github/linguist/blob/master/lib/linguist/language.rb
答案 8 :(得分:0)
正如其他人所说,Pygments将是你最好的选择。