用于解析LLVM IR的Haskell包?
我正在寻找一种将LLVM IR代码(最好是汇编形式)解析为某种内部Haskell数据类型的方法,以便以后处理时使用。我想有一些Haskell软件包可以做这件事,但我似乎找不到 有什么建议吗?有,但它们的解析部分还远远不够完整,可能会落后于最新的LLVM版本。红外线的生成要完整得多。尽管如此,只要你一碰到它,就不难添加所缺少的内容。我用这些绑定来编写编译器后端,它们从来都不是一个好东西 有什么建议吗 使用通孔;具体来说,我们应该做到这一点用于解析LLVM IR的Haskell包?,haskell,package,llvm,llvm-ir,Haskell,Package,Llvm,Llvm Ir,我正在寻找一种将LLVM IR代码(最好是汇编形式)解析为某种内部Haskell数据类型的方法,以便以后处理时使用。我想有一些Haskell软件包可以做这件事,但我似乎找不到 有什么建议吗?有,但它们的解析部分还远远不够完整,可能会落后于最新的LLVM版本。红外线的生成要完整得多。尽管如此,只要你一碰到它,就不难添加所缺少的内容。我用这些绑定来编写编译器后端,它们从来都不是一个好东西 有什么建议吗 使用通孔;具体来说,我们应该做到这一点 这并不是您想要的,您必须使用其他LLVM-C函数来查询或修
这并不是您想要的,您必须使用其他LLVM-C函数来查询或修改模块,但至少您可以支持最新的LLVM IR版本。Haskell的现代LLVM软件包是最新的。它具有将LLVM字节码模块从字符串转换为AST的Haskell ADT的绑定 见:
导入LLVM.General
导入LLVM.General.Analysis
导入LLVM.General.Context
导入控制.Monad.Error
main::String->IO()
主src=do
_做
运行错误$withModuleFromString上下文src$\mod->do
太完美了!!这正是我要找的!非常感谢。
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 ()