23 lines
653 B
Haskell
23 lines
653 B
Haskell
module Main where
|
|
|
|
import System.Environment
|
|
import Control.Monad.Trans.Except (runExceptT, except)
|
|
|
|
import VirtualMachine.VM (VM)
|
|
import VirtualMachine.Interpreter (run)
|
|
import Assembler.Compiler (compile)
|
|
import qualified Data.ByteString as B
|
|
|
|
interpret :: String -> IO (Either String VM)
|
|
interpret input = runExceptT $ (except $ return $ input) >>= (except . compile) >>= (except . return . B.pack) >>= run
|
|
|
|
main :: IO ()
|
|
main = do
|
|
(filename:_) <- getArgs
|
|
input <- readFile filename
|
|
result <- interpret input
|
|
case result of
|
|
(Right vm) -> do
|
|
putStrLn $ "\n\nDone:\n" ++ (show vm)
|
|
(Left err) -> putStrLn $ "\n\nError:\n" ++ err
|