2011-03-08 34 views
5

This question問一般問題。我特別詢問VHDL,因爲問題答案提到的工具是針對Java和PL/SQL的。它不需要是完美的,一些手動解釋會很好。我正在做一個自動提交任務。查找註釋掉的工具VHDL代碼

編輯3/9/11:@phillipe指出自動提交任務與手動解釋不一致。我試圖鼓勵其他工程師擺脫代碼,並看到他們做到了。我想一個悲觀的工具會對提交更好;如果它錯過了一些不是世界末日的代碼。或者我可以讓它報告這些行的數量併發郵件給我,而不是停止提交。

+2

你的用例到底是什麼?如果你在提交鉤子中使用這個腳本,你將無法做任何手動解釋。 – Philippe 2011-03-09 08:59:39

回答

1

下面是我在用至今

egrep "^\s*--.*[;,]$" *.vhd 

即,發現可能有空格,最後文本,並最終在一個線;要麼 ,。我在評論中發現逗號是正常的,但這兩個字符經常在代碼中註釋掉,因爲它們經常用在VHDL行的末尾。

使用@Freddy Mallet在引用的關鍵字中提出的建議,我提出了這個問題。我試圖使用英文中不常用的VHDL關鍵字。這對於相同的代碼來說效果很好,但在諸如「處理...」之類的評論中遇到麻煩。您可能希望使用egrep -f並將正則表達式放在一個文件中。

egrep "^\s*--.*([;,]$|\s(architecture|array|assert|begin|block|case|component|downto|elsif|entity|generate|generic|inout|library|null|package|port|range|records|select|signal|type|until)\s)" src/*.vhd  
+1

我喜歡它!這裏是Verilog的一個版本(單行註釋):'egrep'^ \ s * //。* [;,] $'* .v'。我的shell對'$'不滿意,所以我切換到了單引號。當然,這不適用於Verilog塊註釋'/ ** /'。 – toolic 2011-03-09 21:42:52

3

在我看來,理想的答案要求您應用可以識別每個評論內容的語言子字符串的解析器。如果語法錯誤率與評論的大小相比較小,那麼您已經註釋掉了代碼。

爲此,您需要一個願意解析不完整代碼片段的解析器。提供源到源轉換的程序轉換系統(,如果您看到此結構,請將其替換爲該結構)內置此機器;他們必須解析代碼模式,這些代碼模式包含源到源的轉換,這些轉換通常是語言的句子形式。我們的DMS Software Reengineering Toolkit就是這個屬性。與DMS一樣,它必須配置爲解析VHDL(或Verilog)[這個簡單的DMS具有完整的VHDL,Verilog和SystemVerilog前端),掃描分析樹,查找附加註釋(DMS在分析時捕獲註釋),然後嘗試使用DMS內置的「模式解析器」解析註釋。一些bookeeping來計算語法錯誤是必要的。所以這是可能的。

我懷疑這是不值得的麻煩。您的regexp hueristic可能是相當不錯的,特別是當人類支持時,如果該人不介意額外的代碼評論。