module Main where import System.Environment import System.Exit import Compiler import Optimiser import Parser import VM usage :: IO () usage = do progname <- getProgName putStrLn $ "Usage: " ++ progname ++ " [filename.lisp]" main :: IO () main = do clargs <- getArgs source <- case clargs of [] -> getContents [fname] -> readFile fname _ -> usage >> exitFailure prog <- parseProgram source >>= either (die . show) return irprog <- either die return (compileProgram prog) let opt = optimise irprog -- print opt vmRun opt