7a26601b60ab6ca070c604d893332a1bbd1a62ab
[kaleidoscope-hs-old.git] / Main.hs
1 {-# LANGUAGE OverloadedStrings #-}
2
3 module Main where
4
5 import qualified AST
6 import qualified Data.Text.Lazy.IO as Text
7 import LLVM.IRBuilder
8 import LLVM.AST.Constant
9 import LLVM.AST.Float
10 import LLVM.AST.Operand
11 import LLVM.AST.Type
12 import LLVM.Pretty
13
14 main :: IO ()
15 main = do
16   ast <- read <$> getContents
17   let mdl = buildModule "main" $
18         function "expr" [] float $ \_ -> do
19           build ast
20           return ()
21   Text.putStrLn (ppllvm mdl)
22
23 build :: AST.Expr -> IRBuilderT ModuleBuilder Operand
24 build (AST.Num a) = pure $ ConstantOperand (Float (Single a))
25 build (AST.Add a b) = do
26   va <- build a
27   vb <- build b
28   fadd va vb