2011-05-09 36 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。

相关问题