diff options
author | tomsmeding <tom.smeding@gmail.com> | 2017-01-20 16:21:22 +0100 |
---|---|---|
committer | tomsmeding <tom.smeding@gmail.com> | 2017-01-20 16:21:22 +0100 |
commit | fbed3a4b44823256f17c6a4473e0ec3f63792be6 (patch) | |
tree | 7e56bd392c38670ab89e072301e85205d00fca11 /main.hs |
Initial -- dump of stuff
Diffstat (limited to 'main.hs')
-rw-r--r-- | main.hs | 38 |
1 files changed, 38 insertions, 0 deletions
@@ -0,0 +1,38 @@ +module Main where + +import Control.Monad +import Data.Either +import System.Environment +import System.Exit + +import Codegen +import Parser +import PShow + + +fromLeft :: Either a b -> a +fromLeft (Left a) = a +fromLeft (Right _) = error "Either is not a Left" + +fromRight :: Either a b -> b +fromRight (Right b) = b +fromRight (Left _) = error "Either is not a Right" + +dieShow :: (Show a) => a -> IO () +dieShow = die . show + + +main :: IO () +main = do + args <- getArgs + when (length args /= 1) $ die "Pass NL file name as a command-line parameter" + + let fname = args !! 0 + parseResult <- (\file -> parseProgram file fname) <$> readFile fname + + when (isLeft parseResult) $ dieShow $ fromLeft parseResult + + let ast = fromRight parseResult + pprint ast + + either die print $ codegen ast "Module" fname |