2011-11-09 163 views
2

我正在做c程序的靜態分析,並且我搜索antlr網站,似乎沒有合適的語法文件可以爲c程序生成ast。這意味着我必須做什麼它從一開始就是我自己的。或者有更快的方法。我還需要一個可以遍歷解析器創建的ast的樹解析器。antlr爲c生成ast並解析ast

+0

您希望靜態分析儀能檢測到什麼樣的條件? –

+0

@ ira,常見安全問題,例如緩衝區溢出。 – Fiary

回答

2

最難的部分是寫文法。在重寫規則中混合創建AST並不難,並且從發出AST的解析器語法創建樹語法並不是也很難(與編寫解析器語法相比)。

這裏有一個之前常見& A中展示瞭如何創建一個適當的AST:How to output the AST built using ANTLR?

我找不到一個像樣的SO-Q &一個解釋如何去建立一個樹文法,所以這裏的鏈接到我的個人博客,解釋了這一點:http://bkiers.blogspot.com/2011/03/6-creating-tree-grammar.html

祝你好運。

4

您表示您希望執行靜態分析來檢測緩衝區溢出。

首先,爲C編寫語法比看起來更難。標準中有所有這些東西,然後就是真正的編譯器實際接受的東西。你必須決定如何處理預處理器(並且它從編譯器到編譯器不同!)。如果你沒有完全正確地獲得語法和預處理,你將無法解析真正的程序。 (如果你想玩玩具語言,那很好,但是你不需要C語法)。

要進行分析,您需要遠遠超過AST的以上的機器。您需要符號表,控制和數據流分析,可能包括局部和全局點分析,調用圖提取以及一些類型的範圍分析。

人們似乎並不明白這一點。

**獲取解析器很長的路要走做任何事情與真正的語言有用**

我喊,因爲我看到這個了,並且結束了,而過。

如果你想獲得與特定的程序分析或改造任務,除非你想你開始你的任務之前老死的,你最好找有你最需要什麼已經奠定了基礎。語法錯誤的解析器生成器的基礎不是基礎。 (不要誤會我的意思:ANTLR,YACC,JavaCC的無一不精解析器生成器,他們是偉大的建設分析器對新語言的他們是偉大的,當投資被提出實現真正的漢語語言解析器生產。但是,他們生產解析器,而且大多人都不做生產的一部分。而且他們不提供由一個長鏡頭額外的機械。)

我們DMS Software Reengineering Toolkit包含上述所有的機器,因爲它幾乎總是需要,這是一個令人頭痛的執行。 (我的團隊迄今爲止投入了15年時間。)

我們還以各種方言示例說明機器是專門用於COBOL and Java, C, C++(在某種程度上,語言確實很難)的形式,以便其他人不必重複這個漫長的過程。

對於C和C++來說,GCC和Clang是非常成熟的選擇。