解析C到Ocaml

解析C到Ocaml,c,parsing,gcc,ocaml,llvm,C,Parsing,Gcc,Ocaml,Llvm,我想将抽象语法树(AST)从C代码转换成OCaml值,这样我就可以用普通的OCaml程序进一步处理解析后的代码 我想使用GCC,获得带有钩子的AST(在GIMPLE中),并将GIMPLE代码转换为Ocaml 但我想知道是否还有其他方法,或者是否有人已经做了类似的事情。(事实上,我在这方面没有发现太多…) 我不想求助于使用CIL。它是一个用于C代码的OCaml解析器,但并不包含GCC所具有的所有优化。(我尤其需要比CIL中实现的别名更深入的别名分析) LLVM是一个好主意吗?可能已经做了 有更好的

我想将抽象语法树(AST)从C代码转换成OCaml值,这样我就可以用普通的OCaml程序进一步处理解析后的代码

我想使用GCC,获得带有钩子的AST(在GIMPLE中),并将GIMPLE代码转换为Ocaml

但我想知道是否还有其他方法,或者是否有人已经做了类似的事情。(事实上,我在这方面没有发现太多…)

我不想求助于使用CIL。它是一个用于C代码的OCaml解析器,但并不包含GCC所具有的所有优化。(我尤其需要比CIL中实现的别名更深入的别名分析)

LLVM是一个好主意吗?可能已经做了


有更好的主意吗?

如果CIL的问题在于提供的别名分析的精度,请查看。它基于CIL,但提供了一种适用于指针的方法。值分析使其结果在模块化体系结构中可用。

将C解析为Ocaml的另一个选项是。它的描述是:

FrontC是一个OCAML库,提供C解析器和词法分析器。其结果是一个语法树,易于使用常用的OCAML树管理进行处理

它支持ANSI C语法、旧C K&R风格语法和标准GNU CC属性

它还提供了一个C漂亮打印机作为使用示例


解析!=优化。后者来得晚。附议:CIL和Frama-C可能是您希望使用的最好的工具,Pascal Cuoq是合适的人选之一。但是为GIMPLE代码甚至LLVM代码编写解析器怎么样?在对这些编译器进行了所有优化之后,我会看一看代码,然后将AST解析为一个OCaml值。。。真的……不可思议吗?@Daz如果你走那条路,我会推荐LLVM。至少直到几年前,当我们做出自己的选择时,GCC开发人员还没有保证Gimple的稳定性,事实上,Gimple正在从一个版本变为另一个版本。我不知道你希望中间语言优化有什么魔力,但对于Frama-C中的应用程序来说,代码的可跟踪性和规范化比优化更重要(即使没有第三个优化,也很难同时拥有这两个)。@Daz如果这是你想要的,我不认为你想要一个AST,而是一个中间语言的指令集。其中一些编译器的许多优化实际上是在中间语言上进行的,而不是在源AST上(因此它们可以应用于多种语言)。我认为LLVM可以满足您的需求,尽管如果您只看一下例如clang的LLVM输出,您不会看到LLVM本身所做的优化。