1

pthread ライブラリを使用して C プログラムを処理するために CIL を使用しています。ユーザー定義関数と非 pthread 関数は、pthread 関数とは異なる方法で処理する必要があります。次のような型定義を使用できますか。

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

そのため、最初に関数名でパターンマッチを行い、次にどちらかに送信します

processFunction (fn_name: string)

また

processPThreadFun (fn_name: PThreadFun)
4

1 に答える 1

4

OCaml では合計型を使用できます。これらはバリアントと呼ばれます。しかし、それらの値は文字列ではありません。あなたは宣言することができます

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

次に、そのような値を見つけるために CIL 表現を処理するコードが必要になりpthreadfun_tます。

ところで、 GCCコンパイラを拡張するためのドメイン固有言語であるMELTに興味があるかもしれません。MELT は GCC の内部表現、特にGimpleで動作します。これは Ocaml や CIL ベースではありませんが、Gimple -s、Tree-s、文字列などを照合する機能を含む、強力なパターン マッチングを備えた強力な Lisp のようなドメイン固有言語を提供する GCC プラグインです。

于 2013-09-22T07:46:01.727 に答える