module Main where import Control.Monad (forM_) import Control.Monad.Writer import Data.Aeson (encode) import qualified Data.ByteString.Lazy.Char8 as BL import qualified Data.Text.IO import GHC.IO.Exception (ExitCode (ExitFailure, ExitSuccess)) import Language.Fiddle.Ast import Language.Fiddle.Compiler (coloredFormat, compile_, printDiagnostic) import Language.Fiddle.Compiler.Stage0 import Language.Fiddle.Compiler.Stage1 import Language.Fiddle.Compiler.Stage2 import Language.Fiddle.GenericTree (ToGenericSyntaxTree (toGenericSyntaxTree)) import qualified Language.Fiddle.Parser import qualified Language.Fiddle.Tokenizer import qualified System.Environment as System import System.Exit (exitWith) main :: IO () main = do argv <- System.getArgs case argv of [filePath] -> do text <- Data.Text.IO.readFile filePath let (diags, ma) = compile_ $ toStage3 =<< toStage2 =<< toStage1 =<< toStage0 filePath text ec <- case ma of Just ast -> do putStrLn $ BL.unpack $ encode $ toGenericSyntaxTree ast return ExitSuccess Nothing -> do putStrLn "\x1b[1;31mCompilation Failed\x1b[0m" return (ExitFailure 1) forM_ diags printDiagnostic exitWith ec _ -> do putStrLn "Wrong Args" exitWith (ExitFailure 2)