1

我正在使用 CIL 来处理使用 pthread 库的 C 程序。我必须以不同于 pthread 函数的方式处理用户定义和非 pthread 函数。我可以有一个看起来像这样的类型定义:

type PThreadFun = "pthread_create" | "pthread_join" | ...;;

这样我首先对函数名称进行模式匹配,然后将其发送到

processFunction (fn_name: string)

或者

processPThreadFun (fn_name: PThreadFun)
4

1 回答 1

4

您可以在 OCaml 中使用sum 类型它们被称为variables 。但它们的值不是字符串。你可以声明

type pthreadfun_t = Pthread_create | Pthread_join (* etc *);

然后,您将需要一些处理 CIL 表示的代码来查找此类pthreadfun_t值。

顺便说一句,您可能对MELT感兴趣,它是一种扩展GCC编译器的领域特定语言。MELT 适用于内部 GCC 表示,尤其是Gimple。它不是基于 Ocaml 或 CIL,但它是一个 GCC 插件,为您提供强大的类 Lisp 领域特定语言和强大的模式匹配,包括匹配 Gimple-s、Tree-s、字符串等的能力......

于 2013-09-22T07:46:01.727 回答