簡體   English   中英

需要C ++解析器

[英]Need C++ parser

我需要一個好的,穩定的,可能是易於使用的帶有C / C ++接口的C ++解析器庫(首選C)。
我聽說cint是很好的c ++解釋器。 我可以為此目的使用它(或它的某些部分)嗎?
有什么建議?

請參閱: http ://clang.llvm.org/它同時具有C ++和C接口(libclang)。

C ++解析很有名。 AFAIK只有三種解析器可以被今天的標准所接受:EDG(廣泛用作流行的C ++編譯器的前端),GCC和微軟。 顯然,微軟已經開始在VS2010中使用EDG的解析器,用於Intellisense。

當你看到免費選項時,你幾乎被困在GCC。 但它可以生成XML,因此很容易實現。 (通過C ++解析標准很簡單,就是這樣)

Clang是最新和最成熟的選擇,有一個不錯的C ++ API(但沒有普通的C)。 Elsa有點過時且沒有維護,但仍然是一個可用的選擇。 兩者都可以用作庫以及獨立的XML前端。

如果要解析C或C ++代碼,可以選擇以下選項: http//bellard.org/tcc/ http://students.ceid.upatras.gr/~sxanth/ncc/

如果您想使用C / C ++創建解析器,可以嘗試: http//boost-spirit.com/home/ http://dinosaur.compilertools.net/ Lex和Yacc http://www.codeguru.com /csharp/.net/net_general/patterns/article.php/c12805 Flex和Bison

我們的C ++前端能夠解析各種C ++方言(ANSI,GCC,MSVS),自動構建AST,其節點標記有精確的源位置,並使用任何附近的注釋文本進行修飾,並構建完整的符號表。 (編輯2013年1月:C ++前端已經能夠處理C ++ 11很長一段時間了)。

C ++前端構建於我們的DMS軟件重組工具包之上,這是一種用於程序分析和轉換的通用編譯器技術,旨在支持自定義工具構建。 C ++前端包括一個預處理器,其中預處理器指令可以根據任務的需要進行擴展,也可以不集中或單獨擴展。 它還包括完整的符號構造以及所有令人討厭的Koenig查找內容。

DMS接受明確的語言定義(這就是它如何理解C ++;還有C,C#,Java,COBOL和其他各種語言的前端)。 DMS提供通用解析,符號表構建,流程分析機制,用於樹導航/檢查/修改的過程API,源到源轉換以及AST到源文本再生,包括原始注釋,數字基數等。所有這些功能可供C ++前端使用。

DMS還旨在處理嚴肅任務所需的規模。 通常你不僅需要一個編譯單元(這是GCC最多會給你的),而是訪問整個集合。 DMS已被用於分析/轉換數千個C ++編譯單元,以及數以萬計的C編譯單元(在2500萬行應用程序中)。

對於程序操作工具而言,“易於使用的庫”是一種矛盾。 langauges本身很復雜(C ++是最困難的,而且隨着C ++ 0X變得越來越糟),這會引起你可以提出的問題的性質和答案的復雜性(例如“是否有任何模板實例,可以在任何命名空間N?“)中修改C類中方法Y中的局部變量X. 問題本身很難。

你想要的是一個具有必要復雜性的庫,讓你完成任務。 DMS在過去15年中一直在不斷發展,以提供必要的復雜性。 如果您想進行認真的程序處理,我聲稱您將需要該信息。

作為證據,DMS已經被用於為波音公司進行基於C ++的任務航空電子軟件的大規模自動化再造。 我不相信有任何其他工具可以做到這一點。 (Clang看起來正在嘗試,但僅限於C ++。YMMV)。

我不知道cint,但我聽說人們使用gcc-xml

我一直在尋找一個好的獨立庫,但還沒找到。

如果你感到勇敢,那么答案中的鏈接“ 是否有可用的C ++語法? ”可能會有所幫助。 已經建議使用Gcc-xml和clang,並且Swig也有一個XML輸出 ,這取決於你想要達到的目標可能是相關的。

我沒有嘗試過,但我認為最好的選擇是從一些流行的開源編譯器(如gcc for C ++)獲取解析模塊;

也許你會在這里找到一些有趣的東西http://www.nobugs.org/developer/parsingcpp/

暫無
暫無

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

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