具有有限数量元素的类型 - OCaml

时间:2013-09-22 07:40:11

标签: types functional-programming ocaml c-intermediate-language

我正在使用CIL使用pthread库处理C程序。我必须以不同于pthread函数的方式处理用户定义和非pthread函数。我可以使用类似于:

的类型定义
type PThreadFun = "pthread_create" | "pthread_join" | ...;;

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

processFunction (fn_name: string)

processPThreadFun (fn_name: PThreadFun)

1 个答案:

答案 0 :(得分:4)

您可以在OCaml中拥有sum types,它们被称为variants。但他们的价值不是字符串。你可以声明

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

然后你需要一些处理CIL表示的代码来找到这样的pthreadfun_t值。

BTW,您可能对MELT感兴趣,GCC是扩展Gimple编译器的特定于域的语言。 MELT适用于内部GCC表示,特别是{{3}}。它不是基于Ocaml或CIL的,但它是一个GCC插件,为您提供强大的类似Lisp的域特定语言,具有强大的模式匹配,包括匹配Gimple-s,Tree-s,字符串的能力等等......