簡體   English   中英

源代碼語言分析器

[英]Source code language analyser

我想用ruby檢測編程語言

例如:(PHP)

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

(紅寶石)

def index
end

等等

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

語言學家可能會為您做到這一點(這是GitHub用於檢測項目中主要語言的工具)。

如果您希望自己構建,那將是一個不錯的起點。 以下是一些其他注釋,您可能需要做些什么才能制作一個。

文件擴展名是不錯的選擇。 例如:

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

...等,然后逐行讀取代碼。 通常有一些常見的關鍵字,或者這些關鍵字在代碼中的位置,它們會迅速提示您所用的語言。對一些您要支持的語言的“入門”教程網站進行了回顧應該給您一個很好的總結,而無需實際學習語言本身。 您真正需要的是每種語言的一些獨特之處,您可以選擇它們,從而使文件確定為一種語言或另一種語言。

您還可以使用貝葉斯學習過濾器(Ruby中有一個名為Classifier的模塊,似乎可以做到這一點)來訓練更靈活的學習引擎,以自己的語言識別代碼。 由於編程語言是高度結構化的文本,因此您的學習軟件很快就可以很好地識別語言。 如果您想發瘋,甚至可以訓練它以識別語言,不僅識別可以編譯代碼的語言的最低版本。 例如,在Java中,他們在語言生命周期的特定時刻添加了泛型。 如果您在代碼中看到泛型的使用,那么您知道源代碼是為某個最低版本的Java等編寫的。

諸如.erb文件之類的問題會稍微復雜一點,但不會太多。 您是將它們稱為“嵌入式Ruby”,還是將其稱為“ Ruby”,還是計算HTML與Ruby與JavaScript的行數,並用最多幾種語言來調用它,還是只用ALL標記文件找到的語言? 我想這實際上更多是設計決定。

來源分類器是一種可以滿足您想要做的事情的寶石。 源分類器使用貝葉斯分類器來識別編程語言,該貝葉斯分類器是在“計算機語言基准游戲”:http://shootout.alioth.debian.org/生成的語料庫上訓練的。 它是用Ruby編寫的,可以作為寶石使用。 開箱即用的SourceClassifier可以識別C,Java,Javascript,Perl,Python和Ruby。 使用貝葉斯分類器識別源代碼的一個很好的好處是,即使錯誤匹配也將給出一些可用的突出顯示。 要訓​​練分類器識別新語言,請從github下載源代碼。

我唯一能想到的就是https://github.com/github/linguist 一顆奇妙的寶石,但我認為這並不是您真正需要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM