Adjust old type checker to new syntax, and refactor lambda lifter to use typed AST

This commit is contained in:
Martin Fredin 2023-02-15 23:55:16 +01:00
parent 514c809b1e
commit 210e55bb15
18 changed files with 554 additions and 145 deletions

View file

@ -4,10 +4,12 @@ module Main where
import Grammar.ErrM (Err)
import Grammar.Par (myLexer, pProgram)
import Grammar.Print (printTree)
import Interpreter (interpret)
--import Interpreter (interpret)
import LambdaLifter (abstract, freeVars, lambdaLift)
import Renamer (rename)
import System.Environment (getArgs)
import System.Exit (exitFailure, exitSuccess)
import TypeChecker (typecheck)
main :: IO ()
main = getArgs >>= \case
@ -18,12 +20,20 @@ main' :: String -> IO ()
main' s = do
file <- readFile s
putStrLn "\n-- parse"
putStrLn "\n-- Parser"
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 $ printTree typechecked
putStrLn "\n-- Lambda Lifter"
let lifted = lambdaLift parsed
let lifted = lambdaLift typechecked
putStrLn $ printTree lifted
-- interpred <- fromInterpreterErr $ interpret lifted
@ -41,6 +51,14 @@ fromSyntaxErr = either
exitFailure)
pure
fromTypeCheckerErr :: Err a -> IO a
fromTypeCheckerErr = either
(\err -> do
putStrLn "\nTYPECHECKER ERROR"
putStrLn err
exitFailure)
pure
fromInterpreterErr :: Err a -> IO a
fromInterpreterErr = either
(\err -> do