Тип с конечным числом элементов - OCaml

Я использую CIL для обработки программ на C, используя библиотеку pthread. Я должен обрабатывать пользовательские и не pthread-функции иначе, чем pthread-функции. Могу ли я иметь определение типа, которое выглядит примерно так:

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

так что я сначала сопоставляю шаблон с именем функции, а затем отправляю

processFunction (fn_name: string)

или же

processPThreadFun (fn_name: PThreadFun)

1 ответ

Вы можете иметь типы сумм в OCaml, они называются вариантами. Но их значения не являются строками. Вы могли бы объявить

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

Затем вам понадобится код, обрабатывающий представление CIL, чтобы найти такой pthreadfun_t ценности.

Кстати, вас может заинтересовать MELT, который является предметно-ориентированным языком для расширения компилятора GCC. MELT работает с внутренними представлениями GCC, особенно с Gimple. Это не Ocaml или CIL, но это плагин GCC, предоставляющий вам мощный язык, похожий на Lisp-домен, с мощным сопоставлением с образцом, включая возможность сопоставления Gimple-s, Tree-s, строк и т. Д.

Другие вопросы по тегам