Create utility function for loading and parsing files

This commit is contained in:
Joscha 2019-11-13 07:58:41 +00:00
parent f1d097094d
commit 1b8680004e
2 changed files with 22 additions and 9 deletions

View file

@ -1,10 +1,9 @@
module Main where
import qualified Data.Text.IO as T
import Options.Applicative
import Text.Megaparsec
import Mima.Assembler.Parser
import Mima.IO
import Mima.Load
data Settings = Settings
@ -33,13 +32,10 @@ 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
asm <- parseFile parseState (infile settings)
case asm of
Nothing -> pure ()
Just (state, _) -> do
putStrLn "Parsing successful"
putStrLn $ "Writing result to " ++ outfile settings
saveStateToFile (outfile settings) state

17
src/Mima/IO.hs Normal file
View file

@ -0,0 +1,17 @@
module Mima.IO
( parseFile
) where
import qualified Data.Text.IO as T
import Text.Megaparsec
import Mima.Parser.Common
parseFile :: Parser a -> FilePath -> IO (Maybe a)
parseFile parser filepath = do
content <- T.readFile filepath
case parse parser filepath content of
Right a -> pure $ Just a
Left errorBundle -> do
putStrLn $ errorBundlePretty errorBundle
pure Nothing