2011-05-09 69 views
2

我需要從haskell(不是方法唯一函數)的C++頭文件中獲取所有函數,我需要輸入參數和返回類型也是方法名稱。如何使用haskell從C++頭文件中提取函數?

我怎麼能意識到這一點? olny與正則表達式?或者我必須編寫一個完整的解析器(自下而上或自上而下)?

+2

您是在編寫一個解析頭文件的工具,或者您是否嘗試從Haskell生成綁定到這些函數(例如,使用c2hs的FFI綁定)? – 2011-05-09 18:33:52

+1

爲什麼需要用Haskell完成? – 2011-05-09 18:33:59

回答

5

要從頭文件中提取所有函數聲明,您需要一個解析器,而不是正則表達式。對於C解析器++是很難得的,但幸運的是我們有一些:

無論使用的這些,你會能夠強大地處理C或C++頭文件,並將聲明提取爲Haskell數據類型,以供進一步處理。

+0

想使用LibCland但得到這些構建失敗,因爲我使用ghc7:http://hackage.haskell.org/packages/archive/LibClang/0.0.9/logs/failure/ghc-7.0 – ewggwegw 2011-05-09 18:53:27

+0

Hackage沒有C庫,libclang,安裝,因此失敗。只要你先安裝libclang(C庫),你應該沒問題。 – 2011-05-09 18:54:42

+0

太糟糕了,Cabal/Hackage沒有辦法意識到C庫缺失會導致結果不確定,對吧? – SamB 2011-05-09 19:01:46

1

如果您決定解析它們,我建議您使用Parsec並嘗試查看是否有其他人已經完成了它。

但是,有很多C++解析器已經在那裏 - 我建議您使用其中之一併與其輸出接口。

0

我寫了一個叫做cgen的程序,它生成C庫到C++庫的綁定,並且它解析C++頭文件(使用Parsec)並收集你描述的函數數據。它離一個完整的C++解析器還有很遠的距離,但它可以解析一些簡單的頭文件 - 就像這個example一樣。

這不是一個圖書館,所以你可能需要調整代碼以適應你的需求(如果你有任何改進,請給我一個補丁)。您可以在github找到相關代碼,特別是模塊HeaderParser和HeaderData。

相關問題