churf/src/Main.hs
2023-03-22 12:45:51 +01:00

87 lines
2 KiB
Haskell

{-# LANGUAGE LambdaCase #-}
module Main where
-- import Codegen.Codegen (compile)
import Grammar.ErrM (Err)
import Grammar.Par (myLexer, pProgram)
import Grammar.Print (printTree)
-- import LambdaLifter.LambdaLifter (lambdaLift)
import Renamer.Renamer (rename)
import System.Environment (getArgs)
import System.Exit (exitFailure, exitSuccess)
-- import TypeChecker.TypeChecker (typecheck)
main :: IO ()
main =
getArgs >>= \case
[] -> print "Required file path missing"
(s : _) -> main' s
main' :: String -> IO ()
main' s = do
file <- readFile s
putStrLn "-- Parse Tree -- "
parsed <- fromSyntaxErr . pProgram $ myLexer file
putStrLn $ printTree parsed
putStrLn "\n-- Renamer --"
renamed <- fromRenamerErr . rename $ parsed
putStrLn $ printTree renamed
-- putStrLn "\n-- TypeChecker --"
-- typechecked <- fromTypeCheckerErr $ typecheck renamed
-- putStrLn $ show typechecked
-- putStrLn "\n-- Lambda Lifter --"
-- let lifted = lambdaLift typechecked
-- putStrLn $ printTree lifted
-- putStrLn "\n -- Printing compiler output to stdout --"
-- compiled <- fromCompilerErr $ compile lifted
-- putStrLn compiled
exitSuccess
fromCompilerErr :: Err a -> IO a
fromCompilerErr =
either
( \err -> do
putStrLn "\nCOMPILER ERROR"
putStrLn err
exitFailure
)
pure
fromRenamerErr :: Err a -> IO a
fromRenamerErr =
either
( \err -> do
putStrLn "\nRENAME ERROR"
putStrLn err
exitFailure
)
pure
fromSyntaxErr :: Err a -> IO a
fromSyntaxErr =
either
( \err -> do
putStrLn "\nSYNTAX ERROR"
putStrLn err
exitFailure
)
pure
fromTypeCheckerErr :: Err a -> IO a
fromTypeCheckerErr =
either
( \err -> do
putStrLn "\nTYPECHECKER ERROR"
putStrLn err
exitFailure
)
pure