我正在尋找一種解析LLVM IR代碼(最好以彙編形式)的方式,將其轉換爲一些內部Haskell數據類型,以供日後處理。我認爲有這樣的Haskell包,但我似乎無法找到一個。解析LLVM IR的Haskell包?
有什麼建議嗎?
我正在尋找一種解析LLVM IR代碼(最好以彙編形式)的方式,將其轉換爲一些內部Haskell數據類型,以供日後處理。我認爲有這樣的Haskell包,但我似乎無法找到一個。解析LLVM IR的Haskell包?
有什麼建議嗎?
Haskell的現代LLVM包是llvm-general library。它具有綁定功能,可將LLVM字節碼模塊從字符串轉換爲AST的Haskell ADT。
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()
有LLVM bindings,但他們遠遠沒有完成其解析部分,可能落後於最近的LLVM版本。紅外線代更完整。儘管一旦碰到它,添加缺失的內容並不難。我已經使用這些綁定來編寫後端編譯器,他們從來都不是炫耀者。
有什麼建議嗎?
使用LLVM-C API通過FFI;具體來說,the LLVMParseBitcode function應該做的伎倆。
這不完全是你想要的,你必須使用其他LLVM-C函數來查詢或修改模塊,但至少你會支持最新的LLVM IR版本。
完美!這正是我正在尋找的東西!謝謝! – gablin