2010-10-04 81 views
4

我想對一組用不常用的編程語言(C語法)編寫的腳本進行靜態代碼分析。常見的問題有:是否有全功能皮棉(-toolkit)?

  • 使用定義的不/宣稱符號
  • 調用函數時,錯誤的號碼或參數類型

的語言解釋器/編譯器本身不提供對這些問題的援助。

是否有任何類似lint的工具可以靈活地適應新編程語言?還是有人知道另一個好的起點? (Lex/Yacc ???)

在此先感謝

+0

您可以先看看現有的lint'工具。 – Daenyth 2010-10-04 17:02:29

+0

嗨KAI,你有沒有找到任何東西?我特別希望檢查「調用函數時參數的數量或類型」 – diversemix 2012-11-08 13:50:18

回答

2

我懷疑你會找到一個通用工具。

許多靜態分析所依賴的遠不止是詞彙和語法合規性。

一個好的靜態分析器將會對語言及其實現具有額外的語境知識。它還可能包含一個模擬器,用於跟蹤狀態和多個執行路徑。此外,它可能會注意到模式和實踐,以及某些庫和調用。

例如,在C中,此代碼if (x = 3) { /*Do something*/ }是完全合法的,儘管程序員可能打算使用==。或者,人們可能會做printf("%s", longVal);,雖然任意值可以在堆棧上推移,但該特定調用可能會根據傳遞給它的初始值產生其他期望值。底線,一般的皮棉應用知道這麼多,更不用說語言和圖書館是一個移動的目標,如果這樣的野獸確實存在,它可能會是複雜的方式或方式實際應用的能力也不如實施更適合語言的工作的便宜工具。

+0

在您自己的部門中,您可能會考慮將該非常見的語言翻譯爲常見語言語言,可能是通過自動化或交叉編譯器,然後輸出。儘管如此,我懷疑你只能肯定翻譯是否正確實施,而不是翻譯或所需功能。 – 2010-10-04 17:33:38

+0

翻譯語言很難,並且包括爲原始語言構建解析器和分析器。如果解析器和分析器的機器足夠構建定製的棉絨,那麼要經歷所有的麻煩來建立一個翻譯器是很愚蠢的。看我的經歷我的經驗。 – 2010-10-06 14:18:54

2

市售的DMS Software Reengineering Toolkit允許編寫這種一致性檢查,並且足夠靈活以適應多種語言。

+0

...它對定義「新」語言有很強的支持。它遠遠超出了lex/yacc,通過爲構建符號表提供支持(可用於診斷未定義/未使用的符號分析),屬性評估可簡化計算複雜度的指標,顯式模式匹配以期望的目標語言(用於編寫模式以檢查已知API的錯誤數量的參數)。 – 2010-10-06 10:00:44

0

花了幾個小時玩了PHP_CodeSniffer和其他一些建議在another thread here ......我得出結論認爲PHPlint是我的方式。如果沒有其他原因,它可以正確地檢測調用具有錯誤數量參數的函數的代碼。