2013-10-30 137 views
2

我正在尋找一種解析LLVM IR代碼(最好以彙編形式)的方式,將其轉換爲一些內部Haskell數據類型,以供日後處理。我認爲有這樣的Haskell包,但我似乎無法找到一個。解析LLVM IR的Haskell包?

有什麼建議嗎?

回答

2

Haskell的現代LLVM包是llvm-general library。它具有綁定功能,可將LLVM字節碼模塊從字符串轉換爲AST的Haskell ADT。

參見:withModuleFromString

import LLVM.General 
import LLVM.General.Analysis 
import LLVM.General.Context 
import Control.Monad.Error 

main :: String -> IO() 
main src = do 
    _ <- withContext $ \context -> do 
    runErrorT $ withModuleFromString context src $ \mod -> do 
     ast <- moduleAST mod 
     -- Your logic here. 
    return() 
+0

完美!這正是我正在尋找的東西!謝謝! – gablin

0

LLVM bindings,但他們遠遠沒有完成其解析部分,可能落後於最近的LLVM版本。紅外線代更完整。儘管一旦碰到它,添加缺失的內容並不難。我已經使用這些綁定來編寫後端編譯器,他們從來都不是炫耀者。

0

有什麼建議嗎?

使用LLVM-C API通過FFI;具體來說,the LLVMParseBitcode function應該做的伎倆。

這不完全是你想要的,你必須使用其他LLVM-C函數來查詢或修改模塊,但至少你會支持最新的LLVM IR版本。