import System.Environment (getArgs) import System.Exit (exitFailure) import AbsJavalette import LexJavalette import ParJavalette import ErrM import TypeChecker -- driver check :: String -> IO () check s = case pProgram (myLexer s) of Bad err -> do putStrLn "SYNTAX ERROR" putStrLn err exitFailure Ok tree -> case typecheck tree of Bad err -> do putStrLn "TYPE ERROR" putStrLn err exitFailure Ok _ -> putStrLn "OK\n" ++ printTree tree main :: IO () main = do args <- getArgs case args of [file] -> readFile file >>= check _ -> do putStrLn "Usage: lab2 " exitFailure