aboutsummaryrefslogtreecommitdiff
path: root/lllars/parser.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lllars/parser.hs')
-rw-r--r--lllars/parser.hs21
1 files changed, 13 insertions, 8 deletions
diff --git a/lllars/parser.hs b/lllars/parser.hs
index f843849..da94ed7 100644
--- a/lllars/parser.hs
+++ b/lllars/parser.hs
@@ -1,6 +1,7 @@
import Data.Functor ( ($>) )
import Data.List ( intercalate )
import Data.Void
+import System.Environment
import Text.Megaparsec hiding ( Label
, Pos
, label
@@ -124,13 +125,17 @@ license = string "!!! all rights reserved to lars <3 !!!\n\n"
program :: Parser Program
program = license *> sepEndBy instr (some $ char '\n')
+parseProgram :: String -> IO ()
+parseProgram p = case runParser (program <* many (char '\n') <* eof) "" p of
+ Right ps ->
+ putStrLn $ "{ \"instructions\": [" <> intercalate "," (show <$> ps) <> "]}"
+ Left err -> putStrLn $ errorBundlePretty err
+
main :: IO ()
main = do
- f <- readFile "chal.lll"
- case runParser (program <* many (char '\n') <* eof) "" f of
- Right ps ->
- putStrLn
- $ "{ \"instructions\": ["
- <> intercalate "," (show <$> ps)
- <> "]}"
- Left err -> putStrLn $ errorBundlePretty err
+ args <- getArgs
+ case args of
+ [file] -> do
+ p <- readFile file
+ parseProgram p
+ _ -> putStrLn "Wrong number of arguments"