33 lines
995 B
Haskell
33 lines
995 B
Haskell
{-# LANGUAGE LambdaCase #-}
|
|
module Main where
|
|
|
|
import Grammar.Par (myLexer, pProgram)
|
|
import Grammar.Print (printTree)
|
|
import LambdaLifter (abstract, freeVars, lambdaLift, rename)
|
|
import System.Environment (getArgs)
|
|
import System.Exit (exitFailure, exitSuccess)
|
|
|
|
main :: IO ()
|
|
main = getArgs >>= \case
|
|
[] -> print "Required file path missing"
|
|
(x:_) -> do
|
|
file <- readFile x
|
|
case pProgram (myLexer file) of
|
|
Left err -> do
|
|
putStrLn "SYNTAX ERROR"
|
|
putStrLn err
|
|
exitFailure
|
|
Right prg -> do
|
|
putStrLn "-- Parse"
|
|
putStrLn $ printTree prg
|
|
-- putStrLn "\n-- Abstract"
|
|
-- putStrLn . printTree $ (abstract . freeVars) prg
|
|
-- putStrLn "\n-- Rename"
|
|
-- putStrLn . printTree $ (rename . abstract . freeVars) prg
|
|
putStrLn "\n-- Lamda lifter"
|
|
putStrLn . printTree $ lambdaLift prg
|
|
putStrLn ""
|
|
exitSuccess
|
|
|
|
|
|
|