diff --git a/app/MimaAsm/Main.hs b/app/MimaAsm/Main.hs new file mode 100644 index 0000000..77d6656 --- /dev/null +++ b/app/MimaAsm/Main.hs @@ -0,0 +1,45 @@ +module Main where + +import qualified Data.Text.IO as T +import Options.Applicative +import Text.Megaparsec + +import Mima.Assembler.Parser +import Mima.Load + +data Settings = Settings + { infile :: String + , outfile :: String + } deriving (Show) + +settingsParser :: Parser Settings +settingsParser = Settings + <$> strArgument + (metavar "INFILE" + <> help "The .mimasm file to assemble") + <*> strOption + (long "out" + <> short 'o' + <> metavar "OUTFILE" + <> help "The .mima file to write the assembled result to" + <> value "out.mima" + <> showDefault) + +opts :: ParserInfo Settings +opts = info (helper <*> settingsParser) $ fullDesc <> failureCode 1 + +main :: IO () +main = do + settings <- execParser opts + + putStrLn $ "Loading assembly file at " ++ infile settings + asm <- T.readFile (infile settings) + + putStrLn "Parsing assembly" + let parsed = parse parseState (infile settings) asm + case parsed of + Left errorBundle -> putStrLn $ errorBundlePretty errorBundle + Right (state, _) -> do + putStrLn "Parsing successful" + putStrLn $ "Writing result to " ++ outfile settings + saveStateToFile (outfile settings) state diff --git a/package.yaml b/package.yaml index b8cecfe..c6327d2 100644 --- a/package.yaml +++ b/package.yaml @@ -44,6 +44,16 @@ executables: dependencies: - mima-tools + mima-asm: + main: Main.hs + source-dirs: app/MimaAsm + ghc-options: + - -threaded + - -rtsopts + - -with-rtsopts=-N + dependencies: + - mima-tools + tests: mima-tools-test: main: Spec.hs