2013-10-30 2 views
2

LLVM IR 코드 (나중에 어셈블리 형식으로)를 나중에 내부 처리에 사용할 수있는 내부 Haskell 데이터 형식으로 파싱하는 방법을 찾고 있습니다. 이 작업을 수행하기 위해 하스켈 패키지가 있다고 생각하지만, 찾을 수없는 것 같습니다.LLVM IR을 파싱하기위한 하스켈 패키지?

제안 사항?

답변

2

하스켈 용 최신 LLVM 패키지는 llvm-general library입니다. LLT 바이트 코드 모듈을 문자열에서 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

딱! 이것은 내가 찾던 _just_이었습니다! 고맙습니다! – gablin

0

LLVM bindings이 있지만 구문 분석 부분에서 완전히 완료되지 못하고 최근의 LLVM 릴리스보다 지연 될 수 있습니다. IR 생성은 훨씬 더 완벽합니다. 하지만, 빠진 부분을 추가하는 것은 어렵지 않습니다. 필자는 이러한 바인딩을 사용하여 컴파일러 백엔드를 작성했습니다.

0

제안 사항?

LLVM-C API을 사용하여 FFI; 특히 the LLVMParseBitcode function이 트릭을해야합니다.

정확하게 원하는 것은 아니며 모듈을 쿼리하거나 수정하는 데 다른 LLVM-C 함수를 사용해야하지만 최소한 최신 LLVM IR 버전을 지원할 것입니다.

관련 문제