簡體   English   中英

當前 state 用於 c++ 解析器的技術?

[英]Current state of the art for c++ parsers?

我知道這是一件非常困難的事情,#ifdef、#define 和模板是什么,但是 c++ 解析器藝術的 state 是什么(是開源的還是專有的?)。

我的意思是,對於一個大學項目,我正在考慮創建一個用於分析 c++ 代碼庫的工具,但似乎很難找到一個好的解析器。

我應該放棄並滿足於 java 解析器嗎? 同樣,java 解析器的藝術 state 是什么? c# 怎么樣?

此外,除了它之外,為了代碼分析的目的,撕掉 g++ 的解析器部分是否有用,或者這樣做是否需要付出太多努力?

You're in luck: Clang just started being able to parse most c++ programs within the last few months: http://clang.llvm.org/ It's one of the few open source parsers actually able to parse most of C++. (主要是 GCC 和 CLANG,我聽說 Oink(?) 有時會變得相當好)而且它是為 IDE 等用作庫而構建的,甚至具有支持代碼重寫的架構。

有一些專有的解析器可以完成工作,但是沒有源代碼訪問它們都不能真正使用。

關於撕開 gcc,這對於代碼分析不是很實用,具體取決於您要執行的操作,您可以使用新的插件架構從中獲取一些可用信息,但是在解析的早期階段,它會做一些叫做術語折疊,解析器本身將優化諸如“x = x”之類的東西(一個簡單的例子)編譯器的其他方面預計會發生這種情況,因此刪除它並非易事。 從而使 gcc 對於任何類似源代碼重寫的東西幾乎毫無用處。

對於 C++,您可以使用 GCC 和-fdump-translation-unit & Friends 選項從中獲取 AST。

參見: http://www.manpagez.com/man/1/g++/

如果你可以通過 g++ 編譯一些東西,那么你可以從中得到樹。

業界標准的C++解析器,廣泛用於編譯器, EDG的C++前端 我沒有這方面的經驗; 但我知道它可以處理各種各樣的 C++ 方言。 我知道您可以免費獲得它用於研究目的。

開源標准是GCC 編譯器 我聽說很難理解和修改。

如其他答案中所述,有CLANG 我在這里沒有經驗。 我的理解是它相當復雜,尤其是在支持分析方面。

我們專有的DMS 軟件再造工具包具有完整的 C++ 解析器,具有全名和類型解析、預處理器擴展(或保留,其他工具不會這樣做)。 C++ 前端處理 C++ 的幾種方言:ANSI、GCC、MS Visual Studio。 正如你可能猜到的,我在這方面有很多經驗。

DMS/CppFrontEnd 已用於對 C++ 代碼進行程序分析以及大量程序源到源的轉換,由 DMS 的模式解析器啟用,它將解析 C++ 代碼的任何片段。 我相信其他 C++ 前端不提供源到源的轉換。 對於那些你可能會在程序上破解 AST,但這非常不方便,因為你必須知道精確的 AST 結構,而對於 C++,這非常復雜。

DMS 還具有完整的 C、Java 和 COBOL 前端,具有名稱和類型解析以及控制和數據流分析。 它具有許多其他語言的解析器(但沒有名稱和類型分析),包括 C#。 AFAIK,根據定義,其他“C++ 解析器”無法做到這一點。 可以對這些中的任何一個或這些的任何混合應用源到源的轉換。

clang 值得研究。 它速度很快,而且他們提供 api 來連接到他們的后端。

Xcode 4 將 clang 用於解析、某些情況下的錯誤報告/檢測、自動完成和修復等任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM