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 <- either (die . show) return (parseProgram source) irprog <- either die return (compileProgram prog) let opt = optimise irprog -- print opt vmRun opt