2011-12-15 144 views
1

我想檢測的編程語言與紅寶石源代碼語言分析

例如: (PHP)

$a = array("1","2","3"); 
print_r($a); 

(紅寶石)

def index 
end 

什麼寶石可以做到這一點?

回答

3

Linguist可能會爲你做這件事(這是GitHub用來檢測項目中的主要語言)。

如果你想建立自己的,那將是一個很好的開始。這裏還有一些關於你可能需要做什麼才能做出來的更多的注意事項。

文件擴展名是一個很好的做法。例如:

  • .rb - 幾乎總是紅寶石
  • .cpp - 幾乎都是C++
  • .h - 可能是C/C++

...等,然後通過閱讀代碼行。線。通常有一些常見的關鍵詞,或者將這些詞語放在代碼中,這些詞語會很快讓你知道它是用什麼語言編寫的。回顧一些你想要支持的語言的「入門」教程網站應該給你一個很好的總結這些事情,而不需要自己實際學習語言。所有你真正需要的是每種語言的一些獨特的東西,你可以選擇一種語言或另一種語言。

您也可以使用貝葉斯學習過濾器(在Ruby中有一個名爲Classifier的模塊,它似乎這樣做)來訓練更靈活的學習引擎,以便通過語言自行識別代碼。由於編程語言是高度結構化的文本,所以您的學習軟件不需要很長時間才能非常好地識別語言。如果你想完全瘋狂,你甚至可以訓練它不僅能識別語言,還能識別代碼可以編譯的最低語言版本。例如,在Java中,他們在語言生命週期的某個特定點添加了泛型。如果您在代碼中看到泛型的使用,那麼您知道該源代碼是爲某個最低版本的Java編寫的,等等。

稍微複雜一些,但不是太多,將會出現如.erb這樣的問題文件。你是否稱這些「嵌入式Ruby」,你稱他們爲「Ruby」,還是你計算了HTML與Ruby和JavaScript之間的界限,並用最多的語言稱呼它,或者你只是用ALL標記文件找到的語言?我想這更像是一個設計決定。

3

Source classifier是一個應該爲你想要做的事情工作的寶石。源分類器使用在「計算機語言基準遊戲」生成的語料庫上訓練的貝葉斯分類器來識別編程語言:http://shootout.alioth.debian.org/。它是用Ruby編寫的,可作爲寶石使用。開箱即用的SourceClassifier可識別C,Java,Javascript,Perl,Python和Ruby。使用貝葉斯分類器來識別源代碼的一個很好的優點是,即使是錯誤的匹配仍然會提供一些可用的突出顯示。要訓​​練分類器以識別新語言,請從github下載源代碼。