aboutsummaryrefslogtreecommitdiff
path: root/src/Main.hs
blob: 0b4325cb4a593de5c9d4c324e686f286b88622ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
module Main where

import Compiler
import Control.Monad.State (evalState)
import qualified Data.Map as Map
import Error (showErrorList)
import Lexer (scan)
import Parser (parse, parseFromFile)
import System.Exit (exitFailure)
import System.IO (hPutStrLn, stderr, stdout)

main :: IO ()
main = do
  res <- parseFromFile (scan parse) "input"
  case res of
    Left err -> hPutStrLn stderr ("error: " ++ show err) >> exitFailure
    Right ast -> do
      res <- return $ evalState (compile ast) startState
      case res of
        Right _ -> print ast
        Left errs -> hPutStrLn stderr $ showErrorList errs