From f9496adf8c15640a15f6c2877267f6d577438480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Mon, 8 Nov 2021 16:42:28 +0100 Subject: [PATCH] Create compiler facade for Tokenizer, Parser and Emitter --- MVM.cabal | 1 + app/Assembler/Compiler.hs | 10 ++++++++++ app/Main.hs | 17 ++++++++++++++++- 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 app/Assembler/Compiler.hs diff --git a/MVM.cabal b/MVM.cabal index 5e0a0ef..f350a45 100644 --- a/MVM.cabal +++ b/MVM.cabal @@ -31,6 +31,7 @@ executable MVM Assembler.Tokenizer Assembler.Parser Assembler.Emitter + Assembler.Compiler Util -- LANGUAGE extensions used by modules in this package. diff --git a/app/Assembler/Compiler.hs b/app/Assembler/Compiler.hs new file mode 100644 index 0000000..e4b6abf --- /dev/null +++ b/app/Assembler/Compiler.hs @@ -0,0 +1,10 @@ +module Assembler.Compiler where + +import Data.Word (Word8) + +import Assembler.Tokenizer (tokenize) +import Assembler.Parser (parse) +import Assembler.Emitter (emit) + +compile :: String -> Either String [Word8] +compile input = return input >>= tokenize >>= parse >>= emit diff --git a/app/Main.hs b/app/Main.hs index 65ae4a0..350c58b 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -1,4 +1,19 @@ module Main where +import System.Environment +import qualified Data.ByteString as B +import qualified VirtualMachine as VM + +import Assembler.Compiler (compile) + + +run :: String -> IO () +run input = case compile input of + (Right bytes) -> print $ VM.run VM.empty (B.pack bytes) + (Left err) -> putStrLn err + main :: IO () -main = putStrLn "Hello, Haskell!" +main = do + (filename:_) <- getArgs + input <- readFile filename + run input