Language.CはHaskell用の、C言語のソースコードを構文解析するライブラリ。

構文木はHaskellのデータとして操作可能で、これのおかげでC言語のコードを色々と操作できる。意味解析に役立ついくつかの補助関数も定義されているようだ(よく調べてない)。

Language.C のインストール happyをインストール

alexをインストール

haddockをインストール(haddockにリファレンスを生成させたい場合) この後 darcs get http://code.haskell.org/language-c cd language-c runhaskell Setup.hs configure runhaskell Setup.hs build sudo runhaskell Setup.hs install runhaskell Setup.hs haddock

使い方 このように変数の宣言をブロックの頭にもってくる．これだけでは jhcの吐くコードは gcc 2.95 ではコンパイルできないようだがそれはまた -bash-3.2$ cat test.c void f2 () { } void f1 () { { int y = 0 , z =y+ 1 ; f2 () ; int x = 1 ; } f2 () ; int y = 2 ; for ( int i = 0 ; i< 100 ; i++ ) { } } -bash-3.2$ ./moveVarDecls test.c void f2 () { } void f1 () { int y ; { int y, z ; int x ; y = 0 ; z = y + 1 ; f2 () ; x = 1 ; } f2 () ; y = 2 ; for ( int i = 0 ; i < 100 ; i++ ) { } }