{-# LANGUAGE OverloadedStrings #-} module Main where import qualified AST import qualified Data.Text.Lazy.IO as Text import LLVM.IRBuilder import LLVM.AST.Constant import LLVM.AST.Float import LLVM.AST.Operand import LLVM.AST.Type import LLVM.Pretty main :: IO () main = do ast <- read <$> getContents let mdl = buildModule "main" $ function "expr" [] float $ \_ -> do build ast return () Text.putStrLn (ppllvm mdl) build :: AST.Expr -> IRBuilderT ModuleBuilder Operand build (AST.Num a) = pure $ ConstantOperand (Float (Single a)) build (AST.Add a b) = do va <- build a vb <- build b fadd va vb