76 lines
1.8 KiB
Haskell
76 lines
1.8 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 --"
|
|
let renamed = 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
|
|
|
|
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
|