2013-02-01 73 views
3

我試圖找到一個開放源代碼庫(編寫在CC++)來幫助我解析任意C/C++類型聲明(例如像void *(*(*foo[])(int, void * []))[123]這樣的聲明),然後我將轉向元模型。解析C類型聲明的庫?

有人可以推薦開源C/C++類型聲明解析庫嗎?

注意:我不能使用GPL許可代碼(如cdecl工具),因爲這是用於封閉源代碼的應用程序,我希望能爲我自己寫的更強大的解決方案。

+0

有很多很好的語法圖只是使用野牛http://www.gnu.org/software/bison/ – Hogan

+0

'cdecl'不是GPL。它可能是公共領域:http://ridiculousfish.com/blog/posts/cdecl.html – cha0site

+0

我認爲鏗鏘的C和C++解析代碼作爲一個庫,不受許可問題的困擾。 – legends2k

回答

1

解析C是非常困難的,要做你想做的事情,你可能需要名稱和類型解析。人們需要擁有完整的編譯器前端才能做到這一點;實際上,您甚至需要預處理器,因爲您要讀取的代碼將包含預處理器指令。這些設備是大量的工作要放在一起;你是對的,你真的不想自己寫一個,除非你有很多可用的時間。你的現實選擇是開源軟件包,比如GCC(很難扭曲你的任務),GCCXML(想要從格式良好的程序產生聲明)或者Clang(類似); Eclipse CDT有一個C解析器(類似地)。我不能說這些API是否滿足您的要求。封閉的源代碼包可能更符合您的需求; EDG提供C和C++前端(仍然只想處理完全格式良好的程序),我的公司(語義設計)通過我們的DMS Software Reengineering Toolkit也是如此。

在這個集合中,只有DMS有可能使隔離類型聲明變得容易;它可以解析其語法的任何非終結符(即使是including ambiguous ones)。更重要的是,如果你真的想「去元模型」,你可能想要解析一個聲明,並確定子類型/引用類型(例如,如果它使用typedef),所以你想要結合完整的解析使用名稱/類型解析來提供背景定義,然後解析您關心的特定聲明,然後使用由背景定義提供的符號表上下文,對特定聲明的名稱和類型解析進行解析。 DMS機器提供所有這些功能。