Rom*_*her 6 c parsing code-generation
特别是获取函数返回类型(如果可能的话,它是否为指针类型).
(我正在尝试编写ioctl/dlsym包装器库的自动生成(为LD_PRELOAD编辑)).python或ruby库是首选,但欢迎使用任何可行的解决方案.
我已经成功地使用了来自hackage的Haskells Language.C包(Haskells回答CPAN)来做类似的事情.它将为您提供C(或头文件)文件的完整解析树,然后可以遍历该文件以提取所需信息.应该AFAIK也可以使用#includes #defines等.
我担心我没有安装相关软件来测试它,但它会是这样的:
handler (DeclEvent (Declaration d)) =
do
let (VarDecl varName declAttr t) = getVarDecl d
case t of
(FunctionType (FunType returnType params isVaradic attrs)) ->
do {- varName RETURNS returnType .... -}
_ -> do return ()
return ()
handler _ =
do return ()
main = do
let compiler = newGCC "gcc"
ast <- parseCFile compiler Nothing opts cFileName
case (runTrav newState (withExtDeclHandler (analyseAST ast) handler)) of
...
Run Code Online (Sandbox Code Playgroud)
上面的内容可能看起来很可怕,但你可能不需要更多的Haskell来做你想做的事!我很乐意分享我使用过的完整源代码(约200行),如果有任何帮助的话.