--- /dev/null
+{-# 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