2012-11-21 39 views
1

如果有人瞭解Vera ++或靜態分析器,請仔細閱讀。Vera ++ Rules Implementaion

任何人都可以請指導我一點如何實現複雜的C++規則驗證機器作爲靜態分析器。我想實現複雜的規則,如基類中的虛函數,識別用戶定義的變量,如類,結構等。變量範圍如全局,本地,靜態等。我理解Vera ++非常好,根據我的理解,它只執行令牌解析,語言的語境需要通過腳本實現(如果語言像C++一樣,實現的上下文可能太複雜);因爲區分a * b; (它可以是類類型a的指針b)或a * b;(可以簡單地是兩個變量之間的乘法);

我甚至覺得複雜規則的實現可能需要像狀態機這樣的編譯器,以便腳本可以理解語言的上下文。

我的問題就是要問:

  1. 處於靜態分析規則執行方面我的理解是否正確。

  2. 你能否引導我一點點我該如何着手這項任務的成就。

  3. 這些任務可以通過tcl的REGEXP簡化。

  4. 是否有任何具體的設計方法可以建議良好實施Solid C++代碼分析器。

感謝

+1

也許這有助於:http://stackoverflow.com/questions/13139556/vera-tcl-rule-list-all-local-variables/13143067#13143067 –

+0

您可以在令牌級別(Vera提供)收集有關C++的一些啓發式信息,但是任何類型的嚴重語義分析都需要真正的解析和符號表構造。否則,你會如何知道像「X * Y」這樣簡單的事情?手段?請參閱http://stackoverflow.com/questions/243383/why-cant-c-be-parsed-with-a-lr1-parser/1004737#1004737 –

回答

2

我建議使用一個成熟的C++解析器來代替。

Clang是一套完全理解C++的庫,因爲您可以用於分析的那些庫是編譯器使用的庫(討論狗糧)。您可以訪問多個「圖層」:抽象語法樹,控制流圖。並且已經有了一個靜態分析器框架,您可以爲其實施通行證。

最後,也許是最有趣的事情,你可以從C++或C進行交互,甚至在C接口上還有Python綁定(儘管顯然不完整)。老實說,考慮到C++語法複雜的上帝的複雜性,現在需要一個受虐狂使用任何短的真正的語義解析器。

其它解析器(的Ira Baxter提供)包括:

  • Elsa(開源)
  • DMS(商業)
  • EDG(商用,C++前端用於實現編譯器)
+0

同意。還有Elsa(開源),DMS和EDG(商業)。 –

+0

@IraBaxter:啊,謝謝!我記不起你的名字,但我知道你會有其他選擇。我會編輯它們。 –

相關問題