我正在做c程序的靜態分析,並且我搜索antlr網站,似乎沒有合適的語法文件可以爲c程序生成ast。這意味着我必須做什麼它從一開始就是我自己的。或者有更快的方法。我還需要一個可以遍歷解析器創建的ast的樹解析器。antlr爲c生成ast並解析ast
回答
最難的部分是寫文法。在重寫規則中混合創建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
祝你好運。
您表示您希望執行靜態分析來檢測緩衝區溢出。
首先,爲C編寫語法比看起來更難。標準中有所有這些東西,然後就是真正的編譯器實際接受的東西。你必須決定如何處理預處理器(並且它從編譯器到編譯器不同!)。如果你沒有完全正確地獲得語法和預處理,你將無法解析真正的程序。 (如果你想玩玩具語言,那很好,但是你不需要C語法)。
要進行分析,您需要遠遠超過AST的以上的機器。您需要符號表,控制和數據流分析,可能包括局部和全局點分析,調用圖提取以及一些類型的範圍分析。
人們似乎並不明白這一點。
**獲取解析器很長的路要走做任何事情與真正的語言有用**
我喊,因爲我看到這個了,並且結束了,而過。
如果你想獲得與特定的程序分析或改造任務,除非你想你開始你的任務之前老死的,你最好找有你最需要什麼已經奠定了基礎。語法錯誤的解析器生成器的基礎不是基礎。 (不要誤會我的意思:ANTLR,YACC,JavaCC的無一不精解析器生成器,他們是偉大的建設分析器對新語言的他們是偉大的,當投資被提出實現真正的漢語語言解析器生產。但是,他們生產解析器,而且大多人都不做生產的一部分。而且他們不提供由一個長鏡頭額外的機械。)
我們DMS Software Reengineering Toolkit包含上述所有的機器,因爲它幾乎總是需要,這是一個令人頭痛的執行。 (我的團隊迄今爲止投入了15年時間。)
我們還以各種方言示例說明機器是專門用於COBOL and Java, C, C++(在某種程度上,語言確實很難)的形式,以便其他人不必重複這個漫長的過程。
對於C和C++來說,GCC和Clang是非常成熟的選擇。
- 1. ANTLR:從AST生成後端源文件
- 2. ANTLR - 如何使用生成的AST樹?
- 3. AST在ANTLR
- 4. 生成AST
- 5. ANTLR的AST建設
- 6. C源代碼AST中的AST解析器
- 7. 如何將ANTLR 4生成的AST轉換爲其源代碼
- 8. 在ANTLR AST中保留生產訂單
- 9. Python AST - 合併兩個AST
- 10. 打印AST ANTLR C#語法錯誤
- 11. ANTLR AST規則失敗,RewriteEmptyStreamException
- 12. ANTLR 4和AST遊客
- 13. ANTLR的語法和AST
- 14. ANTLR忽略AST運營商
- 15. 走過AST ANTLR V2.X
- 16. C#中的解析器和打印AST
- 17. 如何解析C++來創建AST?
- 18. 問題的AST解析器
- 19. Java AST解析器.Net
- 20. Ast.Expr類型的Ast解析
- 21. Haskell解析器到AST
- 22. 解析ANTLR時跳過樹的一部分AST
- 23. 將解析樹轉換爲AST
- 24. 如何將TypeScript代碼解析爲AST
- 25. Javac AST符號解析爲JavacTask.parse()
- 26. 使用Parboiled生成AST(Java)
- 27. 從typescript AST生成javascript?
- 28. 從Python AST生成.pyc?
- 29. Flex /野牛PHP AST生成
- 30. 從AST生成源代碼
您希望靜態分析儀能檢測到什麼樣的條件? –
@ ira,常見安全問題,例如緩衝區溢出。 – Fiary