module Main where import Compiler import Control.Monad.State (evalState) import qualified Data.Map as Map import Error (showErrorList, showParserError) import Lexer (scan) import Parser (parse, parseFromFile) import System.Exit (exitFailure) import System.IO (hPutStr, hPutStrLn, stderr, stdout) main :: IO () main = do res <- parseFromFile (scan parse) "input" case res of Left err -> hPutStrLn stderr (showParserError err) >> exitFailure Right ast -> do res <- return $ evalState (compileAll ast) startState case res of Right _ -> print ast Left errs -> hPutStr stderr $ showErrorList errs