簡體   English   中英

解析C ++進行代碼生成的最簡單方法是什么?

[英]What's the easiest way to parse C++ for code generation?

我想基於C ++類型生成一些包裝器代碼。 我基本上想解析一些C ++標頭,獲取標頭中定義的類型,類及其字段,並基於它們生成一些代碼。

解析C ++並獲取類型信息的最簡單方法是什么? 我曾考慮過使用Clang C ++解析器,但在幾個小時內無法建立一個工作良好的世界,所以我暫時放棄了。
您能否建議其他方法來解析C ++,或者如果Clang是最簡單的解決方案,您能否為我指出一個簡單的入門指南,使其能夠解析C ++類型?

(基本上任何技術都可以,C ++,Java,C#等,這將是命令行工具的一部分)

叮當聲絕對是最簡單的選擇。 考慮使用cindex python綁定 ,這非常簡單。 或者,您可以獲得舊版本的clang,該版本仍具有xml后端。

編輯:上面的鏈接似乎已關閉,所以這里是指向它的Google緩存的鏈接。

評論中建議的另一個鏈接: http : //www.altdevblogaday.com/2014/03/05/implementing-a-code-generator-with-libclang/

除非您的目標是驗證正確性,或者代碼涉及高級模板內容,否則請考慮使用DOxygenGCC_XML的XML輸出。 另外,即使您覺得太復雜,也可以考慮使用clang。 請注意,對於clang來說,最好在* nix-land工作。

如果生成工具使用Java,請考慮使用Eclipse CDT中的解析器。 我的依賴項集是:

  • com.ibm.icu_4.4.2.v20110823.jar
  • org.eclipse.cdt.core_5.3.2.201202111925.jar
  • org.eclipse.equinox.common_3.6.0.v20110523.jar

(它們來自舊的Eclipse版本,因為我對舊的Java類版本有依賴性),但是取自最新的CDT。

解析涉及:

FileContent reader;
reader = FileContent.createForExternalFileLocation(fullPath);
IScannerInfo info = new ScannerInfo(definedSymbols, includePaths);
return GPPLanguage.getDefault().getASTTranslationUnit(reader, info, FilesProvider.getInstance(), null, 0,log);

這將返回一個IASTTranslationUnit,可以通過訪問者模式(ASTVisitor)對其進行訪問。

我無法評論在極端情況下解析的准確性,因為到目前為止,我一直在基於簡單的C ++結構定義生成代碼。

暫無
暫無

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

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