2

我正在寻找一种将 LLVM IR 代码(最好是汇编形式)解析为一些内部 Haskell 数据类型的方法,以便以后处理。我想有一些 Haskell 包可以做到这一点,但我似乎找不到。

有什么建议么?

4

3 回答 3

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 ()
于 2013-11-01T03:37:59.907 回答
0

LLVM 绑定,但它们在解析部分还远未完成,并且可能落后于最近的 LLVM 版本。IR 生成要完整得多。虽然,一旦你碰到它,添加缺少的东西并不难。我已经使用这些绑定来编写编译器后端,它们从来都不是什么大事。

于 2013-10-30T10:41:32.450 回答
0

有什么建议么?

通过FFI使用LLVM-C API;具体来说,LLVMParseBitcode 函数应该可以解决问题。

这不是您想要的,您必须使用其他 LLVM-C 函数来查询或修改模块,但至少您将支持最新的 LLVM IR 版本。

于 2013-10-30T10:57:22.353 回答