Fix interpreter

This commit is contained in:
Martin Fredin 2023-02-11 11:04:39 +01:00
parent e212c79a44
commit d67eddcf0f
5 changed files with 105 additions and 33 deletions

View file

@ -1,8 +1,10 @@
{-# LANGUAGE LambdaCase #-}
module Main where
import Grammar.ErrM (Err)
import Grammar.Par (myLexer, pProgram)
import Grammar.Print (printTree)
import Interpreter (interpret)
import LambdaLifter (abstract, freeVars, lambdaLift)
import System.Environment (getArgs)
import System.Exit (exitFailure, exitSuccess)
@ -10,20 +12,41 @@ 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-- Lambda lifter"
putStrLn . printTree $ lambdaLift prg
putStrLn ""
exitSuccess
(s:_) -> main' s
main' :: String -> IO ()
main' s = do
file <- readFile s
putStrLn "\n-- parse"
parsed <- fromSyntaxErr . pProgram $ myLexer file
putStrLn $ printTree parsed
putStrLn "\n-- Lambda Lifter"
let lifted = lambdaLift parsed
putStrLn $ printTree lifted
interpred <- fromInterpreterErr $ interpret lifted
putStrLn "\n-- interpret"
print interpred
exitSuccess
fromSyntaxErr :: Err a -> IO a
fromSyntaxErr = either
(\err -> do
putStrLn "\nSYNTAX ERROR"
putStrLn err
exitFailure)
pure
fromInterpreterErr :: Err a -> IO a
fromInterpreterErr = either
(\err -> do
putStrLn "\nINTERPRETER ERROR"
putStrLn err
exitFailure)
pure