module Main where import System (getArgs) import System.FilePath (dropExtension, addExtension) import LexLambdaMini import ParLambdaMini import AbsLambdaMini import PrintLambdaMini import ErrM import qualified Compiler as C import LLVM.Core import LLVM.ExecutionEngine main = mapM_ processFile =<< getArgs processFile f = do s <- readFile f let ts = myLexer s case pProgram ts of Ok tree -> compile (dropExtension f) tree Bad err -> fail err compile moduleName prog = do (code, entryPoint) <- C.compile moduleName prog writeBitcodeToFile (addExtension moduleName ".bc") code